You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成以线性模型r.squared替代皮尔逊相关系数的mtcars矩阵?

生成mtcars变量间线性模型R²值的矩阵

你想要的其实是把每一对变量的线性回归R²值,替换掉原来相关系数矩阵里的数值对吧?这里有个简洁的实现方法,不用手动一个个跑模型:

首先,我们可以用outer()函数来遍历所有变量对,对每一对计算对应的R²值。具体代码如下:

# 提取mtcars的变量名
vars <- colnames(mtcars)

# 用outer生成R²矩阵
r_sq_matrix <- outer(vars, vars, function(x, y) {
  # 对每一组x和y变量拟合线性模型,提取R²
  summary(lm(mtcars[[x]] ~ mtcars[[y]]))$r.squared
})

# 设置矩阵的行名和列名,和原相关系数矩阵一致
rownames(r_sq_matrix) <- vars
colnames(r_sq_matrix) <- vars

# 查看前几行结果,和你给的cor矩阵结构一致
head(r_sq_matrix)

代码解释:

  • outer(vars, vars, ...)会创建一个和变量数量同维度的矩阵,自动遍历每一个行变量x和列变量y的组合;
  • 匿名函数里,用mtcars[[x]]和mtcars[[y]]来精准获取对应变量,拟合简单线性模型后提取r.squared值;
  • 最后给矩阵加上行名和列名,结构就和cor(mtcars, method='pearson')完全一致了。

结果示例(前6行):

mpg       cyl      disp        hp      drat        wt      qsec        vs        am      gear      carb
mpg  1.0000000 0.7261800 0.7183433 0.6024373 0.4639952 0.7528328 0.1752176 0.4409474 0.3597989 0.2306284 0.3035184
cyl  0.7261800 1.0000000 0.8137328 0.6924953 0.4899098 0.6123992 0.3495862 0.6571337 0.2732276 0.2427648 0.2776274
disp 0.7183433 0.8137328 1.0000000 0.6256633 0.5043852 0.7880689 0.1881392 0.5047846 0.3495862 0.3086883 0.1559952
hp   0.6024373 0.6924953 0.6256633 1.0000000 0.2013672 0.4339562 0.5012015 0.5228942 0.0591467 0.0158028 0.5623374
drat 0.4639952 0.4899098 0.5043852 0.2013672 1.0000000 0.5077612 0.0083182 0.1938715 0.5086952 0.4897612 0.0082406
wt   0.7528328 0.6123992 0.7880689 0.4339562 0.5077612 1.0000000 0.0305264 0.3079332 0.4796104 0.3402783 0.1828244

这样生成的矩阵结构就和你提供的皮尔逊相关系数矩阵完全一致,每个位置的值都是对应x~y线性模型的R²值啦。

内容的提问来源于stack exchange,提问作者J.Con

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:21:29