2014-04-29 111 views
1

我使用statsmodels遞增了參數WLS regression functions如何從統計模型中的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我這樣做:

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,我能夠預測使用numpy.dot測試數據X_test的值,如下所示:

np.dot(X_test, temp_g.params) 

予理解的是,很容易地自它的endog矢量,y是一維陣列。但是,當我的endog矢量,在這種情況下,z是2D時,它是如何工作的? 當我嘗試上面的線爲一維版本中,我得到以下錯誤:

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

@ user333700是否可以使用參數來構建新的迴歸模型,然後使用** predict()**函數? – user961627

回答

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製作,但仍需要一些時間才能做好準備。

+0

好的,我會使用'np.dot',因爲'fit()'目前可以用於2D數組。但是2D權重呢?就像我有一個10x2'endog'數組一樣,我也需要提供'weights',這也是一個10x2數組。但是,當我嘗試'mod_wls = sm.WLS(z,X,權重)',我得到一個錯誤跟蹤: '文件「C:\ ... \ statsmodels \ regression \ linear_model.py」,行405美白...返回np.sqrt(self.weights)[:,無] * X ...ValueError:操作數不能與形狀一起廣播(10,1,2)(10,3)'我應該怎麼做才能使用2D權重? – user961627

+0

迭代z和列的權重或堆疊它們。 「OLS.fit」適用於參數估計是實現的一個副作用,它不是**而是設計。如果沒有獨立迴歸的疊加或迭代,2D權重將無法工作,因爲我們必須用每個權重向量來變換z和X數組。 – user333700

+0

但擬合模型和每列生成參數有助於給出一個結果,我可以構建一個結果,如果直接支持2D數組,我會得到同樣的結果。我可以確認這是否正是您的意思:(1)獲取所有數據'X'(它是10x3)的參數,僅使用每個'z'和'y'的第一列作爲一維數組。這將給出一個3x1的參數數組,'p1'。 (2)重複'z'&'y'第二列的過程,並獲得另一個3x1參數數組'p2'。 (3)在'p2'上堆疊'p1'以獲得'params'。如果支持二維數組,我會得到相同的「params」嗎? – user961627

相關問題