代码之家  ›  专栏  ›  技术社区  ›  student_R123

关于R中自举回归中的剩余存储

  •  0
  • student_R123  · 技术社区  · 7 年前

    我试图通过从原始样本中重新抽样X和Y来进行自举回归。 我采用了更为手动的方法(不使用任何包) 这是我迄今为止的工作,

    set.seed(326581)
    X1=rnorm(10,0,1)
    Y1=rnorm(10,0,2)
    data=data.frame(X1,Y1)
    
    lst <- replicate(
      100,
      df.smpl <- data %>% sample_n(10, replace = T),
      simplify = FALSE)
    

    该列表包含100个样本,其中每个样本有2列(x,y),样本大小为10。这些是引导程序示例。

    为了得到引导残差,我将x和y列分为两个单独的数据帧,如下所示:

    new1=data.frame(lapply(lst, `[`, 'X1'))
    
    new2=data.frame(lapply(lst, `[`, 'Y1))
    

    之后,我尝试用下面的代码存储每个模型的残差,

    res=c()
    for(i in 1:100)
    {
     res[i]=residuals(lm(new2[,i]~new1[,i]))
    }
    

    但似乎有问题。有人能帮我弄明白吗?

    顺便问一下,还有比这更简单的方法吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Maurits Evers    7 年前

    list lapply sapply

    res <- lapply(lst, function(df) residuals(lm(Y1 ~ X1, data = df)))
    

    lm(Y1 ~ X1) data.frame lst

    length(res)
    #[1] 100
    

    lm 10x100 matrix

    res <- sapply(lst, function(df)
        residuals(lm(Y1 ~ X1, data = df))) 
    dim(res)
    #[1]  10 100
    

    # Add residuals and weights to lst
    lst <- lapply(lst, function(df) {
        df$res <- residuals(lm(Y1 ~ X1, data = df));
        df$weights <- 1 / fitted(lm(abs(res) ~ X1, data = df))^2;
        df;
    })
    

    # Return 2nd coeffficient of weighted regression
    coeff <- lapply(lst, function(df)
        coefficients(lm(Y1 ~ X1, data = df , weights = weights))[2])