【问题标题】:What is the difference between Stata's standard deviations from predict and R's standard errors from predict?Stata 与 predict 的标准差和 R 与 predict 的标准差有什么区别?
【发布时间】:2015-11-26 00:10:42
【问题描述】:

据我所知,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 输出不匹配。

提前致谢!

【问题讨论】:

  • 不太清楚你的意思。 (1)你能提供一个可重复的例子吗? (2) 您是否可能正在寻找 confidenceprediction 区间之间的差异(后者包括残差变化的影响),在这种情况下,请参阅interval ?predict.lm 的参数 ... ?
  • 很遗憾,我无法提供确切的示例,因为它是机密的。但是,也许我可以稍微概括一下这个问题。 R中有没有一种方法可以计算预测值的残差和标准差,就像Stata中的“预测”函数一样?假设您有一个控制期(用于回归)和一个测试期(用于预测)。你能得到你预测的 y 值的错误吗?谢谢!
  • (1) 请阅读stackoverflow.com/questions/5963269/… 获取有关如何创建可重现示例的建议;当数据本身无法共享时,一些答案讨论了 MWE 的想法。 (2) 对于我们这些不知道 Stata 实际计算什么的人,您需要向我们提供一个清晰、具体的定义(我只是从 PDF 中为您复制的)

标签: r statistics stata


【解决方案1】:

以下@bondeddust示例:他展示了如何获得预测间隔 em>(+/- 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

【讨论】:

    【解决方案2】:

    在我看来你需要:

     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" )
    

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2017-11-06
      • 2022-11-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多