2017-06-14 230 views
1

我正在使用statsmodels.formula.api進行線性迴歸。我用三個獨立變量進行預測。在某些情況下,我得到負面價值,但所有產出都應該是正面的。statsmodel.formula.api中的線性迴歸python

有什麼辦法可以告訴模型輸出不能爲負數嗎?

import statsmodels.formula.api as smf 

output1 = smf.ols(formula= 'y ~A+B+C', data= data).fit() 
output = output.predict(my_data) 

回答

1

模擬正或非負相關(或響應或輸出)變量的一種標準方法是假設一個指數平均函數。

給定協變量的響應的期望值是E(y | x)= exp(x b)。

對此進行建模的一種方法是使用泊松迴歸,或者使用統計模型泊松或帶有家庭泊松的GLM。考慮到泊松不會是連續變量的正確可能性,我們需要調整參數估計的錯誤指定的協方差,用cov_type='HC0'。那就是我們正在使用準最大似然法。

output1 = smf.poisson(formula= 'y ~A+B+C', data= data).fit(cov_type='HC0')

和替代方案將是記錄響應變量,其隱含地假定對數正態模型。

http://blog.stata.com/2011/08/22/use-poisson-rather-than-regress-tell-a-friend/ https://stats.stackexchange.com/questions/8505/poisson-regression-vs-log-count-least-squares-regression

注意,statsmodels不徵收,在泊松分佈,二項分佈,Logit模型和類似的響應變量是整數,所以我們可以使用這些模型對於連續數據準最大似然估計。

+0

感謝您的詳細解釋。現在我明白如何使用其他模型而不是線性模型。謝謝! – bikuser

1

如果您試圖確保您的模型的輸出值被限制在一定範圍內,那麼線性迴歸可能不是一個合適的選擇。這聽起來像你可能需要logistic迴歸或某種模型,其輸出落在已知範圍內。確定你想要什麼樣的模型可能是CrossValidated的問題。這就是說,你可以很容易地在事後約束你的預測 - 把所有的負面預測設置爲0.這是否有意義是一個不同的問題。