【发布时间】:2012-08-31 01:30:35
【问题描述】:
fitted()和predict()这两个函数有区别吗?我注意到来自 lme4 的混合模型适用于 fitted(),但不适用于 predict()。
【问题讨论】:
-
可能影响处理例程的一个区别是,对于 vglm(但不是 lm),“预测”的结果有 2 列,一列用于预测的 mu,一列用于预测的 sd。 vglm 和 lm 的“拟合”仅返回预测的 mu。
标签: r
fitted()和predict()这两个函数有区别吗?我注意到来自 lme4 的混合模型适用于 fitted(),但不适用于 predict()。
【问题讨论】:
标签: r
是的,有。如果有一个link function 将线性预测变量与响应的预期值相关联(例如泊松回归的 log 或逻辑回归的 logit),predict 返回拟合值之前的倒数应用链接函数(将数据返回到与响应变量相同的比例),fitted 在应用后显示它。
例如:
x = rnorm(10)
y = rpois(10, exp(x))
m = glm(y ~ x, family="poisson")
print(fitted(m))
# 1 2 3 4 5 6 7 8
# 0.3668989 0.6083009 0.4677463 0.8685777 0.8047078 0.6116263 0.5688551 0.4909217
# 9 10
# 0.5583372 0.6540281
print(predict(m))
# 1 2 3 4 5 6 7
# -1.0026690 -0.4970857 -0.7598292 -0.1408982 -0.2172761 -0.4916338 -0.5641295
# 8 9 10
# -0.7114706 -0.5827923 -0.4246050
print(all.equal(log(fitted(m)), predict(m)))
# [1] TRUE
这确实意味着对于线性回归 (lm) 创建的模型,fitted 和 predict 之间没有区别。
实际上,这意味着如果你想将拟合与原始数据进行比较,你应该使用fitted。
【讨论】:
predict(m,type="response") 来获得原始(响应)规模的预测,正如@GregSnow 在下面指出的那样,predict 有其他选项(取决于案件)。 lme4 的开发版本,在 r-forge 上,确实有一个 predict() 方法。
fitted 函数返回与用于拟合模型的数据相关的 y-hat 值。 predict 函数返回一组新预测变量的预测。如果您没有指定一组新的预测变量,那么默认情况下它将使用原始数据,对于某些模型给出与 fitted 相同的结果,但如果您想预测一组新的值,那么您需要 @987654324 @。 predict 函数通常还具有要返回的预测类型、线性预测变量、转换为响应尺度的预测、最可能的类别、模型中每个项的贡献等选项。
【讨论】: