运行dmatrices计算VIF报PatsyError缺失因变量的原因及解决咨询
报错触发原因
这个报错是由patsy公式的语法书写错误导致的:
- patsy公式中固定使用
~作为因变量和自变量的分隔符,-运算符的作用是从公式项中移除指定变量,而非分隔因变量、自变量 - 你书写的公式
'price - area + bedrooms + bathrooms'会被patsy识别为:仅构造「price减去area、bedrooms、bathrooms」的单一项,没有单独的因变量部分,因此返回的左侧因变量矩阵为空,触发missing required outcome variables报错
修复方案
方案1:保留因变量拆分逻辑
如果需要同时得到因变量y和自变量X矩阵,只需要把公式中的-替换为~即可:
y, X = dmatrices('price ~ area + bedrooms + bathrooms', df, return_type='dataframe') vif=pd.DataFrame() vif["VIF Factor"]=[variance_inflation_factor(X.values, i) for i in range(X.shape[1])] vif["features"]=X.columns vif
注:默认返回的X会包含截距项,截距项的VIF值不参与共线性判断,可直接忽略。
方案2:仅构造自变量矩阵计算VIF
因为VIF仅用于衡量自变量之间的多重共线性,不需要用到因变量,也可以直接构造自变量矩阵,省略y的生成:
X = dmatrix('area + bedrooms + bathrooms', df, return_type='dataframe') vif=pd.DataFrame() vif["VIF Factor"]=[variance_inflation_factor(X.values, i) for i in range(X.shape[1])] vif["features"]=X.columns vif
内容的提问来源于stack exchange,提问作者Mohamed Arafa
相关产品推荐
相关产品推荐

