1
$\begingroup$

The data is like this.(of course, I have a more data)

week  name reponse x1      x2
 5    a      1    1.9    0.5
 6    a      1    1.4    0.4      
 7    a      1    1.62   0.2     
 8    a      1    1.2    0.1
 4    b      0    1      0.2
 5    b      0    1.3    0.3
 7    b      0    1.4    0.4
 8    b      0    0.95   0.3
 1    c      1   -0.6    0.2
 8    c      1    0.2    0.1

I want to know whether whose response is 1 or 0.

model <- glm(response ~ week + x1 + x2, data = df)
predict(model, new_data, type = "response")

but the output is

  1         2         3         4         5 
0.3266134 0.3967968 0.4260996 0.4576125 0.5436105 
        6         7         8         9        10 
0.5428340 0.5596906 0.6288423 0.7670795 0.4516189 

I want to print the "a" is (predictions) "b" is (predictions), ... etc, not 1 is 0.3266134, 2 is 0.3967968 .. etc.

How can I fix it?

If the code is right, how can I interpret it?

$\endgroup$

1 Answer 1

3
$\begingroup$

First, your code ignores the binary nature of the response, and the fact that you have multiple observations with the same name. Without knowing details of the variables and the data collection, it is impossible to be sure what is the appropriate model to use.

But assuming name refers to the subjects, and you are measuring the same subjects in different weeks, this is longitudinal data, and you should probably use a mixed effects model.

For example,

library(lme4)
model <- glmer(response ~ week + x1 + x2 + (1 | name), 
             family=binomial, data=df)

The family=binomial indicates that response is a binary variable. The (1 | name) indicates that the data are repeated measures on the same subjects. The model has a random effect for subjects.

Now to answer your question, it depends what you mean by a prediction. You have different values of the covariates x1 and x2 for each week/subject combination, so you naturally have a different prediction for each row of your data. Just use predict() to get these values. The order of the resulting output is the same as the order of the rows in your data frame.

If you are expecting one value per name, then I assume you want to estimate effects due to the subject rather than predictions. You can get that with ranef(model). However, these will be conditional on the week, x1 and x2 being zero. You can estimate subject effects conditional on other values of week, x1 and x2; a common approach is to set them to their median values.

$\endgroup$
3
  • $\begingroup$ I'm sorry. My purpose is to predict name's response(i.e, state) on week9, week 10, ... etc. $\endgroup$
    – 0 Hong
    Aug 11, 2018 at 2:35
  • $\begingroup$ What kind of analysis I do for it? $\endgroup$
    – 0 Hong
    Aug 11, 2018 at 2:43
  • $\begingroup$ Just use predict in that case. The order of the results is the same as the order of your rows. $\endgroup$ Aug 11, 2018 at 3:54

Not the answer you're looking for? Browse other questions tagged or ask your own question.