statsmodel.formula.api python中的线性回归

时间:2017-06-14 12:09:01

标签: python python-3.x regression statsmodels

我正在使用statsmodels.formula.api进行线性回归。我使用了三个独立变量进行预测。在某些情况下,我会得到负值,但所有输出都应该是正值。

有没有办法告诉模型输出不能为负?

import statsmodels.formula.api as smf

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

2 个答案:

答案 0 :(得分:2)

模拟正或非负相关(或响应或输出)变量的一种标准方法是假设指数均值函数。

给定协变量的响应的期望值是E(y | x)= exp(x b)。

对此进行建模的一种方法是使用泊松回归,statsmodels Poisson或GLM与族Poisson。鉴于Poisson不是连续变量的正确似然,我们需要使用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并不强制Poisson,Binomial,Logit等响应变量是整数,因此我们可以使用这些模型进行连续数据的准最大似然估计。

答案 1 :(得分:1)

如果您尝试确保模型的输出值受限于某些范围,则线性回归可能不是一个合适的选择。听起来你可能想要逻辑回归或某种模型,其中输出落在已知范围内。确定您想要的模型类型可能是CrossValidated的问题。

话虽如此,您可以轻松地在事后约束您的预测 - 只需将所有否定预测设置为0.这是否有意义是一个不同的问题。