我需要将内生变量
Y
回归到外生变量X
上。 Y
如下所示:
ID 0 1 2 ... 22 23 24
Date ...
1981 0.0111 -0.1685 -0.2010 ... 0.155037 0.008162 -0.038970
1982 0.2974 0.4805 0.0352 ... 0.100300 0.249513 0.165870
1983 0.1575 0.2501 0.1812 ... 0.128059 0.210568 0.444479
1984 0.0194 -0.0821 -0.1136 ... 0.200166 0.154689 0.016384
1985 0.3704 0.1424 0.2205 ... 0.279801 0.297258 0.137567
这意味着我的列上有 25 个不同的时间序列。 我的
X
看起来像这样:
A B C D E F G
Date
1981 -0.1813 0.0731 0.2512 -0.0141 0.1091 0.1471 -0.0825
1982 0.1066 0.0727 0.1336 -0.0416 0.1773 0.1054 0.3473
1983 0.1374 0.1227 0.2049 0.0048 0.1606 0.0880 -0.0984
1984 -0.0605 -0.0826 0.1907 0.1523 0.0364 0.0985 0.0888
1985 0.2491 -0.0021 0.0145 0.1185 -0.0300 0.0772 0.1469
这意味着我的列上有 7 个预测变量。请注意,预测变量不是
Y
ID 的特征,它们是本着因子分析精神的相当不同的因子。现在我使用以下命令进行回归:
import statsmodels.api as sm
mod=sm.OLS(Y,X)
res=mod.fit()
模型拟合正确:我获得的
res.params
正是我在 Y
上对 X
的每一列进行回归时得到的参数,但我既无法获得 R^2,也无法获得预测值,也无法获得摘要。 print(res.summary())
行实际上给了我以下错误:
ValueError: shapes (5,25) and (5,25) not aligned: 25 (dim 1) != 5 (dim 0)
我知道这与
X
的尺寸无关,但这只是由于使用 sm.OLS
来表示 Y
中的“多个”ID。当然,我可以对 Y
上的 X
的每个元素进行单独回归,保存系数和预测值,并根据总体观测值计算 R^2。但是,我不明白背后的问题是什么sm.OLS
。有人可以向我解释一下这里发生了什么以及潜在的不同解决方法吗?
不幸的是,据我所知,没有解决方案,因为 statsmodels OLS 不支持二维内生变量。这非常烦人,因为模型似乎拟合并生成了很好的系数;这只是拟合模型的方法需要一维数组作为系数。