Как получить фрейм данных, используемый в модели GEE?

У меня есть продольный фрейм данных с несколькими строками на идентификатор.

    > data("dietox")
    > head(dietox, 5)
   Pig    Evit    Cu Litter Start   Weight      Feed Time
1 4601 Evit000 Cu000      1  26.5 26.50000        NA    1
2 4601 Evit000 Cu000      1  26.5 27.59999  5.200005    2
3 4601 Evit000 Cu000      1  26.5 36.50000 17.600000    3
4 4601 Evit000 Cu000      1  26.5 40.29999 28.500000    4
5 4601 Evit000 Cu000      1  26.5 49.09998 45.200001    5

Я пытаюсь подогнать модель GEE для прогнозирования Weight для каждой строки кадра данных.

    library(gee)
    library(dplyr)

    > model1 <- gee(Weight ~ Start + Feed, id=Pig, data=dietox, corstr="exchangeable")
    > model1

 GEE:  GENERALIZED LINEAR MODELS FOR DEPENDENT DATA
 gee S-function, version 4.13 modified 98/01/27 (1998) 

Model:
 Link:                      Identity 
 Variance to Mean Relation: Gaussian 
 Correlation Structure:     Exchangeable 

Call:
gee(formula = Weight ~ Start + Feed, id = Pig, data = dietox, 
    corstr = "exchangeable")

Number of observations :  789 

Maximum cluster size   :  11 


Coefficients:
(Intercept)       Start        Feed 
  5.1539561   0.9384232   0.4294209 

Теперь я хочу иметь возможность добавить новый столбец к фрейму данных - prediction, который содержит прогнозируемое значение веса для каждой строки данных. Идея состоит в том, что тогда я смогу сравнить исходную переменную Weight с переменной prediction в разных точках переменной Time.

Когда я пытаюсь сделать это с помощью функций mutate и predict, я получаю сообщение об ошибке, в котором говорится, что количество наблюдений, используемых в подгонке модели (789), отличается от количества наблюдений в исходном фрейме данных (861).

> new_df <- dietox %>%
+   mutate(prediction = predict(model1))
Error: Column `prediction` must be length 861 (the number of rows) or one, not 789

У меня следующие вопросы: 1. Как мне извлечь фрейм данных для 789 наблюдений, которые использовались при подборе модели? 2. Почему количество наблюдений, используемых в модели, отличается от общего количества наблюдений в исходной системе данных?


person crabcanon    schedule 17.08.2019    source источник


Ответы (1)


789 наблюдений, использованных для подгонки модели, были без NA. У вас 72 наблюдения как NA в Feed столбце

sum(is.na(dietox$Feed))
#[1] 72

а 789 + 72 дает вам полные 861 наблюдение. Чтобы получить все предсказанные значения, которые вы могли бы сделать

dietox$Prediction <- NA
dietox$Prediction[!is.na(dietox$Feed)] <- predict(model1)

head(dietox)
#    Weight      Feed Time  Pig Evit Cu Litter Prediction
#1 26.50000        NA    1 4601    1  1      1         NA
#2 27.59999  5.200005    2 4601    1  1      1   31.43603
#3 36.50000 17.600000    3 4601    1  1      1   36.76708
#4 40.29999 28.500000    4 4601    1  1      1   41.45324
#5 49.09998 45.200001    5 4601    1  1      1   48.63296
#6 55.39999 56.900002    6 4601    1  1      1   53.66306

Также значения, которые использовались в модели, присутствуют в model1$y.

person Ronak Shah    schedule 17.08.2019