我希望这个问题不会成为"问答"问题......这里说:(多)共线性是指回归模型中预测变量之间的极高相关性.如何治愈它们......好吧,有时你不需要"治愈"共线性,因为它不会影响回归模型本身,而是解释个体预测因子的影响.
发现共线性的一种方法是将每个预测变量作为因变量,将其他预测变量作为自变量,确定R 2,如果它大于.9(或.95),我们可以考虑预测变量冗余.这是一种"方法"......其他方法呢?其中一些是耗时的,比如从模型中排除预测变量并观察b系数变化 - 它们应该明显不同.
当然,我们必须始终牢记分析的具体背景/目标......有时候,唯一的补救措施就是重复研究,但是现在,我对以多种共线性(多)共线性筛选冗余预测因子的各种方式感兴趣发生在回归模型中.
我正在使用 statsmodel 进行 OLS 回归。当我对标准错误进行聚类时,出现了一条警告消息,表明存在多重共线性问题。但是,如果我只是拟合没有聚集错误的模型,则不会出现此类警告。
mod = smf.ols(formula = var ~ treatment_r1 + block + has_multiple_treat', data = df)
mod_res = mod.fit(cov_type='cluster', cov_kwds={'groups': df['block']}, use_t=True)
ValueWarning: covariance of constraints does not have full rank. The number of constraints is 3, but rank is 1
'rank is %d' % (J, J_), ValueWarning)
Run Code Online (Sandbox Code Playgroud)
我在这篇文章《Capturing high multi-collinearity in statsmodels》之后检查了共线性,没有发现任何问题。
corr = np.corrcoef(df_new[["var", "has_multiple_treat", "treatment_r1", "block1"]], rowvar=0)
w, v = np.linalg.eig(corr)
w
np.linalg.det(corr)
Run Code Online (Sandbox Code Playgroud)
var可以是0或1变量或者连续变量;Treatment_r1、has_multiple_treat是 0 …
scikit-learn 可以用于去除使用多元线性回归时高度相关的特征吗?
关于@behzad.nouri 发布的在 statsmodels 中捕获高度多重共线性的答案,我有一些问题可以避免我的困惑。
于是,他检验了自变量的5列或特征之间的高度多重共线性;每列有 100 行或数据。他得到 w[0] 接近于零。那么我可以说应该删除第一列或第一个自变量以避免非常高的多重共线性吗?