![](/img/trans.png)
[英]How does “statsmodels.regression.linear_model. WLS” work?
[英]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.