knitr::opts_chunk$set(echo = TRUE) library(dplyr) library(ForecastFramework) library(DAAG)
An important aspect of our efforts here is to allow models to automatically determine whether or not data is appropriate to use the model on. Ideally, we want our data to be as broadly applicable as is reasonable, regardless of its storage. We can accomplish this using polymorphism
, a way for different objects to have the same behaviours. Consider the following two sources of data:
data("Orange") listFormData = ObservationList$new( data=Orange )
and
library(DAAG) data("bomregions") matrix_data = t(bomregions[1:8,c(10:17)]) matrixFormData = IncidenceMatrix$new( data=matrix_data, colData = list( yr=bomregions[1:8,1] ) )
If we want, we can think of the listFormData
as a sparse matrix representation to the matrixFormData
's dense representation. If this is the case, we should be able to use listFormData
and matrixFormData
in the same way as matrices.
listFormData$formArray( row='Tree', col='age', val='circumference' ) listFormData$mat matrixFormData$mat
Notice they have the same matrix format. Moreover, because of the inheritance structure of the classes, we can use any model which takes MatrixData
input on either one.
model = MoveAheadModel$new() model$fit(listFormData) model$fit(matrixFormData) model$predict(matrixFormData)$mean()$mat model$predict(listFormData)$mean()$mat
While it is nice to be able to use any sort of data when we do our modeling, for it to work well, our models need to be flexible. MoveAheadModel takes an MatrixData
object as input, which both IncidenceMatrix
, and ObservationList
inherit from. When choosing the class of input for your model, consider attempting to choose a Class as high on the inheritance tree (see vignette('ClassDiagram','ForecastFramework')
) as possible. The higher on the tree, the more data you will be able to pass to your model immediately. In a similar vein, when loading data, try to store it as low on the tree as possible, so that as many models will be able to use it as can be.
There are also various methods for converting from one class to another, so even if your data isn't in the right format, you can modify it.
anotherMatrixFormData = IncidenceMatrix$new(listFormData) anotherMatrixFormData$mat listFormData$mat
Though the two objects are of different classes, they take the same data.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.