Прогнозирование в регрессии Пуассона, кадр данных в R (Ошибка: аргументы подразумевают разное количество строк: 0, 1)

После построения модели регрессии Пуассона мы можем построить прогноз, используя функцию прогнозирования в R. Но у меня есть проблема, когда я не могу работать с моими новыми данными, установленными в R. Это дает ошибку.

newdata <- data.frame(
    patient = mean(myd$patient),
    hypertensive = factor(1:4, levels = 1:4, labels = levels(myd$hypertensive)),
    PCOS = factor(1:2, levels = 1:2, labels = levels(myd$PCOS)),
    age = factor(1:3, levels = 1:3, labels = levels(myd$age)),
    miscarriage = factor(1:2, levels=1:2, labels = levels(myd$miscarriage))) 

Ошибка в data.frame (пациент = среднее (myd $ пациент), гипертонический = фактор (1: 4,: аргументы подразумевают разное количество строк: 1, 4, 2, 3)


person Miss Skinny    schedule 01.12.2017    source источник
comment
Почему замысловатые factor декларации? Почему бы вам просто не сделать, например, hypertensive = as.factor(myd$hypertensive) и так далее?   -  person Maurits Evers    schedule 02.12.2017
comment
Кроме того, ваш вопрос плюс заголовок не имеет ничего общего с регрессией Пуассона.   -  person Maurits Evers    schedule 02.12.2017
comment
попробуйте expand.grid вместо data.frame, это, вероятно, то, что вы хотите вместо этого.   -  person Neal Fultz    schedule 02.12.2017


Ответы (1)


Используйте expand.grid, как пишет @Neal Fultz. У вас переменная имеет длину 2-4 в аргументе data.frame, что требует, чтобы все они имели одинаковую длину.

Обновлять

Я не знаю, почему кто-то проголосовал против моего ответа, но я расширяю свой ответ здесь, чтобы сделать его кристально ясным. Проблема в том, что входные аргументы data.frame имеют разную длину.

> # create data example
> myd <- data.frame(
+   # NOTICE: I assume that your patient covariate is continuous -- otherwise I 
+   #         do not get why you would take a mean
+   patient      = 1:12,
+   # here are the factors
+   hypertensive = rep(letters[1:4], 3),
+   PCOS         = rep(letters[1:2], 6),
+   age          = rep(letters[1:3], 4),
+   miscarriage  = rep(letters[1:2], 6)
+ )
> myd # show data
   patient hypertensive PCOS age miscarriage
1        1            a    a   a           a
2        2            b    b   b           b
3        3            c    a   c           a
4        4            d    b   a           b
5        5            a    a   b           a
6        6            b    b   c           b
7        7            c    a   a           a
8        8            d    b   b           b
9        9            a    a   c           a
10      10            b    b   a           b
11      11            c    a   b           a
12      12            d    b   c           b
> 
> # your issue is that the length you pass to data.frame differs
> length(factor(1:4, levels = 1:4, labels = levels(myd$hypertensive)))
[1] 4
> length(factor(1:2, levels = 1:2, labels = levels(myd$PCOS)))
[1] 2
> 
> # however, you can use expand.grid
> newdata  <- expand.grid(
+   patient = mean(myd$patient),
+   hypertensive = factor(1:4, levels = 1:4, labels = levels(myd$hypertensive)),
+   PCOS = factor(1:2, levels = 1:2, labels = levels(myd$PCOS)),
+   age = factor(1:3, levels = 1:3, labels = levels(myd$age)),
+   miscarriage = factor(1:2, levels=1:2, labels = levels(myd$miscarriage))) 
> 
> # it will have many examplse though 
> nrow(newdata)
[1] 48
person Benjamin Christoffersen    schedule 02.12.2017
comment
Спасибо за быстрый ответ. Ваше объяснение мне очень понятно. - person Miss Skinny; 03.12.2017
comment
Рад помочь. Закройте вопрос, если он ответил на ваш вопрос, нажав кнопку принятия. - person Benjamin Christoffersen; 03.12.2017