Прогноз в регрессии Пуассона, фрейм данных в 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
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