微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环回归并在列中保存残差

如何解决循环回归并在列中保存残差

我有一个重复的横截面数据文件,我想多年来循环运行 OLS 回归,然后将残差保存在新列中。

我的数据如下:

Y      X   Year 
150    10  2005
120    11  2005
200    11  2006
180    15  2006
310    12  2007
280    09  2007

Stata 中的等效函数是:

forvalues i = 2005(1)2007{ 
qui reg Y X if year==`i' 
predict res`i' if year==`i',r
}

总而言之,我需要将上面的代码从 Stata 转换为 R。

解决方法

您应该始终通过创建一些或使用 dput() 来提供示例数据。这是解决您问题的基本 R 方法。先上数据:

set.seed(42)
Year <- sample(2005:2007,100,replace=TRUE)
Y <- sample(8:18,replace=TRUE)
X <- sample(8:18,replace=TRUE)
dat <- data.frame(Y,X,Year)

现在分析:

dat.spt <- split(dat,dat$Year)
res.spt <- lapply(dat.spt,function(k) residuals(lm(Y~X,k)))
dat.res <- data.frame(unsplit(dat.spt,Year),res=unsplit(res.spt,Year))
    head(dat.res)
#    Y  X Year        res
# 1 15 16 2005  0.7597518
# 2 14 13 2005  0.8477988
# 3 13 15 2005 -0.8775658
# 4  8  8 2005 -3.3387895
# 5 12 13 2006 -0.0399568
# 6 16 18 2006  2.3158747

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。