tests/testthat/test-CrossStempCens.R

#' Cross-Validation in spatio-temporal model with censored/missing responses
#'
#' This function performs cross-validation in spatio-temporal model with censored/missing responses, which measure
#' the performance of the predictive model on new test dataset. The cross-validation method for assessing the
#' model performance is validation set approach (or data split).
#'
#' @param Pred.StempCens an object of class \code{Pred.StempCens} given as output by the \code{\link{PredStempCens}} function.
#' @param yObs.pre a vector of the observed responses, the test data.
#'
#' @return
#' \item{Bias}{bias prediction error.}
#' \item{Mspe}{mean squared prediction error.}
#' \item{Rmspe}{root mean squared prediction error.}
#' \item{Mae}{mean absolute error.}
#'
#' @author Katherine L. Valeriano, Victor H. Lachos and Larissa A. Matos
#'
#' @seealso \code{\link{EstStempCens}}, \code{\link{PredStempCens}}
#'
#' @examples
#' # Initial parameter values
#' beta <- c(-1,1.50)
#' phi <- 5;     rho <- 0.6
#' tau2 <- 0.80; sigma2 <- 2
#' # Simulating data
#' n1 <- 7    # Number of spatial locations
#' n2 <- 5    # Number of temporal index
#' set.seed(400)
#' x.co <- round(runif(n1,0,10),9)    # X coordinate
#' y.co <- round(runif(n1,0,10),9)    # Y coordinate
#' coord <- cbind(x.co,y.co)          # Cartesian coordinates without repetitions
#' coord2 <- cbind(rep(x.co,each=n2),rep(y.co,each=n2)) # Cartesian coordinates with repetitions
#' time <- as.matrix(seq(1,n2))       # Time index without repetitions
#' time2 <- as.matrix(rep(time,n1))   # Time index with repetitions
#' x1 <- rexp(n1*n2,2)
#' x2 <- rnorm(n1*n2,2,1)
#' x  <- cbind(x1,x2)
#' media <- x%*%beta
#' # Covariance matrix
#' Ms <- as.matrix(dist(coord))   # Spatial distances
#' Mt <- as.matrix(dist(time))    # Temporal distances
#' Cov <- CovarianceM(phi,rho,tau2,sigma2,Ms,Mt,0,"gaussian")
#' # Data
#' require(mvtnorm)
#' y <- as.vector(rmvnorm(1,mean=as.vector(media),sigma=Cov))
#' data <- data.frame(coord2,time2,y,x)
#' names(data) <- c("x.coord","y.coord","time","yObs","x1","x2")
#' # Splitting the dataset
#' local.est  <- coord[c(1,2,4,5,6),]
#' data.est   <- data[data$x.coord%in%local.est[,1] & data$y.coord%in%local.est[,2],]
#' data.valid <- data[data$x.coord%in%coord[c(3,7),1] & data$y.coord%in%coord[c(3,7),2],]
#' # Censored
#' perc <- 0.20
#' y  <- data.est$yObs
#' aa <- sort(y);  bb <- aa[1:(perc*nrow(data.est))]
#' cutof <- bb[perc*nrow(data.est)]
#' cc <- matrix(1,nrow(data.est),1)*(y<=cutof)
#' y[cc==1] <- cutof
#' data.est <- data.frame(data.est[,-c(4,5,6)],y,cc,data.est[,c(5,6)])
#' names(data.est) <- c("x.coord","y.coord","time","yObs","censored","x1","x2")
#'
#' # Estimation
#' y  <- data.est$yObs
#' x  <- cbind(data.est$x1,data.est$x2)
#' cc <- data.est$censored
#' time2  <- as.data.frame(data.est$time)
#' coord2 <- data.est[,1:2]
#' LI <- y; LI[cc==1] <- -Inf     # Left-censored
#' LS <- y
#' est_teste <- EstStempCens(y, x, cc, time2, coord2, LI, LS, init.phi=3.5, init.rho=0.5,
#'                  init.tau2=1,type.Data="balanced", method="nlminb", kappa=0,
#'                  type.S="gaussian", IMatrix=FALSE, M=20, perc=0.25, MaxIter=300,
#'                  pc=0.20)
#' # Prediction
#' locPre <- data.valid[,1:2]
#' timePre <- as.data.frame(data.valid$time)
#' xPre <- cbind(data.valid$x1,data.valid$x2)
#' pre_teste <- PredStempCens(est_teste, locPre, timePre, xPre)
#' class(pre_teste)
#'
#' # Cross-validation
#' cross_teste <- CrossStempCens(pre_teste,data.valid$yObs)
#' cross_teste$Mspe # MSPE

CrossStempCens = function(Pred.StempCens, yObs.pre){

  if(class(Pred.StempCens)!="Pred.StempCens") stop("An object of the class Pred.StempCens must be provided")

  if (length(Pred.StempCens$predValues) != length(yObs.pre)) stop("non-confortable length of parameter yObs.pre")

  #---------------------------------------------------------------------#
  #                                Outputs                              #
  #---------------------------------------------------------------------#

  ypred = Pred.StempCens
  crossvalida <- CrossValidation(yObs.pre,ypred$predValues)

  crossvalida

}

Try the StempCens package in your browser

Any scripts or data that you put into this service are public.

StempCens documentation built on Oct. 23, 2020, 7:28 p.m.