Python中的VIF分析与解释

2021-09-27 05:52:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在著名的mtcars2数据集上应用VIF。你知道吗

在VIF计算中,我们关注数据集的特征变量来确定多重共线性问题。 因为,我有一个特定的问题陈述,所以我假设“mpg”作为目标var,其余的作为mtcars2数据集中的特性。你知道吗

cars = pd.read_csv('mtcars2.csv')
col_names = list(cars.columns)

col\u names返回列表['mpg'、'cyl'、'disp'、'hp'、'drat'、'wt'、'qsec'、'vs'、'am'、'gear'、'carb']

VIF逻辑:将每个特征独立起来,并将其与其他特征进行回归,以计算其rsquare值。你知道吗

feat = cars.iloc[:,1:]
import statsmodels.api as sm
for i in range(0,len(feat.columns)):
    y = feat.iloc[:,feat.columns == feat.columns[i]]
    x = feat.iloc[:,feat.columns!=feat.columns[i]]
    mod = sm.OLS(y,x)  # fitting linear reg model of one of the feat_var w.r.t all the other feature vars.
    result = mod.fit()
    rsq = result.rsquared
    vif = 1/(1-rsq)
    print("Rsquared value of ",feat.columns[i],"is:",round(rsq,2), "keeping all other columns as features!")
    print("VIF value of ",feat.columns[i],"is:",round(vif,2))
    print("")

上面的循环将输出返回为:

cyl的Rsquared值为:0.99保留所有其他列作为特征! 气缸VIF值为:97.75

disp的Rsquared值为:0.99保留所有其他列作为特征! disp的VIF值为:91.25

hp的Rsquared值为:0.98保留所有其他列作为功能! hp的VIF值为:56.12

drat的Rsquared值为:0.99保留所有其他列作为特征! drat的VIF值为:147.1

wt的Rsquared值为:0.99,保留所有其他列作为特征! wt的VIF值为:154.7

qsec的Rsquared值为:1.0保留所有其他列作为特征! qsec的VIF值为:269.99

vs的Rsquared值为:0.87保留所有其他列作为特征! vs的VIF值为:7.66

am的Rsquared值为:0.87,保留所有其他列作为特征! am的VIF值为:7.94

档位的平方值为:0.99保留所有其他列为特征! 档位VIF值为:116.92

carb的Rsquared值是:0.96保留所有其他列作为特征! carb的VIF值为:28.03

从结果中可以得出什么结论? 我能得出的结论是: -变量的VIF值非常高,我们可以去掉它们(避免多重共线性) -如果变量的Rsquared值很高,这意味着其他特性的组合可以很好地解释该特性,所以也许我们也可以放弃它们。你知道吗

我们能从结果中得出其他推论吗? 根据结果,在最终的模型中,哪些特征变量是值得考虑的?(给定VIF和Rsquared值)