我使用statsmodels逐步增加WLS regression functions的参数。
我有一个我声明的10x3数据集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]])
这是我的数据集,我有一个10x2 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]]
早些时候,从the answer to this question开始,我能够使用X_test
预测测试数据numpy.dot
的价值,如下所示:
np.dot(X_test, temp_g.params)
我很容易理解,因为它是endog向量,y
是一维数组。但是当我的endog向量(在本例中为z
)是2D时,它是如何工作的?
当我尝试在1D版本中使用的上述行时,我收到以下错误:
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
答案 0 :(得分:2)
np.dot(X_test, temp_g.params)
仍应有效。
在某些情况下,您需要检查矩阵的方向是什么,有时需要转置
然而predict
和结果的大多数其他方法都不起作用,因为模型假定因变量z是1D。
问题又是你想要做什么?
如果你想独立地拟合z的列,那么迭代它以使每个y为1D。
for y in z.T: res = WLS(y, X).fit()
z.T
允许对列进行迭代。
在其他情况下,我们通常堆叠模型,使得y为1D,其中第一部分为z[:,0]
,列的第二部分为z[:,1]
。解释变量的设计矩阵或矩阵必须相应扩展。
支持多变量因变量正在为statsmodels做准备,但仍需要一些时间准备好。