statsmodel中的GLM返回错误

3 投票
1 回答
5489 浏览
提问于 2025-04-18 18:45

现在我已经弄明白怎么用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会自动处理这个问题。

撰写回答