如何从statsmodels中的WLS回归的2D参数获取测试预测
我正在逐步调整使用 WLS 回归函数 的参数,使用的是 statsmodels 库。
我有一个 10 行 3 列的数据集 X,声明方式如下:
X = np.array([[1,2,3],[1,2,3],[4,5,6],[1,2,3],[4,5,6],[1,2,3],[1,2,3],[4,5,6],[4,5,6],[1,2,3]])
这是我的数据集,我还有一个 10 行 2 列的 endog
向量,长得像这样:
z =
[[ 3.90311860e-322 2.00000000e+000]
[ 0.00000000e+000 2.00000000e+000]
[ 0.00000000e+000 -2.00000000e+000]
[ 0.00000000e+000 2.00000000e+000]
[ 0.00000000e+000 -2.00000000e+000]
[ 0.00000000e+000 2.00000000e+000]
[ 0.00000000e+000 2.00000000e+000]
[ 0.00000000e+000 -2.00000000e+000]
[ 0.00000000e+000 -2.00000000e+000]
[ 0.00000000e+000 2.00000000e+000]]
现在在导入了 import statsmodels.api as sm
之后,我做了以下操作:
g = np.zeros([3, 2]) # g(x) is a function that will store the regression parameters
mod_wls = sm.WLS(z, X)
temp_g = mod_wls.fit()
print temp_g.params
然后我得到了这个输出:
[[ -5.92878775e-323 -2.77777778e+000]
[ -4.94065646e-324 -4.44444444e-001]
[ 4.94065646e-323 1.88888889e+000]]
之前,在 这个问题的回答 中,我能够使用 numpy.dot
来预测测试数据 X_test
的值,像这样:
np.dot(X_test, temp_g.params)
我觉得这很简单,因为 endog
向量 y
是一维数组。但是当我的 endog
向量在这种情况下是二维的 z
时,这个过程是怎么工作的呢?当我尝试用一维版本中使用的那行代码时,我遇到了以下错误:
self._check_integrity()
File "C:\Users\app\Anaconda\lib\site-packages\statsmodels\base\data.py", line 247, in _check_integrity
raise ValueError("endog and exog matrices are different sizes")
ValueError: endog and exog matrices are different sizes
1 个回答
2
np.dot(X_test, temp_g.params)
这个操作应该还是可以用的。
在某些情况下,你需要检查一下矩阵的方向,有时候需要进行转置。
不过,predict
以及大多数其他结果的方法是无法使用的,因为模型假设因变量 z 是一维的。
问题又回到了你想要做什么?
如果你想独立地处理 z 的每一列,那么就要逐列进行,这样每个 y 才是一维的。
for y in z.T: res = WLS(y, X).fit()
z.T
让你可以逐列进行操作。
在其他情况下,我们通常会把模型堆叠起来,使得 y 是一维的,第一部分是 z[:,0]
,第二部分是 z[:,1]
。设计矩阵或者解释变量的矩阵也需要相应地扩展。
对于多元因变量的支持正在开发中,但还需要一些时间才能准备好。