对回归系数进行两两比较
Make pairwise comparisons of regression coefficients
使用 cor(mydataframe)
对数值数据帧进行相关系数(相关矩阵)的成对比较很简单。对于相同变量之间的简单回归分析的斜率的成对比较,有什么方法可以做同样的事情吗?令我失望的是,slope(mydataframe)
或 beta(mydataframe)
没有成功。
不知道有没有built-in的功能,不过写个for-loop很容易实现。
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()
扩展它以加快速度。
数据集的协方差矩阵与其成对回归斜率之间存在非常直接关系。通过检查回归方程可以明显看出这一点,任何使用回归的人都应该理解这一点(请原谅不支持乳胶的事实):
\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- 已根据两个变量之间 "spread"(标准差)的差异适当缩放的相关性。
因此,这种转换很简单。答案类似于上面的@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
使用 cor(mydataframe)
对数值数据帧进行相关系数(相关矩阵)的成对比较很简单。对于相同变量之间的简单回归分析的斜率的成对比较,有什么方法可以做同样的事情吗?令我失望的是,slope(mydataframe)
或 beta(mydataframe)
没有成功。
不知道有没有built-in的功能,不过写个for-loop很容易实现。
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()
扩展它以加快速度。
数据集的协方差矩阵与其成对回归斜率之间存在非常直接关系。通过检查回归方程可以明显看出这一点,任何使用回归的人都应该理解这一点(请原谅不支持乳胶的事实):
\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- 已根据两个变量之间 "spread"(标准差)的差异适当缩放的相关性。
因此,这种转换很简单。答案类似于上面的@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