多重共线性检测—相关性系数矩阵和方差膨胀系数(VIF)分析学习
创作时间:
作者:
@小白创作中心
多重共线性检测—相关性系数矩阵和方差膨胀系数(VIF)分析学习
引用
1
来源
1.
https://cloud.tencent.com/developer/article/2449145
多重共线性是在多元线性回归分析中经常遇到的一个问题,它发生在当两个或更多的预测变量(自变量)在统计模型中高度相关。本文将详细介绍多重共线性的概念、检测方法以及处理策略,并通过TCGA数据集演示具体的检测过程。
多重共线性的概念
多重共线性(Multicollinearity)是在多元线性回归分析中经常遇到的一个问题,它发生在当两个或更多的预测变量(自变量)在统计模型中高度相关。在这种情况下,这些变量之间的关系会影响模型对各个变量影响的准确评估,从而导致以下几个问题:
- 参数估计的不准确:由于变量之间的高度相关性,模型中的系数(参数)估计可能会变得非常不稳定。微小的数据变化可能导致估计值大幅波动。
- 系数解释困难:当变量彼此相关时,很难区分单个变量对因变量影响的独立效应。这会使得模型的解释变得复杂和模糊。
- 统计显著性的问题:共线性往往会增加参数的标准误差,这可能导致统计检验无法拒绝原假设,即使在实际中某些变量是有影响的。
检测多重共线性的常用方法
- 方差膨胀因子(VIF):这是最常用的检测多重共线性的量化方法。一般认为,VIF值大于5或者10表明存在严重的多重共线性,需要进一步处理。
- 容忍度(Tolerance):这是VIF的倒数,较低的容忍度值(通常小于0.1)表明高共线性。
- 相关性系数矩阵:检查预测变量之间的相关系数。高度相关(例如,相关系数大于0.8或小于-0.8)可能指示共线性。
处理多重共线性的策略
- 移除变量:如果某些变量之间存在高共线性,可以考虑从模型中移除一些变量。
- 合并变量:将相关的变量合并为一个新变量,例如,通过计算几个相关变量的平均值。
- 增加样本量:有时增加样本量可以帮助减少共线性带来的影响,因为更多的数据提供了更多的信息,有助于更准确地估计模型参数。
- 正则化方法:使用如岭回归(Ridge Regression)或LASSO这类引入惩罚项的技术可以有效地处理共线性问题。
步骤流程
1. 导入数据
使用TCGA数据集作为示例数据。
rm(list = ls())
load(”./est_data.Rdata“)
dat_test <- est_data
head(dat_test)[1:5,1:5]
# ID OS EVA1A TNFAIP6
# TCGA-CR-7374-01A TCGA-CR-7374-01A 0 -1.28317273 -1.6738964
# TCGA-CV-A45V-01A TCGA-CV-A45V-01A 1 -0.85167331 -0.1011465
# TCGA-CV-7102-01A TCGA-CV-7102-01A 1 1.41296836 0.4649019
# TCGA-MT-A67D-01A TCGA-MT-A67D-01A 0 -0.06444696 0.8510312
# TCGA-P3-A6T4-01A TCGA-P3-A6T4-01A 1 -0.76278103 -0.3687546
dim(est_data)
# [1] 493 40
准备好一个含有结局变量和基因/临床参数(自变量)的数据。
2. 多重共线性检验
这里使用两种方法进行多重共线性检测,容忍度检测是VIF的倒数就不再演示了。
相关性系数矩阵
变量之间的相关性值一般认为要小于0.8,否则认为系数之间存在"严重"的共线性。如果变量较多时,不建议使用相关性系数矩阵,不然就会出现下图这样看不清的情况。
#相关性系数矩阵
colnames(dat_test)
library(PerformanceAnalytics)
chart.Correlation(dat_test[,c(4:41)], histogram=TRUE, method="pearson")
方差膨胀因子
一般宽松一点会把标准设定为10,严格一点会把标准设定为5。
# 方差膨胀因子
library(car)
colnames(dat_test)
# 找出除了ID,OS以外的所有变量
variables <- setdiff(names(dat_test), c("ID", "OS"))
# 把所有的变量用+连起来,并创建模型
e <- paste(variables, collapse = " + ")
full_formula <- as.formula(paste("OS ~", e)) #构建函数的时候一定要包含响应变量,其中的符号为“~”
M <- lm(full_formula, data = est_data)
vif_values <- vif(M)
#做图
library(ggplot2)
vif_data <- data.frame(Variable = names(vif_values), VIF = vif_values)
# 使用 ggplot2 绘制 VIF 值的条形图
png("VIF.png",width = 2000, height = 2800, res = 300)
ggplot(vif_data, aes(x = reorder(Variable, VIF), y = VIF, fill = VIF)) +
geom_bar(stat = "identity") +
theme_minimal() +
labs(title = "VIF Values", x = "Variables", y = "Variance Inflation Factor (VIF)") +
geom_hline(yintercept = 5, linetype = "dashed", color = "red",size = 3) +
#coord_flip()+ # 翻转坐标轴,使得条形图水平显示
theme(axis.text.x = element_text(angle = 45, hjust = 1),
axis.text = element_text(size = 10), # 调整轴标签字体大小
axis.title = element_text(size = 16), # 调整轴标题字体大小
plot.title = element_text(size = 20)) # 调整图标题字体大小
dev.off()
参考资料
- 医学统计学,主编:孙振球/徐勇勇
- 医学和生信笔记: https://mp.weixin.qq.com/s/yk8Y51ilnnMwdaVcK457KQ
- 宇哥读文献: https://mp.weixin.qq.com/s/-jyP-QicDJvqTlLfx9008w
- 观科研: https://mp.weixin.qq.com/s/icQ8Amfhvx6rwQFhD44Mnw
注:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟
本文原文来自腾讯云开发者社区
热门推荐
神经衰弱的症状有哪些表现
胆结石病人食谱大全:医生的专业饮食建议
如何确认项目需求:从沟通到文档管理的完整指南
在家如何自测血糖?今天一次性教会你|联合国糖尿病日
澳洲技术移民2025全指南!EOI打分+职业评估+州担保策略解析!
加拿大央行与美联储分歧或更显著 加元贬值压力明显
“小针”解决“大痛苦”:带状疱疹后神经痛的全新治疗方案
曹髦:历史中的明君典范与文化轶事
i5-12600KF和R5-7500F游戏性能全面对比:各有侧重,谁更适合你?
食用油的佼佼者压榨一级花生油
上吐下泻的四种治疗方法
2024年诺贝尔奖将揭晓,先来get这些知识点
摩羯男试探你喜欢他的表现有哪些?会采用哪些方式试探
趋势类型的分类标准是什么?这种分类对投资有何帮助?
银行的银行卡可以设置不同的支付密码吗?
做完根管治疗后牙还是疼怎么回事-疾病科普-博禾医生
江西省精神病院:专业精神卫生服务的医疗中心
一图看透消费类ETF格局,选合适的看这三点!
文山到云南大理自由行全攻略:路线、交通及旅游建议
狗咬伤人赔偿标准是什么
胫骨软骨瘤严重吗?病因、症状与治疗方法全解析
牢记“首善”嘱托,打造“烟火”芦台——芦台街道党建引领基层治理综述
常用焊接的工具有哪几种,不同的焊缝要求,怎么选用焊接工具?
近期新阅or重温作品盘点——密室与不在场证明的迷之羁绊
辍学和休学有什么区别(休学了复学很麻烦吗)
蛋壳诞:一份减脂塑形的有效饮食方案
江户百景:为何浮世绘能如此直指人心、深入灵魂?
新手如何在小红书上成功运营?
停车坐爱枫林晚,坐的意思是什么?解析古诗‘停车坐爱枫林晚’中的‘坐’字
吹塑托盘的应用与未来发展