'no matches bug' for posterior_predict

I encountered a “no matches bug” error while trying to do a posterior_predict for a new data frame. It worked for one HB model, but not another. (Both models ran with no error.)

What might be the reason for this? Thanks in advance.

  • pasky

Weird labels for the grouping factor. Try to choose label names that do not have spaces or special characters besides the underscore.

That may not be it, Ben. Here’s the code generating the error:

load(url(‘http://datadetectives.org/wp-content/uploads/2018/02/hb1.rda’))
load(url(‘http://datadetectives.org/wp-content/uploads/2018/02/hb2.rda’))

#TWO HB MODELS DIFFER ONLY IN DISSOLVED OXYGEN VERSUS WATER TEMPERATURE
#(lDO and lWTEMP, “l” reminds me these are logged values)

xdata1 <- data.frame(
PH = c(7,8),lPC = c(-1,0),lTP = c(-3,-2),lTN=c(-5,-3)
,NR = c(3,6),season = ‘summer’,Sbin = ‘1’
#,lWTEMP = c(2.2,2.7)
,lDO = 2
)

xdata2 <- data.frame(
PH = c(7,8),lPC = c(-1,0),lTP = c(-3,-2),lTN=c(-5,-3)
,NR = c(3,6),season = ‘summer’,Sbin = ‘1’
,lWTEMP = c(2.2,2.7)
#,lDO = 2
)

#THIS WORKS
y_rep <- posterior_predict(hb1,xdata1)

#THIS DOES NOT
y_rep <- posterior_predict(hb2,xdata2)

###############################
Follow up question:
For the first y_rep, 2 columns were generated. What do these columns represent and, as a corollary, how does the line ‘apply(y_rep, 1, diff)’ generate the predictions/simulations I’m looking for?

Thanks so much.

posterior_predict yields a matrix that is simulations by observations. Here, xdata* has two observations, so you get two columns in y_rep. Then apply(y_rep, 1, diff) is a complicated way to do y_rep[,2] - y_rep[,1].

Thanks, Ben. Any thoughts on why posterior_predict is generating that error for hb2?

Probably the poly thing, which is somewhat unnecessary given that you are wisely specifying QR = TRUE. Just created the squared and cubed terms manually before putting them into your model.

Okay. I’ll give it a try and see if that works. But note that hb1 also has the polynomial form. I’ll let you know if squaring and cubing does the trick. (Parenthetically, I should also note that the poly function creates orthogonal polynomials, thereby minimizing correlation among the poly coefficients.) Thanks for the help.

Right. The QR = TRUE argument does the same thing but for all of the predictors including the interactive terms.

Ahh, right. I just ran another model, to include both Water Temperature and Dissolved Oxygen. Posterior_Predict worked fine, even with the poly form. Model results look GREAT!! But…1 Divergent Transition, even with adapt_delta = 0.9999. Would the estimates still be unreliable with just 1 DT?

I would still try to get rid of it, but when you do, it likely won’t make a noticeable difference.