Stata与预测的标准差与预测的R标准误差有什么区别?

时间:2015-08-31 21:11:35

标签: r statistics stata

据我所知,StataR都有“预测”功能。我试图复制使用R在Stata中执行的结果,结果涉及计算预测值的标准偏差。 R中是否有功能,可能使用其“预测”功能,这将允许我这样做?我似乎无法完美地复制结果。如果有帮助,Stata代码会执行以下操作:

reg Y X1 X2 if condition
predict resid, r
predict stdf, stdf

stdf参数的定义是:

  

stdf计算预测的标准误差,这是1次观测的点预测的标准误差。它通常被称为未来或预测值的标准误差。   通过构造,stdf产生的标准错误   总是大于stdp产生的那些;请参阅方法和公式   在[R]预测

我写的R代码是:

fit <- lm(Y ~ X1 + X2, data=df)
new.df <- data.frame(...) # This is a new data frame with my new data period I want to predict in
predict(fit, new.df, se.fit = TRUE)

但是,当我将标准误差转换为标准偏差时,它们与Stata输出不匹配。

提前致谢!

2 个答案:

答案 0 :(得分:5)

在我看来,你需要:

 predict(fit, new.df, se.fit = TRUE, interval="prediction")

“标准误差”适用于均值估计值附近的置信限,而预测误差可能很容易被描述为预测周围的“标准偏差”。

> dfrm <- data.frame(a=rnorm(30), drop=FALSE)
> dfrm$y <- 4+dfrm$a*5+0.5*rnorm(30)
> plot( dfrm$a, predict(mod) )
> plot( dfrm$a, predict(mod, newdata=dfrm) )
> points( rep(seq(-2,2,by=0.1),2),   # need two copies for upper and lower
          c(predict(mod, newdata=list(a=seq(-2,2,by=0.1)), 
                         interval="prediction")[, c("lwr","upr")]), 
          col="red")
> points(dfrm$a, dfrm$y, col="blue" )

enter image description here

答案 1 :(得分:2)

关注@ BondedDust的示例:他展示了如何获得预测间隔(+/- 1.96 * std_dev)。原则上你可以恢复

 set.seed(1001)
 dfrm <- data.frame(a=rnorm(30), drop=FALSE)
 dfrm$y <- 4+dfrm$a*5+0.5*rnorm(30)

适合模特:

 mod <- lm(y ~ a, data=dfrm)

预测:

 pframe <- data.frame(a=seq(-2,2,by=0.1))
 pred <- predict(mod,newdata=pframe,se.fit=TRUE)
 pframe$y <- pred$fit
 pframe$se <- pred$se.fit
 pframe$sd <- sqrt(pred$se.fit^2+sigma(mod)^2)

结果:

 head(pframe,3)
 ##      a         y        se        sd
 ## 1 -2.0 -5.877806 0.2498792 0.7319977
 ## 2 -1.9 -5.380531 0.2403656 0.7288049
 ## 3 -1.8 -4.883256 0.2309916 0.7257673

检查预测间隔:

 pred2 <- predict(mod,newdata=pframe,interval="predict")
 wid <- qt(0.975,df=pred$df)
 all.equal(unname(pred2[,"lwr"]),with(pframe,y-wid*sd))  ## TRUE