在统计学中,回归分析是一种预测或解释一个因变量与一个或多个自变量之间关系的方法。然而,在进行回归分析时,可能会遇到两种常见的问题:异方差性和多重共线性。异方差性指的是残差的不均匀分布,而多重共线性则涉及到自变量之间的高度相关性。本文将详细探讨这两个概念,并提供Python实现的示例。
多重共线性是指在数据集中存在两个或多个高度相关的自变量。这种现象虽然不会影响模型的性能,但会影响模型的可解释性。例如,年龄和出生年份、体重和身高、工资和月收入等变量之间可能存在高度相关性。多重共线性的原因可能包括实验设计不当、数据操作错误、错误数据观测、创建依赖于其他变量的新变量,或者在创建虚拟变量时包含相同的变量。
为了检测多重共线性,可以使用方差膨胀因子(VIF)来衡量。VIF值大于5通常表示存在多重共线性问题。以下是使用Python进行多重共线性检测的代码示例:
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
# 假设df是包含自变量的数据框
vif_info = pd.DataFrame()
vif_info['VIF'] = [variance_inflation_factor(df.values, i) for i in range(df.shape[1])]
vif_info['Column'] = df.columns
vif_info.sort_values('VIF', ascending=False)
处理多重共线性的方法包括创建新特征和移除高度相关的特征。创建新特征可以通过结合高度相关的变量来实现,然后使用这些新特征来识别多重共线性并构建模型。
异方差性是由于数据集中存在异常值而导致的现象。在回归分析中,残差在测量值范围内的分布不均匀,这种现象被称为异方差性。普通最小二乘法(OLS)期望残差来自具有恒定方差的随机样本。通过观察残差图,如果图形形状像扇形或圆锥形,则表明存在异方差性。另一种异方差性的指示是残差方差随着拟合值的增加而增加。
异方差性有两种类型:纯异方差性和非纯异方差性。纯异方差性是指即使使用正确的独立特征,残差图也显示出非恒定方差。非纯异方差性是指在指定错误模型的情况下,输入特征的数量也会导致残差方差不均匀。
异方差性的原因可能是由于误差方差的变化。如果数据集的值范围很广,最小值和最大值之间存在显著差异,那么就会出现异方差性问题。例如,过去30年的零售电子商务销售数据就是一个例子。十年前电子商务客户很少,因此观察到的值会较少。另一方面,在过去的十年中,电子商务销售有所上升,因此会发现这种情况下的值范围很广。因此,可能会在数据集中遇到异方差性问题。
from statsmodels.stats.diagnostic import het_white
from statsmodels.compat import lzip
from patsy import dmatrices
# 假设moscow_df是包含莫斯科公寓列表数据的数据框
expr = 'price~ repair+ year_built_empty+house_age+closest_subway+dist_to_subway+sg+subway_dist_to_center+h3+agent_offers+subway_offers+address_offers+rooms+footage+floor+max_floor+first_floor+last_floor+AO+hm'
model = OLS.from_formula(expr, data=moscow_df).fit()
y, X = dmatrices(expr, moscow_df, return_type='dataframe')
keys = ['Lagrange Multiplier statistic:', 'LM test's p-value:', 'F-statistic:', 'F-test's p-value:']
results = het_white(model.resid, model.model.exog)
lzip(keys, results)