完整代码获取:回复“ VIF皮尔逊 ”即可获得通道
各位科研小伙伴们,大家好。
今天,我想带大家详细拆解方差膨胀因子VIF+皮尔逊相关性分析。这张图中间部分展示变量两两之间的相关关系,左侧展示变量所属分组,右侧同时给出每个变量的VIF值,也就是方差膨胀因子,用于判断变量之间是否存在多重共线性。这类图特别适合用于论文中的前期探索性分析和建模前诊断。
它主要解决四个问题:
变量之间是否存在相关关系
这种关系是正相关还是负相关
这种关系在统计学上是否显著
这些变量是否存在严重共线性,从而影响后续回归或解释模型
1.分组化指标体系
在科研分析中,很多数据并不是杂乱地堆在一起,而是有明确层次结构的。比如同一批指标可能来自不同维度:城市建设维度、社会经济维度、生态环境维度,或者医学中的临床指标、生化指标、影像指标等。这个图使用的方法,不只是把变量简单排成一列,而是先把变量放进一个分组化的结构框架里,再进行后续计算和展示。这样做的意义非常大,因为它让图不只是回答“变量和变量之间的关系”,还回答“这种关系发生在什么维度内部,或者什么维度之间”。换句话说,它把统计关系分析和理论框架展示结合到一起了。
这种方法特别适用于那些多维度指标体系研究。比如城市研究中的交通、经济、生态;公共卫生研究中的暴露、结局、协变量;社会科学研究中的个体、家庭、社区特征;生态学研究中的地形、气候、土地利用、生物指标。它解决的问题是:当变量很多时,读者不仅要知道谁和谁相关,还要知道这种相关是发生在“同类变量内部”,还是发生在“跨维度变量之间”。这会直接影响后续的理论解释。
2.Pearson 相关分析
这张图最核心的计算方法,是Pearson 相关系数。Pearson 相关分析本质上是在衡量两个连续变量之间的线性关联方向和关联强度。如果相关系数为正,说明一个变量增大时,另一个变量总体上也倾向于增大;如果相关系数为负,说明一个变量增大时,另一个变量倾向于减小;如果相关系数绝对值越接近 1,说明这种线性关系越强;越接近 0,则说明线性关系越弱。图中主矩阵部分正是基于这种两两成对计算的思路建立起来的。
·相关性越接近 1:越强正相关
·相关性越接近 -1:越强负相关
·相关性越接近 0:线性相关越弱
Pearson 方法适合的数据类型,通常是连续型数值变量,而且更适合变量之间主要呈现近似线性关系的场景。如果变量是等级变量、明显偏态分布、存在大量极端值,或者关系本身并不是线性的,那么就要考虑 Spearman 等其他方法。但在大量环境科学、地理学、生态学、医学、经济学的指标体系研究中,Pearson 依然是最常见、最基础、也最容易进入论文写作框架的方法之一。它解决的是一个非常经典的问题:在一堆变量里,到底哪些变量之间是协同变化的,哪些是此消彼长的,哪些彼此几乎没有线性联系。
*:通常表示 p < 0.05
**:通常表示 p < 0.01
***:通常表示 p < 0.001
星号越多,说明这个相关关系越稳定、越不容易是随机出现的。
3.显著性检验
很多初学者看到相关矩阵,容易只盯着相关系数本身。但一套规范的科研分析不能只告诉读者相关系数是多少,还应该告诉读者这种相关关系是否具有统计学意义。所以这张图在相关分析之外,还进一步进行了显著性检验,并将结果用星号体系表达出来。图中的星号本质上对应的是 p 值分层阈值,常见的是 p < 0.05、p < 0.01、p < 0.001 等。
显著性检验的意义在于,它帮助我们区分看起来有关系和在统计上有证据支持这种关系之间的差别。因为一个相关系数即便数值不小,也可能因为样本量不足而不显著;反过来,一个中等甚至较小的相关系数,也可能因为样本量足够大而达到显著。也就是说,相关系数回答的是“关系有多强”,而显著性检验回答的是“这种关系是否足够可信”。这两个问题不能混为一谈。
在科研写作中,这种“相关系数 + 显著性”的联合表达非常重要。因为论文读者往往既关心效应方向和大小,也关心统计证据是否稳健。把星号直接叠加到图中,是一种非常高效的可视化方法,它避免了读者在图和表之间来回翻找,也让统计结论更直观。
4.方差膨胀因子VIF——共线性诊断
如果说相关分析告诉我们变量之间是否彼此有关,那么 VIF 解决的就是另一个更接近建模的问题:这些变量能不能一起进入同一个回归模型。图右侧单独列出的,就是每个变量对应的 VIF。这是一种非常经典的多重共线性诊断方法。它不是简单看某两个变量之间相关高不高,而是看“某一个变量能在多大程度上被其他变量线性解释”。如果一个变量几乎能够被其他变量组合预测出来,那么它就不再提供足够独立的信息,进入模型后就会导致系数不稳定、标准误增大、显著性扭曲,甚至出现方向反常的问题。
VIF 在科研中的地位非常高,尤其是在做多元线性回归、广义线性模型、面板回归、空间回归、生态回归、医学多因素分析时。因为很多研究的变量本身就来自同一个系统,比如经济指标之间常常高度同步,生态指标之间也可能具有强耦合关系。只看相关矩阵,研究者只能知道它们很像;而看 VIF,研究者才能进一步判断这种相似性会不会已经严重到影响模型可估性和解释性。
一般来说,VIF 越大,表示共线性风险越高。图中还配合了一条VIF=10的阈值虚线,这种做法是典型的诊断型表达方法。它不是为了美观,而是为了让读者快速判断哪些变量已经接近或者超过经验警戒范围。因此,这张图并不是单纯的描述性图表,而是带有明显决策支持作用的图。它可以帮助研究者回答:哪些变量可以保留、哪些变量需要删减、哪些变量适合合成、哪些场景下可能要改用降维或正则化方法。
一般经验:
VIF < 5:共线性风险较低
5–10:开始需要关注
≥10:通常提示较强共线性

5.例图解读:
例图的结构是:
上三角:直接给出皮尔逊相关系数数值,便于精确读取
下三角:用气泡大小、颜色和星号表达强度、方向和显著性
左侧括号:按 City、Society、Ecology 三大维度组织变量
右侧 VIF 图:判断后续建模风险
(1)左侧:变量分组
变量被分成三组:
City:Railway、CNBH、Motorway、SR、US
Society:PD、GDP、RLD、NL、EC
Ecology:NDVI、AAP、DEM、PM2.5、CO2、Slope
这说明研究者并不是把所有指标混在一起看,而是放在一个城市—社会—生态的整体框架中去观察耦合关系。
(2)中间:相关矩阵
红色:正相关
蓝色:负相关
颜色越深:相关程度越强
上三角数字:给出准确相关系数
下三角气泡:越大表示绝对相关程度越高
气泡中的星号:表示显著性水平
(3)右侧:VIF 值
每个变量右边对应一个 VIF 值,红色虚线大约在 10 附近,是经验阈值。
越靠右,说明该变量与其他变量的信息重复越严重。
整体结果解读:
相关分析结果显示,不同维度变量之间存在显著的结构性耦合特征。City 维度中,Railway 与 Motorway 呈极强正相关(r = 0.95);Society 维度中,PD、GDP、RLD 与 NL 之间均表现出显著的强正相关(r = 0.91–0.94);Ecology 维度中,NDVI 与 AAP、DEM 与 Slope、PM2.5 与 CO2 分别呈极强正相关(r ≈ 0.95 以上)。跨维度上,社会经济类指标与 NDVI、AAP 呈中等负相关,而与 PM2.5、CO2 呈中等正相关,表明社会经济活动增强与生态状态下降及环境压力升高存在同步变化趋势。VIF 诊断进一步表明,多个变量的 VIF 值接近或超过 10,提示指标体系中存在较强多重共线性,后续建模需进行变量筛选、降维或采用稳健方法处理。
6.代码运行:
1)安装 Python 环境,推荐使用3.11~3.13版本。
首先,需要在你的计算机上安装 Python。推荐使用3.11~3.13版本。具体安装过程我在这里就不详细说明,网上教程很多,小伙伴们可自行上网查找安装教程。不会的小伙伴可以寻求专业人士的帮忙。不同电脑安装过程出现的问题不同。
官网网址:https://www.python.org/downloads/
2)安装 Python编辑器
推荐使用PyCharm 、VS Code、Anaconda等编辑器,可根据喜好选择。编辑器安装也是需要去官网下载,可以去网上查找安装教程。
3)安装必要的库
你可以直接在终端(命令行)或代码编辑器的控制台中运行以下命令来进行批量安装:
pip install numpy pandas matplotlib seaborn scipy statsmodels openpyxl
如果你使用的是国内网络,下载速度比较慢,建议加上清华大学的镜像源,这样安装会快很多:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy pandas matplotlib seaborn scipy statsmodels openpyxl
4)准备数据
我们首先要整理好数据文件,通常以Excel格式存储。确保数据是数值型,且每一列代表一个变量。
第一行是特征变量的分组或者维度
第二行是特征/变量名称(注意要正式的名称)
其他行为特征/变量对应的数值(需要多行,也就是我们常说的样本量)。
注意:Excel数据文件需要和代码放在同一个文件内
示范数据如下:
5)替换您自己的Excel数据,点击运行。
选择适合Python编辑器使用的格式文件。我这里有两个格式的文件,包括:.ipynb 和.py
找到代码中输入文件路径的地方。输入你的Excel文件名+后缀。可以参考我的示范。

注意:不要删除双引号
输出内容包括PDF和png格式的图
自定义设置:
下面这里可以设置字体大小、颜色等内容。(可以自己设置,不会的就不用设置)

★代码运行常见报错问题:
1.出现:FileNotFoundError: [Errno 2] No such file or directory: '示例数据.xlsx'
原因是当前文件夹代码默认去找 示例数据.xlsx。而这个文件和代码不在同一个文件夹内。解决办法:你需要替换为你自己的数据,然后和代码放在一个文件夹内。
2.出现:ModuleNotFoundError: No module named 'shap'
或者:ModuleNotFoundError: No module named 'xgboost'
其他:ModuleNotFoundError: No module named ''
解决办法就是补安装对应模型库:例如:
pip install shap
pip install xgboost
3.出现:警告:系统缺失中文字体 'SimSun',中文可能无法正常显示。
代码里设置了英文字体 Times New Roman,中文字体 SimSun,并且会先检查系统里有没有这些字体;如果缺失,会打印警告。
解决方法:改成您电脑里实际有的中文字体
5. 运行很慢,像“卡住了一样”
所以如果特征很多、样本很多,程序可能要跑很久,这不是死机,是正常现象。
不同配色结果展示:
出现其他运行问题可添加微信详细咨询:zhouysh001(八宝粥加油)
完整代码获取:回复“ VIF皮尔逊 ”即可获得通道