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个回答
0
投票

您以不鼓励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

您的公式的环境不是德甲数据帧,因此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.