我有特定地区农作物产量、年气温和年降水量的历史数据。我的目标是估计以下线性模型:
其中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 笔记本中包含了几种组合作为示例。
可能是什么问题?
您正在使用缩放不当的数据的多项式。
日历年和日历年平方的缩放比例很差。用于趋势或类似用途,例如年 - 年 0。基于非常大的标准误差,
tmp
也有类似的问题。
绘制多项式函数并检查值是否大致在同一范围内。为了获得最佳行为,数据应重新调整到较小的范围,例如区间 [0,1] 或小于 10 的大值。
Numpy 多项式
vander
函数具有自动重新缩放基本变量的选项。
我很久以前写的一篇相关博文。 https://jpktd.blogspot.com/2012/03/numerical-accuracy-in-linear-least.html