# Plates

Using plate notation can be a powerful way to describe your model

## What is a plate?

A plate is a group of vertices that is repeated multiple times in the network. They typically represent a concept larger than a vertex like an agent in an ABM, a time series or some observations that are associated.

## How do you build them?

We’re redesigning how this is done but for now there are some handy helper functions to get you started.

Let’s say you have a class MyData that looks like this:

public static class MyData {
public double x;
public double y;

public MyData(String x, String y) {
this.x = Double.parseDouble(x);
this.y = Double.parseDouble(y);
}
}

This is an example of how you could pull in data from a csv file and run linear regression, using plates to build identical sections of the graph for each line of the csv.

/**
* Each plate contains a linear regression model:
* VertexY = VertexX * VertexM + VertexB
*
* @param dataFileName The input data file defines, for each plate:
*                     - the value of the input, VertexX
*                     - the value of the observed output, VertexY
*/
public Plates buildPlates(String dataFileName) {
//Parse the csv data to MyData objects
.asRowsDefinedBy(MyData.class)

DoubleVertex m = new GaussianVertex(0, 1);
DoubleVertex b = new GaussianVertex(0, 1);
VertexLabel xLabel = new VertexLabel("x");
VertexLabel yLabel = new VertexLabel("y");

//Build plates from each line in the csv
Plates plates = new PlateBuilder<MyData>()
.fromIterator(allMyData.iterator())
.withFactory((plate, csvMyData) -> {

ConstantDoubleVertex x = new ConstantDoubleVertex(csvMyData.x).setLabel(xLabel);
DoubleVertex y = m.multiply(x).plus(b).setLabel(yLabel);

DoubleVertex yObserved = new GaussianVertex(y, 1);
yObserved.observe(csvMyData.y);

// this labels the x and y vertex for later use