lis*_*isa 14 regression r
所以我目前正在尝试绘制线性模型的置信区间.我发现我应该使用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, ...)
Run Code Online (Sandbox Code Playgroud)
现在,我难以理解:
1) newdata
An optional data frame in which to look for variables
with which to predict. If omitted, the fitted values are used.
Run Code Online (Sandbox Code Playgroud)
每个人似乎都使用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中执行它是没有意义的.所以我想我又错了,但我无法弄清楚为什么.
我猜你们有些人可能会想:为什么不尝试这个呢?我会(即使它可能不会解决这里的一切),但我现在不知道如何.因为我现在不知道新数据是什么,我不知道如何使用它,如果我尝试,我没有得到正确的置信区间.不知何故,你选择那些数据非常重要,但我只是不明白!
编辑:我想补充一点,我的目的是了解predict.lm的工作原理.我的意思是我不明白它是否像我认为的那样工作.也就是说它计算y-hat(预测值),然后对每个区间的upr/lwr-bound使用加/减来计算几个数据点(然后看起来像一个置信线)?然后,我要指出为什么必须在新数据中使用与线性模型中相同的长度.
Ben*_*ker 21
补充一些数据:
d <- data.frame(x=c(1,4,5,7),
y=c(0.8,4.2,4.7,8))
Run Code Online (Sandbox Code Playgroud)
适合模型:
lm1 <- lm(y~x,data=d)
Run Code Online (Sandbox Code Playgroud)
具有原始x值的置信度和预测间隔:
p_conf1 <- predict(lm1,interval="confidence")
p_pred1 <- predict(lm1,interval="prediction")
Run Code Online (Sandbox Code Playgroud)
CONF.和pred.具有新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)
Run Code Online (Sandbox Code Playgroud)
将所有内容绘制在一起:
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)
Run Code Online (Sandbox Code Playgroud)
使用新数据允许在原始数据之外进行推断; 此外,如果原始数据稀疏或不均匀地间隔,则预测间隔(不是直线)可能无法通过原始x值之间的线性插值很好地近似...
我不太确定你的"模型中一个特定变量的置信区间"是什么意思; 如果你想要参数的置信区间,那么你应该使用confint.如果您只想根据一些参数变化来预测变化(忽略由于其他参数引起的不确定性),那么您确实想要使用type="terms".
interval="none" (默认值)只是告诉R不要费心计算任何置信度或预测间隔,并只返回预测值.