使用 statsmodel 估计 OLS 时出现“满排名”错误

问题描述 投票:0回答:1

我有特定地区农作物产量、年气温和年降水量的历史数据。我的目标是估计以下线性模型:

其中y为农作物年产量,t为时间(年),tmp为温度(年平均值),p为降水量(年总和)。平方项捕捉极值的影响。

我的代码是:

import pandas as pd
import statsmodels.formula.api as smf

df = pd.read_csv('https://raw.githubusercontent.com/kevinkuranyi/data/main/crop_yield.csv')

model = smf.ols(formula = 'y_banana ~ year+year2+tmp+tmp2+pre+pre2+tmp_pre+tmp2_pre2',
 data=df, missing='drop').fit(cov_type='HAC', cov_kwds={'maxlags': 2})
model.summary()

通过运行此程序,我收到以下错误消息:

/usr/local/lib/python3.10/dist-packages/statsmodels/base/model.py:1888: ValueWarning: covariance of constraints does not have full rank. The number of constraints is 8, but rank is 5
  warnings.warn('covariance of constraints does not have full '

我怀疑这可能是由于多重共线性问题,但无论我省略哪个变量,只要我包含超过 4 个变量(即使没有交互项或平方值,也可能是线性组合),我就会得到这个错误。 我在此 Colab 笔记本中包含了几种组合作为示例。

可能是什么问题?

python statistics regression linear-regression modeling
1个回答
0
投票

您正在使用缩放不当的数据的多项式。

日历年和日历年平方的缩放比例很差。用于趋势或类似用途,例如年 - 年 0。基于非常大的标准误差,

tmp
也有类似的问题。

绘制多项式函数并检查值是否大致在同一范围内。为了获得最佳行为,数据应重新调整到较小的范围,例如区间 [0,1] 或小于 10 的大值。

Numpy 多项式

vander
函数具有自动重新缩放基本变量的选项。

我很久以前写的一篇相关博文。 https://jpktd.blogspot.com/2012/03/numerical-accuracy-in-linear-least.html

© www.soinside.com 2019 - 2024. All rights reserved.