【问题标题】:Trouble with predict function in R [duplicate]R中的预测功能有问题[重复]
【发布时间】:2017-02-19 12:59:03
【问题描述】:

我加载了内置的 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 

【问题讨论】:

  • 尝试使用model&lt;-lm(weight~height,data=women) 构建模型并再次尝试预测。
  • 谢谢。它奏效了,从现在开始我会永远记住这一点。

标签: r linear-regression predict


【解决方案1】:

请注意,在原始数据范围之外推断预测可能会给出糟糕的答案;但是,忽略尝试以下操作。

首先,不必使用data()data.framewomen 无论如何都将提供给您,它已经是一个数据框。

此外,模型的自变量在问题中指定为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)

虽然通常使用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

【讨论】:

  • 谢谢。有效。很好的解释。
【解决方案2】:
# 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 获取变量wt。事实上,无论你的新数据集是什么样子,模型都会尝试使用dt$wt 进行预测。

【讨论】:

  • 谢谢。伟大的洞察力。从来没有想过这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多