predict() 应该显示一个值,但会生成太多值
predict() should display one value, but generates way too much values
我有一个德国足球联赛的数据集,它显示了联赛中的每支球队、球员的价值、进球和得分。弗赖堡足球队打进 19 球,进球率为 1.12。现在我想根据创建的线性模型预测弗赖堡队在球员值为 5 的情况下可以预期多少个进球。
如果我 运行 指定的代码行,该函数显示的不是一个值,而是每个团队的 18 个值。我怎样才能改变这一点,我只是为弗赖堡队获得价值? (这应该是使用线性模型的预测27.52。)
m3 <- lm(bundesliga$Goals ~ bundesliga$PlayerValue)
summary(m3)
nd <- data.frame(PlayerValue = 5)
predict(m3, newdata = nd)
数据集:
您以 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))
我有一个德国足球联赛的数据集,它显示了联赛中的每支球队、球员的价值、进球和得分。弗赖堡足球队打进 19 球,进球率为 1.12。现在我想根据创建的线性模型预测弗赖堡队在球员值为 5 的情况下可以预期多少个进球。 如果我 运行 指定的代码行,该函数显示的不是一个值,而是每个团队的 18 个值。我怎样才能改变这一点,我只是为弗赖堡队获得价值? (这应该是使用线性模型的预测27.52。)
m3 <- lm(bundesliga$Goals ~ bundesliga$PlayerValue)
summary(m3)
nd <- data.frame(PlayerValue = 5)
predict(m3, newdata = nd)
数据集:
您以 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))