2017-06-14 229 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.这是否有意义是一个不同的问题。