statsmodel中的GLM返回错误
现在我已经弄明白怎么用OLS(Pandas/Statsmodel OLS预测未来值)了,我想给我的数据拟合一个更好的曲线……我以为GLM也应该差不多。
import statsmodels.api as sma
df1['intercept'] = 1
y = df1[['intercept', 'date_delta']]
X = df1['monthly_data']
smaresults_normal = sma.GLM(X,y, family=sma.families.Binomial()).fit()
结果返回了一个错误信息:ValueError: The first guess on the deviance function returned a nan. This could be a boundary problem and should be reported.
这个问题在2010年就已经被人知道了。我还尝试过:
import statsmodels.api as sm
import statsmodels.formula.api as smf
glm_unsmoothed = smf.GLM('monthly_data ~ date_delta', df1, family=sm.families.Binomial() )
glm_unsmoothed.fit()
这导致了另一个错误:'builtin_function_or_method' object has no attribute 'equals'
我想把模型和未来的值画出来,就像我用OLS模型时那样:
#ols model
df1['intercept'] = 1
X = df1[['intercept', 'date_delta']]
y = df1['monthly_data']
smresults_normal = sm.OLS(y, X).fit()
#future values
smresults_normal.predict(df_future12[['intercept', 'future_monthly']])
#model in sample data
import statsmodels.formula.api as smf
smresults_unsmoothed = smf.ols('monthly_data ~ date_delta', df1).fit()
df1['ols_preds_unsmoothed'] = smresults_unsmoothed.predict()
编辑 我放弃了使用GLM,转而用OLS和一个多项式拟合的公式,我觉得效果还不错……(不过获取未来预测的方式显然和我之前的OLS不一样,希望有一天我能写出一些代码而不需要不停地调整!)可惜我的声望太低,无法发布那张好图! :(
1 个回答
2
我觉得我遇到过同样的问题,你只需要确保你的数据表里没有同时出现病例和非病例都为零的行。在估算glm之前,运行以下代码:
data=data[(data.cases !=0) | (data.notcases!=0)]
看起来R会自动处理这个问题。