【问题标题】:Prediction in Poisson regression, data frame in R (Error: arguments imply differing number of rows: 0, 1)泊松回归中的预测,R 中的数据框(错误:参数暗示不同的行数:0、1)
【发布时间】:2018-05-16 02:39:42
【问题描述】:

构建泊松回归模型后,我们可以使用 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

【问题讨论】:

  • 为什么“复杂的”factor 声明?你为什么不做例如hypertensive = as.factor(myd$hypertensive) 等等?
  • 另外,你的问题加标题与泊松回归无关。
  • 试试expand.grid 而不是data.frame,这可能是你想要的。

标签: r regression prediction poisson


【解决方案1】:

使用@Neal Fultz 所写的expand.grid。您的变量在 data.frame 的参数中的长度为 2-4,这要求它们都具有相同的长度。

更新

我不知道为什么有人对我的答案投了反对票,但我在这里扩展了我的答案以使其一目了然。问题是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

【讨论】:

  • 感谢您的快速回复。你的解释对我来说很清楚。
  • 乐于助人。如果它回答了您的问题,请通过单击接受按钮关闭问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
相关资源
最近更新 更多