【问题标题】:Manually bootstrapping linear regression in R在 R 中手动引导线性回归
【发布时间】:2018-05-14 13:38:03
【问题描述】:

|大家好, 我正在向您寻求帮助,因为我被引导程序困住了......

任务是: 使用非参数 bootstrap 计算基于 1000 个 bootstrap 复制和 bootstrap 样本大小等于原始样本大小的 CAPM beta 估计的 bootstrap 标准误差。

如果我理解正确,我应该运行我的回归模型 1000 次,以估计对 beta 及其标准误差的不同估计。但是,我无法将我的想法转化为实际的 R 代码。

我的代码:

#1)fetch data from Yahoo
#AAPL prices
apple08 <- getSymbols('AAPL', auto.assign = FALSE, from = '2008-1-1', to = 
"2008-12-31")[,6]
#market proxy
rm08<-getSymbols('^ixic', auto.assign = FALSE, from = '2008-1-1', to = 
"2008-12-31")[,6]

#log returns of AAPL and market
logapple08<- na.omit(ROC(apple08)*100)
logrm08<-na.omit(ROC(rm08)*100)

#OLS for beta estimation
beta_AAPL_08<-summary(lm(logapple08~logrm08))$coefficients[2,1]

好的,我得到了 08 年 AAPL beta 的系数估计值。现在,我想在 beta 及其标准错误上运行 bootstrap 1000 次,样本量与原始样本量相同。

set.seed(666)
Boot_times=1000
mean.boot=rep(0,Boot_times)
for(i in 1:Boot_times){
# nonparametric bootstrap
data.boot=#Here I am stucked, I dunno what to put here
boot[i]=data.boot
}

我考虑过使用

summary(lm(sample(logapple08, size=length(logapple08), replace = 
TRUE)~sample(logrm08, size=length(logrm08), replace = 
TRUE)))$coefficients[2,1]

但是我猜它是不正确的。我确实对回报进行了重新采样,但是我假设它在不考虑回报日期的情况下对数据进行了重新采样,例如,它将 AAPL 从 2008 年 1 月 25 日的回报回归到 2008 年 2 月 25 日的市场回报。

我们将不胜感激,谢谢!

亚当

【问题讨论】:

  • 我想如果你在 cross val 上问这个问题,你会有更多机会得到一个体面的答案

标签: r regression lm statistics-bootstrap


【解决方案1】:

为了引导使用lm 计算的线性回归,您可以按照以下代码行执行一些操作。

library(boot)

# This is the function 'statistic'    
boot_lm_coef <- function(data, index){
    coef(lm(logapple08 ~ logrm08, data = data[index, ]))[2]
}

df_boot <- data.frame(logapple08, logrm08)

set.seed(666)
Boot_times <- 1000
result <- boot(df_boot, boot_lm_coef, R = Boot_times)
mean(result$t)
#[1] 1.078191

注意事项:

  1. 我用的是coef,而不是summary(lm(.))[2, 1],这有点矫枉过正
  2. 数据必须是data.framelm 才能工作。

【讨论】:

    【解决方案2】:

    如果您(或其他人)不希望手动执行此操作,还有来自 parametersmodel_parameters 函数来获取自举置信区间和 p 值

    library(parameters)
    
    mod <- lm(formula = wt ~ mpg, data = mtcars)
    
    model_parameters(mod)
    #> Parameter   | Coefficient |   SE |         95% CI | t(30) |      p
    #> ------------------------------------------------------------------
    #> (Intercept) |        6.05 | 0.31 | [ 5.42,  6.68] | 19.59 | < .001
    #> mpg         |       -0.14 | 0.01 | [-0.17, -0.11] | -9.56 | < .001
    
    model_parameters(mod, bootstrap = TRUE, iterations = 100)
    #> Parameter   | Coefficient |         95% CI |     p
    #> --------------------------------------------------
    #> (Intercept) |        5.99 | [ 5.36,  6.68] | 0.010
    #> mpg         |       -0.14 | [-0.17, -0.11] | 0.010
    

    reprex package (v1.0.0) 于 2021-03-09 创建

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2013-02-11
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多