我是R的新手,我想问一下如何获得使用predict((函数估计的两个预测值之间的差的置信区间。例如,
data("cars", package = "datasets")
model <- lm(dist ~ speed, data = cars)
summary(model)
prediction1 = predict(model, newdata = list(speed = 12), interval = "confidence")
prediction1
prediction2 = predict(model, newdata = list(speed = 20), interval = "confidence")
prediction2
predict.dif = prediction2 - prediction1
predict.dif
我得到的是
prediction1=29.60981(lwr(24.39514(upr(34.82448
prediction2=61.06908(lwr,55.24729(upr,66.89088
对于预测的差异,我得到
predict.diff=31.455927(lwr(30.85215(upr(32.06639
我的问题是,在前面的例子中,我得到了预测的差异,R也减去了置信区间。以这种方式减去CI是否正确?为什么?如果没有,我想知道是否有一种方法可以计算预测差异的CI
非常感谢
你提出了一个很好的问题。总之,我们不应该单独计算置信区间,然后取其各自的下界和上界之间的差。
为什么
为了解释原因,我将通过一个例子来说明,而不是过多地研究数学:
-
让我们拿你的代码片段,当速度等于13:时,只需将
prediction2
更改为预测data("cars", package = "datasets") model <- lm(dist ~ speed, data = cars) summary(model) prediction1 = predict(model, newdata = list(speed = 12), interval = "confidence") prediction1 prediction2 = predict(model, newdata = list(speed = 13), interval = "confidence") prediction2 predict.dif = prediction2 - prediction1 predict.dif
在这种情况下,您的输出将是:
fit lwr upr 1 3.932409 4.336198 3.52862
但问问自己,我们在这里做什么。您有一个形式为
dist = a + b*speed
的模型。然后计算speed = 12
和speed = 13
的模型预测,并取差。从而得到CCD_ 5。因此,差值的置信区间应该等于我的参数b
的置信区间。让我们检查一下情况是否如此:confint(model) 2.5 % 97.5 % (Intercept) -31.167850 -3.990340 speed 3.096964 4.767853
-
你可以看到他们并不平等。在您的方法中,间隔为
(4.336198, 3.52862)
,而第二种方法的间隔为(3.096964, 4.767853)
如果我在这背后的数学方面找到了一个好的/容易理解的参考,我会在评论中链接。
解决方案
为此,您可以利用contrast
软件包。使用此软件包,我们可以调用:
contrast(model, a = list(speed = 13), b = list(speed = 12))
这将输出差值所需的置信区间:
lm model parameter contrast
Contrast S.E. Lower Upper t df Pr(>|t|)
1 3.932409 0.4155128 3.096964 4.767853 9.46 48 0
回到你的例子,我们可以做
contrast(model, a = list(speed = 20), b = list(speed = 12))
获取
lm model parameter contrast
Contrast S.E. Lower Upper t df Pr(>|t|)
1 31.45927 3.324102 24.77571 38.14283 9.46 48 0