我正在使用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)
答案 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.这是否有意义是一个不同的问题。