predict()应该显示一个值,但生成的值太多了。

问题描述 投票:0回答:1

我有一个德国足球联赛的数据集,其中显示了联赛中每支球队的球员价值、进球数和积分。弗莱堡足球队已经打进了19个进球,进球数为1.12。现在我想从创建的线性模型中预测弗莱堡队在球员身价为5的情况下能进多少球。如果我运行上述代码行,函数显示的不是一个值,而是每支球队的18个。我怎样才能改变这种情况,让我只得到弗莱堡队的数值?(使用线性模型的预测值应该是27.52)。

m3 <- lm(bundesliga$Goals ~ bundesliga$PlayerValue)
summary(m3)
nd <- data.frame(PlayerValue = 5) 
predict(m3, newdata = nd)

数据集。enter image description here

r predict
1个回答
2
投票

你以R不鼓励的方式指定了你的模型。

首选的方式是。

m3 <- lm(Goals ~ PlayerValue, data=bundesliga)

那就用你的命令来预测吧

nd <- data.frame(PlayerValue = 5) 
predict(m3, newdata = nd)
#       1 
#27.52412 

虽然在帮助页面上... lm 确实说 data 参数是可选的,在模型中指定它可以让其他函数,如 predict,来工作。的帮助页面上有一个说明 predict.lm:

说明:变量首先在 newdata 然后以通常的方式搜索(这将包括在拟合中使用的公式的环境)。如果找到的变量长度与那些在 newdata 如果它被提供了。

这就是为什么你原来的命令不能用,你会收到警告信息。

predict(m3, newdata = nd)
       1        2        3        4        5        6        7        8        9 
40.06574 28.31378 26.08416 25.45708 25.31773 25.22483 24.22614 23.55261 23.36681 
      10       11       12       13       14       15       16       17       18 
21.60169 20.51011 20.23140 20.25463 19.58110 19.48820 18.60564 18.60564 18.51274
#Warning message:
#'newdata' had 1 row but variables found have 18 rows

你的公式所处的环境并不是 bundesliga 数据框架,所以R无法找到。PlayerValue.


数据:

bundesliga <- structure(list(PlayerValue = c(10.4, 5.34, 4.38, 4.11, 4.05, 4.01, 
3.58, 3.29, 3.21, 2.45, 1.98, 1.86, 1.87, 1.58, 1.54, 1.16, 1.16, 1.12), 
Goals = c(34, 32, 34, 35, 32, 16, 26, 27, 23, 13, 10, 21, 22, 18, 24, 21, 12, 19)), 
class = "data.frame", row.names = c(NA, -18L))
© www.soinside.com 2019 - 2024. All rights reserved.