首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从滚动回归中提取te残差

如何从滚动回归中提取te残差
EN

Stack Overflow用户
提问于 2020-04-03 21:37:18
回答 1查看 409关注 0票数 1

我正在尝试获得滚动回归的残差标准差(R汇总中的残差标准误差)。我正在尝试对总共4000天的20天的股票回报进行滚动回归。我可以做滚动回归,我可以从常规的lm回归中得到残差标准差,但不能用于滚动回归。我的数据类似于下面的数据,其中数据框具有多个股票的回报,向量是指数回报:

data<-as.data.frame(matrix(rexp(20000, rate=.1), ncol=20))

vector<-rexp(1000,rate=0.1)

我可以为lm回归生成一个sigma:sigma(lm(data$V1~vector))

我可以使用library(roll)roll_lm(vector,data$V1,width=20)以及library(rollRegres)roll_regres(data$V1~vector,width=20)生成滚动回归

有没有办法从这种滚动回归中获得残差标准差/残差标准差/ sigma?

我想最终得到一个只包含残差标准差的数据帧。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-04 09:27:18

如果您阅读summary.lm的代码,残差标准误差是残差平方和(rss) /残差自由度(rdf)的平方根。由于roll_lm不保留这一点,因此您需要使用系数来获得预测,并再次计算:

代码语言:javascript
复制
data<-as.data.frame(matrix(rexp(20000, rate=.1), ncol=20))
vector<-rexp(1000,rate=0.1)

library(roll)
WI = 20
rlm = roll_lm(vector,data$V1,width=WI)
rdf = WI - ncol(rlm$coefficients)

下面我们遍历每个窗口,获得预测并计算rss,然后从那里得到sigma:

代码语言:javascript
复制
sigma = sapply(1:(nrow(data)-WI+1),function(i){
# basically intercept + predictor * coef
pred = cbind(rep(1,WI),vector[i:(i+WI-1)]) %*% rlm$coefficients[WI+i-1,]
rss = sum((data$V1[i:(i+WI-1)] - pred)^2)
sqrt(rss/rdf)
})

我们可以将其封装在一个函数中,该函数以x,y为输入:

代码语言:javascript
复制
roll_w_sigm = function(x,y,WI=20){

rlm = roll_lm(x=vector,y=y,width=WI)
rdf = WI - ncol(rlm$coefficients)

rlm$sigma = sapply(1:(length(y)-WI+1),function(i){
    pred = cbind(rep(1,WI),vector[i:(i+WI-1)]) %*% rlm$coefficients[WI+i-1,]
    rss = sum((y[i:(i+WI-1)] - pred)^2)
    sqrt(rss/rdf)
    })
rlm
}

对于1列:

代码语言:javascript
复制
res = roll_w_sigm(vector,data$V1)
head(res$sigma)
[1] 9.102188 9.297425 9.324338 9.509460 7.849201 7.993087

对于所有列:

代码语言:javascript
复制
lapply(data,function(i)roll_w_sigm(vector,i))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61013178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档