15

所以我目前正在尝试绘制线性模型的置信区间。我发现我应该为此使用 predict.lm() ,但是我在真正理解该函数时遇到了一些问题,而且我不喜欢在不知道发生了什么的情况下使用函数。我找到了几个关于这个主题的方法,但只有相应的 R 代码,没有真正的解释。这是函数本身:

## S3 method for class 'lm'
predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf,
        interval = c("none", "confidence", "prediction"),
        level = 0.95, type = c("response", "terms"),
        terms = NULL, na.action = na.pass,
        pred.var = res.var/weights, weights = 1, ...)

现在,我很难理解:

    1) newdata  
    An optional data frame in which to look for variables 
    with which to predict. If omitted, the fitted values are used.
  • 每个人似乎都为此使用 newdata,但我不太明白为什么。为了计算置信区间,我显然需要这个区间所针对的数据(比如观察次数、x 的平均值等),所以不能是它的意思。但后来:这是什么意思?

    2) interval
    Type of interval calculation.

  • 好吧..但是什么是“无”?

    3a) type
    Type of prediction (response or model term).

    3b) terms
    If type="terms", which terms (default is all terms)

  • 3a:我可以由此获得模型中一个特定变量的置信区间吗?如果是这样,那么 3b 是什么?如果我可以在 3a 中指定该术语,那么在 3b 中再次执行它就没有意义了。所以我想我又错了,但我不知道为什么。

我想你们中的一些人可能会想:为什么不试试这个呢?我会(即使它可能无法解决这里的所有问题),但我现在不知道该怎么做。因为我现在不知道 newdata 的用途,所以我不知道如何使用它,如果我尝试,我没有得到正确的置信区间。不知何故,如何选择数据非常重要,但我就是不明白!

编辑:我想补充一点,我的目的是了解 predict.lm 的工作原理。我的意思是我不明白它是否按我认为的方式工作。也就是说,它计算 y-hat(预测值),然后使用间隔的 upr/lwr 边界的每个加/减来计算几个数据点(看起来像一条置信线)?然后我会不明白为什么新数据中的长度必须与线性模型中的长度相同。

4

1 回答 1

22

补一些数据:

d <- data.frame(x=c(1,4,5,7),
                y=c(0.8,4.2,4.7,8))

拟合模型:

lm1 <- lm(y~x,data=d)

具有原始 x 值的置信区间和预测区间:

p_conf1 <- predict(lm1,interval="confidence")
p_pred1 <- predict(lm1,interval="prediction")

会议。和预测。具有新 x 值的区间(外推和比原始数据更精细/均匀的间隔):

nd <- data.frame(x=seq(0,8,length=51))
p_conf2 <- predict(lm1,interval="confidence",newdata=nd)
p_pred2 <- predict(lm1,interval="prediction",newdata=nd)

将所有内容绘制在一起:

par(las=1,bty="l") ## cosmetics
plot(y~x,data=d,ylim=c(-5,12),xlim=c(0,8)) ## data
abline(lm1) ## fit
matlines(d$x,p_conf1[,c("lwr","upr")],col=2,lty=1,type="b",pch="+")
matlines(d$x,p_pred1[,c("lwr","upr")],col=2,lty=2,type="b",pch=1)
matlines(nd$x,p_conf2[,c("lwr","upr")],col=4,lty=1,type="b",pch="+")
matlines(nd$x,p_pred2[,c("lwr","upr")],col=4,lty=2,type="b",pch=1)

在此处输入图像描述

使用新数据可以在原始数据之外进行外推;此外,如果原始数据稀疏或不均匀分布,则预测区间(不是直线)可能无法通过原始 x 值之间的线性插值很好地近似...

我不太确定“我的模型中一个特定变量的置信区间”是什么意思;如果你想要一个参数的置信区间,那么你应该使用confint. 如果您希望仅基于某些参数变化(忽略其他参数引起的不确定性)来预测变化,那么您确实想要使用type="terms".

interval="none"(默认值)只是告诉 R 不要费心计算任何置信区间或预测区间,并且只返回预测值。

于 2012-09-22T14:31:34.117 回答