我有一个线性模型 c
显示为“12 的列表”给出 y=3x+75
然后我想要使用“预测”公式对 x=23 进行预测,置信区间为 95%:
predict(c, newdata=data.frame(BMI=23), interval="prediction")
这给了我以下内容:
List of 16 fit, lwr, upr
警告信息: 'newdata' 有 1 行,但发现的变量有 16 行
有什么技巧可以使这项工作顺利进行吗?
答案 0 :(得分:1)
这是我可以重现您的警告的一种方式:
dd <- data.frame(BMI=21:32)
dd$y <- rnorm(12, mean=3*dd$BMI+75, sd=1)
c <- lm(dd$y ~ dd$BMI)
pp <- predict(c,newdata=data.frame(BMI=23), interval="prediction")
## Warning message: 'newdata' had 1 row but variables found have 12 rows
解决这个问题的方法是在模型中明确包含一个 data
参数,例如
c <- lm(y ~ BMI, data=dd)
pp <- predict(c,newdata=data.frame(BMI=23), interval="prediction")
## fit lwr upr
## 1 143.5888 141.8718 145.3059
在公式中使用 dd$y
等的问题是 R 不知道它应该用 newdata
代替什么。
使用 data=dd
的方法不仅可以为您提供正确答案,还可以使 lm()
语句更易于阅读。
答案 1 :(得分:0)
如果您在问题中提供了数据/可重现的样本,那将会很有帮助。根据错误消息,我最好的猜测是您的线性回归中有多个变量。以下是拟合线性回归并进行预测的示例:
library(tidyverse)
df <- data.frame(y = c(0, 7, 3, 0),
x = c(7, 4, 1, 5))
lm1 <- lm(y ~ x, df)
predict(lm1, newdata = data.frame(x = 3))