我进行了回归分析:
CopierDataRegression <- lm(V1~V2, data=CopierData1)
我的任务是
V2=6
和V2=6
时。我使用了以下代码:
X6 <- data.frame(V2=6)
predict(CopierDataRegression, X6, se.fit=TRUE, interval="confidence", level=0.90)
predict(CopierDataRegression, X6, se.fit=TRUE, interval="prediction", level=0.90)
我得到了(87.3, 91.9)
和(74.5, 104.8)
,这似乎是正确的,因为PI应该更宽。
两者的输出还包括相同的se.fit = 1.39
。我不明白这个标准错误是什么。PI和CI的标准误差不应该更大吗?如何在R中找到这两个不同的标准错误?
数据:
CopierData1 <- structure(list(V1 = c(20L, 60L, 46L, 41L, 12L, 137L, 68L, 89L,
4L, 32L, 144L, 156L, 93L, 36L, 72L, 100L, 105L, 131L, 127L, 57L,
66L, 101L, 109L, 74L, 134L, 112L, 18L, 73L, 111L, 96L, 123L,
90L, 20L, 28L, 3L, 57L, 86L, 132L, 112L, 27L, 131L, 34L, 27L,
61L, 77L), V2 = c(2L, 4L, 3L, 2L, 1L, 10L, 5L, 5L, 1L, 2L, 9L,
10L, 6L, 3L, 4L, 8L, 7L, 8L, 10L, 4L, 5L, 7L, 7L, 5L, 9L, 7L,
2L, 5L, 7L, 6L, 8L, 5L, 2L, 2L, 1L, 4L, 5L, 9L, 7L, 1L, 9L, 2L,
2L, 4L, 5L)), .Names = c("V1", "V2"),
class = "data.frame", row.names = c(NA, -45L))
当指定
interval
和level
参数时,predict.lm
可以返回置信区间(CI)或预测区间(PI)。这个答案说明了如何在不设置这些参数的情况下获取CI和PI。有两种方法:predict.lm
的中期结果了解如何使用这两种方法可以让您彻底了解预测过程。
注意,我们将只讨论
type = "response"
(默认)情况下的predict.lm
。对type = "terms"
的讨论超出了这个答案的范围。设置
我在这里收集你的代码,以帮助其他读者复制、粘贴和运行。我还更改了变量名,以便它们有更清晰的含义。此外,我将
newdat
扩展为包含多行,以显示我们的计算是“矢量化的”。下面是
predict.lm
的输出,稍后将与我们的手动计算进行比较。使用来自
predict.lm
的中间阶段结果z$se.fit
是预测平均值的标准误差,用于构造z$fit
的CI。我们还需要具有自由度的t分布分位数z$df
。我们看到这与
predict.lm(, interval = "confidence")
一致。PI比CI宽,因为它解释了剩余方差:
注意,这是按点定义的。对于非加权线性回归(如您的示例中所示),残差处处相等(称为均方差),并且是
z$residual.scale ^ 2
。因此PI的标准误差是π被构造为
我们看到这与
predict.lm(, interval = "prediction")
相一致。备注
如果你有一个加权线性回归,事情就更复杂了,因为残差不等于所有地方,所以
z$residual.scale ^ 2
应该加权。更容易为拟合值构造PI(即,在predict.lm
中使用type = "prediction"
时不设置newdata
),因为权重是已知的(使用weight
参数时必须通过lm
提供)。对于样本外预测(即,将newdata
传递给predict.lm
),predict.lm
希望您告诉它应如何加权残差方差。您需要在predict.lm
中使用参数pred.var
或weights
,否则会收到predict.lm
的警告,抱怨构造PI的信息不足。以下引自?predict.lm
:请注意,CI的构造不受回归类型的影响。
从头做起
基本上我们想知道如何在
z
中获得fit
、se.fit
、df
和residual.scale
。预测平均值可通过矩阵向量乘法
Xp %*% b
计算,其中Xp
是线性预测矩阵,b
是回归系数向量。我们看到这与
z$fit
一致。yh
的方差协方差是Xp %*% V %*% t(Xp)
,其中V
是b
的方差协方差矩阵,可以通过计算点态CI或PI不需要
yh
的全方差协方差矩阵。我们只需要它的主对角线。因此,我们不需要做diag(Xp %*% V %*% t(Xp))
,而是可以通过剩余自由度在拟合模型中很容易获得:
最后,要计算剩余方差,请使用Pearson估计:
备注
注意,在加权回归的情况下,
sig2
应计算为附录:一个模拟
predict.lm
的自写函数“从头开始做每件事”中的代码在这个Q&a:linear model with ^{}: how to get prediction variance of sum of predicted values 中被干净地组织成一个函数
lm_predict
。我不知道是否有一种快速的方法来提取预测区间的标准误差,但您始终可以对SE的区间进行反解(即使它不是非常优雅的方法):
请注意,CI SE与
se.fit
中的值相同。相关问题 更多 >
编程相关推荐