Predict.lm() in R - how to get nonconstant prediction bands around fitted values

前端 未结 1 618
面向向阳花
面向向阳花 2021-01-30 08:01

So I am currently trying to draw the confidence interval for a linear model. I found out I should use predict.lm() for this, but I have a few problems really understanding the f

相关标签:
1条回答
  • 2021-01-30 08:20

    Make up some data:

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

    Fit the model:

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

    Confidence and prediction intervals with the original x values:

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

    Conf. and pred. intervals with new x values (extrapolation and more finely/evenly spaced than original data):

    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)
    

    Plotting everything together:

    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)
    

    Using new data allows for extrapolation beyond the original data; also, if the original data are sparsely or unevenly spaced, the prediction intervals (which are not straight lines) may not be well approximated by linear interpolation between the original x values ...

    I'm not quite sure what you mean by the "confidence interval for one specific variable in my model"; if you want confidence intervals on a parameter, then you should use confint. If you want predictions for the changes based only on some of the parameters changing (ignoring the uncertainty due to the other parameters), then you do indeed want to use type="terms".

    interval="none" (the default) just tells R not to bother computing any confidence or prediction intervals, and to return just the predicted values.

    0 讨论(0)
提交回复
热议问题