【问题标题】:Make pairwise comparisons of regression coefficients对回归系数进行成对比较
【发布时间】:2016-01-21 22:12:21
【问题描述】:

使用cor(mydataframe) 对数字数据帧进行相关系数(相关矩阵)的成对比较是直接的。对于相同变量之间的简单回归分析斜率的成对比较,有什么方法可以做同样的事情吗?令我失望的是,slope(mydataframe)beta(mydataframe) 并没有成功。

【问题讨论】:

    标签: r statistics regression


    【解决方案1】:

    我不知道是否有内置函数,但是很容易编写一个for循环来完成这个。

    pairReg = function(data){
      results = rep(NA, ncol(data)**2)
      counter = 0
    
      for(i in names(data)){
        for (j in names(data)){
          counter = counter + 1
          if (i ==j) next
          results[counter] = lm(data[,i]~data[,j])$coef[2]
        }
      }
      matrix(results, ncol = ncol(data),byrow=T)  
    }
    

    函数默认生成对角线NA

    例子:

    data = data.frame(x1 = rnorm(100,0,1),
                  x2 = rnorm(100,0,1),
                  x3 = rnorm(100,0,1))
    pairReg(data)
    

    可以使用apply() 扩展它以加快速度。

    【讨论】:

      【解决方案2】:

      数据集的协方差矩阵与其成对回归斜率之间存在非常直接的关系。通过检查回归方程可以明显看出这一点,任何使用回归的人都应该理解这一点(请原谅不支持乳胶这一事实):

      \hat y_i = \bar y + \sigma_{xy} \frac{\sigma_y}{\sigma_x} (x_i - \bar x)

      这意味着简单的线性回归系数是

      \hat \Beta = \sigma_{xy} \frac{\sigma_y}{\sigma_x}

      IE- 已通过两个变量之间的“价差”(标准差)差异适当缩放的相关性。

      因此,这种转换很简单。答案类似于上面的@Devon,但添加了自身的回归

      c1 <- cor(data)
      c2 <- diag(cov(data)^(1/2))
      
      m <- matrix(NA, nrow= ncol(data), ncol= ncol(data))
      
      for (i in 1:3) {
        for (j in 1:3) {
          m[i,j] <- c1[i,j] * c2[i] / c2[j]
        }
      }
      
      # using @devon's data, provided w/o a seed
      R> m
                  [,1]        [,2]        [,3]
      [1,]  1.00000000  0.11334817 -0.05551440
      [2,]  0.10722557  1.00000000 -0.04449336
      [3,] -0.05077282 -0.04301669  1.00000000
      

      【讨论】:

        猜你喜欢
        • 2020-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 2019-02-27
        • 2018-12-15
        • 2013-05-30
        相关资源
        最近更新 更多