Error: $ operator is invalid for atomic vectors

  • Operating System: Microsoft Windows [Version 10.0.17134.345]
  • brms Version: 2.5.0

I want to fit a binomial brms model containing the weight option. I have followed the instructions discussed here but when I try using the code and data below I get the error:

Error: $ operator is invalid for atomic vectors

dt = read.table(header = TRUE, text = "
n r r/n group treat c2 c1 w
62 3 0.048387097 1 0 0.1438 1.941115288 1.941115288
96 1 0.010416667 1 0 0.237 1.186583128 1.186583128
17 0 0 0 0 0.2774 1.159882668 3.159882668
41 2 0.048780488 1 0 0.2774 1.159882668 3.159882668
212 170 0.801886792 0 0 0.2093 1.133397521 1.133397521
143 21 0.146853147 1 1 0.1206 1.128993008 1.128993008
143 0 0 1 1 0.1707 1.128993008 2.128993008
143 33 0.230769231 0 1 0.0699 1.128993008 1.128993008
73 62 1.260273973 0 1 0.1351 1.121927228 1.121927228
73 17 0.232876712 0 1 0.1206 1.121927228 1.121927228")

mod <- brm(r|trials(n)|weights(w) ~ treat*c2+(1|group), data=dt, family=binomial(link=logit))

I would appreciate any help to solve this error.

Can we get a traceback() after you trigger that error message?

r|trials(n)|weights(w) should rather be r | trials(n) + weights(w)

Thanks a lot for your help @paul.buerkner and @bgoodri.

The specification

r | trials(n) + weights(w)

works.

Just another, related question, if you don’t mind:
I would like to get proportions r/n of the expected values of the response and the posterior samples of the response, instead of N*p from the output of fitted() and predict() functions as discussed here.

Any help would be much appreciated.

In newdata set your n variable to 1.

When I set n=1 in newdata I get this error:

Error: Number of trials must be positive integers.

newdata <- data.frame(treat = factor(c("0", "1")),
                      c2= c(0,1),
                      group= factor(c("0", "1"),
                      n = 1)
predict(mod, newdata = newdata)

Thanks in advance for your help.

You should double check your newdata for typos. When I write

newdata <- data.frame(
  treat = c(0, 1), c2=c(0,1),
  group= factor(c("0", "1")), n = 1
)

it works for me.

1 Like

You are right, @paul.buerkner

There was a typo in the sample data.

It works for me too.

Thanks a lot for this.

Hi,

I am doing multinomial logit regression of survey data.

My dependent variable has three levels 1,2,3. I divied the data set 1 as reference value that named as training and 2,3 as testing value. When I go for prediction of training it Works. But when I go for testing values,

pred2<- predict(m1,data=testing)
tab2<- table(pred,(testing$CCS))
(CCS is DV of my model)

Then, it comes like this
Error in testing$CCS : $ operator is invalid for atomic vectors

Its coming the same error!
I checked
is.vector(testing)

It is showing FALSE
Then why?

Would you please help me to fix it?