I am running a phylogenetic regression and then I am using
brms:predict() to estimate response variables for species with predictor measurements. I’ll call them unknowns. I have phylogenetic information for the unknowns. I would like to use the vcv matrix that includes the unknowns in the prediction step so that the auto-correlation can be included in the prediction. This led me to
prepare_predictions(newdata2...). However I am not sure that
newdata2 is doing what I think it is, or what I want it to do. Here is an example:
library("brms") library( "dplyr") library("ape") # read data from brms phylo tutorial phylo <- ape::read.nexus("https://paul-buerkner.github.io/data/phylo.nex") A <- ape::vcv.phylo(phylo, corr = TRUE) data_simple <- read.table("https://paul-buerkner.github.io/data/data_simple.txt", header = TRUE) # remove first 5 species data_mod <- data_simple %>% slice(-(1:5)) # keep first 5 species for prediction data_pred <- data_simple %>% slice(1:5) # quick model for demonstration model_simple <- brm( phen ~ cofactor + (1|gr(phylo, cov = A)), data = data_mod, data2 = list(A = A), chains = 2, iter = 1000 ) # Model runs properly even though there are species in A that are not in data_mod # Now Predict Missing Data # Make newdata2. This matrix A contains all of the species (1-200) phylst <- list(A) # list elements must be named names(phylst) <- "A" # Run the prediction with the newdata2 argument p1 <- predict(model_simple, newdata = data_pred, newdata2 = phylst, allow_new_levels = TRUE) # Run without the newdata2 argument p2 <- predict(model_simple, newdata = data_pred, allow_new_levels = TRUE)
These two predictions, methods,
p1 with and
newdata2, provide the same results (with a bit of variation based on the unique runs). I am finding the same thing with my data. Also
p1 runs just as fast as
p2. I expect it to be a bit slower. These things combined make me think it’s not using this additional data from the vcv matrix in the prediction, but I have no way to tell if the data give the same result or the method is ignoring the matrix.
Am I using
newdata2 correctly? I can’t find any examples of its use anywhere! @paul.buerkner I am tagging you here because I think you may be the only one who knows the details of this.