R中预测函数的问题

时间:2017-02-19 12:59:03

标签: r linear-regression predict

我加载了内置R数据“女性”,其中包含美国女性平均身高和相应体重的表格数据。这个表有15行。使用这些数据我试图预测特定高度值的权重。我首先制作了一个线性模型并给出了新的预测值。但R仍然提出了原始数据中的15个数字。

我是回归的初学者所以请告诉我,如果我在这里做错了什么。

 data()
> women<-data.frame(women)
> names(women)
[1] "height" "weight"
> plot(women$weight~women$height)
> model<-lm(women$weight~women$height,data=women)
> new<-data.frame(height=c(82,83,84,85))
> wgt.prediction<-predict(model,new)
Warning message:
'newdata' had 4 rows but variables found have 15 rows 
 > wgt.prediction
   1        2        3        4        5        6        7        8        9          10       11       12       13 
112.5833 116.0333 119.4833 122.9333 126.3833 129.8333 133.2833 136.7333 140.1833 143.6333 147.0833 150.5333 153.9833 
  14       15 
157.4333 160.8833 

2 个答案:

答案 0 :(得分:2)

请注意,在原始数据范围之外推断预测可能会给出较差的答案;但是,忽略这一点尝试以下。

首先,没有必要使用data()data.frame。无论如何,women都可以使用,它已经是一个数据框。

此外,模型的自变量在问题中指定为women$height,但预测将其指定为height。它不知道women$heightheight是相同的。

用以下代码替换所有代码:

fo <- weight ~ height
model <- lm(fo, women)
heigths <- c(82, 83, 84, 85)
weights <- predict(model, data.frame(height = heights))

,并提供:

> weights
       1        2        3        4 
195.3833 198.8333 202.2833 205.7333 

使用预测(即使用weights)和model定义的回归线(在图表后继续)绘制数据:

plot(fo, women, xlim = range(c(height, heights)), ylim = range(c(weight, weights)))
points(weights ~ heights, col = "red", pch = 20)
abline(model)

screenshot

虽然通常使用predict,但考虑到在公式中使用$引入的问题,使用原始公式的替代方法是计算这样的预测:

model0 <- lm(women$weight ~ women$height)
cbind(1, 82:85) %*% coef(model0)

,并提供:

         [,1]
[1,] 195.3833
[2,] 198.8333
[3,] 202.2833
[4,] 205.7333

答案 1 :(得分:0)

# example dataset
dt = data.frame(mtcars)

# build 2 models
m1 = lm(mpg ~ wt, data = dt)
m2 = lm(dt$mpg ~ dt$wt, data = dt)

# new data (to predict)
dt_new = data.frame(wt = c(3.1, 3.5, 4.2))

# check if predictions work
predict(m1, dt_new)
predict(m2, dt_new)

第一个predict将作为模型的因变量wt,新数据也具有变量wt

第二个predict无效,因为模型的因变量为dt$wt,因此每次模型返回dt以获取变量{{1} }。实际上,无论您的新数据集是什么样的,模型都会尝试使用wt进行预测。