如何从Statsmodels中的WLS回归二维参数得到测试预测

时间:2014-04-29 16:08:34

标签: python arrays numpy regression statsmodels

我使用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

1 个答案:

答案 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做准备,但仍需要一些时间准备好。