繁体   English   中英

如何从statsmodels中的WLS回归的2D参数获取测试预测

[英]How to get the prediction of test from 2D parameters of WLS regression in statsmodels

我使用statsmodels逐步增加WLS回归函数的参数。

我有一个这样声明的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导入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)

我很容易理解,因为它是endg向量,所以y是一维数组。 但是当我的endg向量(在这种情况下为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

np.dot(X_test, temp_g.params)应该仍然可以工作。

在某些情况下,您需要检查矩阵的方向,有时需要转置

但是,结果的predict方法和大多数其他方法将不起作用,因为该模型假定因变量z为一维。

问题再次是您要做什么?

如果要独立适合z的列,请对其进行迭代,以便每个y为1D。

for y in zT: res = WLS(y, X).fit()

zT允许在列上进行迭代。

在其他情况下,我们通常将模型堆叠起来,以使y为1D且其第一部分为z[:,0] ,而列的第二部分为z[:,1] 设计矩阵或解释变量矩阵必须相应地扩展。

支持多元因变量是statsmodels的组成部分,但仍需要一些时间来准备。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM