'no matches bug' for posterior_predict


#1

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

#2

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


#3

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.


#4

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].


#5

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


#6

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.


#7

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.


#8

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


#9

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?


#10

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