数据中的多重共线性
该变量应与自变量具有稳健的关系。但是,任何无偏变量都不应该在其他自变量之间具有稳健的相关性。共线性可以是解释变量之间的线性关联。如果两个变量之间存在特定的线性关系,则它们是完全共线的。
多重共线性是指在某个阶段,多重相关模型过程中的两个或更多解释变量呈线性相关的情况。如果公正变量之间的相关性好到 1 或 -1,我们就有完美的多重共线性。在实践中,我们通常不会在信息集的持续时间内面临理想的多重共线性。更常见的是,当两个或多个无偏变量之间存在近似线性求爱时,就会出现多重共线性的困难。
简而言之,多重共线性可以定义为其中一个或多个无偏变量彼此强烈相关的事件。在这种情况下,我们通常应该在每个相关的公正变量中只使用一个。
VIF(Variance Inflation Factor)是多重共线性寿命的标志,而statsmodel提出了一个特征来计算每个实验变量的 VIF,其值大于 10 是高多重共线性可能的生活方式的经验法则。 VIF 价格的优秀指导原则如下,VIF = 1 方式不存在相关性,VIF > 1,但 < 5 则存在相关性。
是什么导致多重共线性?
主要类型有:
- 基于数据的多重共线性:由于设计不良的实验、100% 可观察的统计数据或无法操纵的数据收集方法。在某些情况下,变量也可能特别相关(通常是从纯粹的观察研究中收集事实的方法),并且研究人员没有错误。出于这个原因,您应该尽可能地进行行为实验,预先放置预测变量的范围。
- 结构多重共线性:因为你,研究人员,当他们试图创建新的预测变量时。
多重共线性的原因还包括:
- 事实不足。在某些情况下,收集额外的统计数据可以解决问题。
- 虚拟变量也可能被错误地使用。例如,研究人员可能无法排除一个类别,或者为每个类别添加一个虚拟变量(例如春季、夏季、秋季、冬季。
- 在回归中包含一个混合了其他变量的变量。例如,由“一般投资利润”组成,而总投资收益=股票和债券收益+储蓄利息收益。
- 包括相同(或几乎相同)的变量。例如,以磅为单位的重量和以公斤为单位的重量,或投资收益和储蓄/债券收益。
示例:您还可以发现多重共线性可能是测试制定计划的一个特征。
在材料制造商的案例中,我们可以毫无问题地看到广告和营销以及数量是相关的预测变量,主要在营销影响中波动,而数量包含在版本中,也没有包含在版本中。在类似的测试中,您会发现产品生产商可能还会在数量和广告之间引入多重共线性,因为它是实验设计的一部分,将过高的广告价格范围分配给商店较小的城市,而浓缩咖啡广告则为拥有较小商店的城市提供资金。较大的商店。
如果您准备重新进行市场测试,您将通过重组实验来解决这个困难,以确保诚实地汇总过多的广告/低数量、过多的广告/高数量、低的广告/高数量和低广告/低数量商店。这可以让您消除事实集中的多重共线性。但是,通常不可能重新进行实验。这就是为什么在开始之前非常谨慎地分析受控实验的计划至关重要的原因,这样您就可以避免偶然引起此类问题。如果您因为实验设计而定位了多重共线性,并且您无法重新进行实验,您将处理包含控制的多重共线性。在布料生产商的情况下,将范围纳入版本中作为一种效果至关重要,以促使对广告的影响进行更高的正确估计。在这种情况下解决多重共线性的其他答案包括收缩估计,如主添加剂回归或偏最小二乘分析。
代码:使用 VIF 因子从数据集中移除多重共线性的Python代码。
python3
# read the dataset
import pandas as pd
data = pd.read_csv('https://docs.google.com / spreadsheets / d/e / 2PACX-1vQRtMKSAzDVoUFeP_lvpxSPt0pb7YR3_SPBdnq0_2nIgfZUMB8fMgJXaMETqLmrV3uw2yOqkZLEcTvt / pub?output = csv')
data.head(3)
# Remove the price from the dataset
Y = data["price"]
iv = data.columns
iv = iv.delete(0)
X = data[iv]
# calculate the variance inflation factor
from statsmodels.stats.outliers_influence import variance_inflation_factor as vif
# compare with each column
[vif(data[iv].values, index) for index in range(len(iv))]
# Removing multicollinearity from the dataset using vif
from statsmodels.stats.outliers_influence import variance_inflation_factor as vif
# compare with each columns
for i in range(len(iv)):
vif_list = [vif(data[iv].values, index) for index in range(len(iv))]
maxvif = max(vif_list)
print("Max VIF value is ", maxvif)
drop_index = vif_list.index(maxvif)
print("For Independent variable", iv[drop_index])
if maxvif > 10:
print("Deleting", iv[drop_index])
iv = iv.delete(drop_index)
print("Final Independent_variables ", iv)
输出:
Max VIF value is 15.213540834822062
For Independent variable bedrooms
Deleting bedrooms
Final Independent_variables Index(['lotsize', 'bathrms', 'stories', 'driveway', 'recroom', 'fullbase',
'gashw', 'airco', 'garagepl', 'prefarea'],
dtype='object')
Max VIF value is 7.738793387948324
For Independent variable bathrms
Max VIF value is 7.738793387948324
For Independent variable bathrms
Max VIF value is 7.738793387948324
For Independent variable bathrms
Max VIF value is 7.738793387948324
For Independent variable bathrms
Max VIF value is 7.738793387948324
For Independent variable bathrms
Max VIF value is 7.738793387948324
For Independent variable bathrms
Max VIF value is 7.738793387948324
For Independent variable bathrms
Max VIF value is 7.738793387948324
For Independent variable bathrms
Max VIF value is 7.738793387948324
For Independent variable bathrms
Max VIF value is 7.738793387948324
For Independent variable bathrms
我们可以注意到,VIF 分析已经消除了大于 10 的卧室,但是,story_one 和 stories_two 被保留了。测试模型执行的常见做法是将数据集分成 80/20(或 70/30)分别进行训练/测试,并使用训练数据集构建模型,然后将训练好的模型应用于测试数据集以评估模型的性能。我们还可以通过查找 r2 分数来评估模型的性能。