如何使用 statsmodels.formula.api logit 进行预测

how to predict using statsmodels.formula.api logit

我有以下问题。我想使用 statsmodels.formula.api.

中的 logit 进行样本内预测

查看我的代码:

import statsmodels.formula.api as smf

model_logit = smf.logit(formula="dep ~ var1 + var2 + var3", data=model_data)

到目前为止一切都很好。但我想使用我的模型进行样本内预测:

yhat5 = model5_logit.predict(params=["dep", "var1", "var2", "var3"])

这给出了错误 ValueError: data type must provide an itemsize

当我尝试时:

yhat5 = model5_logit.predict(params="dep ~ var1 + var2 + var3")

我遇到另一个错误:numpy.core._exceptions._UFuncNoLoopError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('<U32'), dtype('<U69')) -> None

如何使用 from statsmodels.formula.api 对 Logit 模型进行样本内预测?

这对我没有帮助:

使用示例数据集:

import statsmodels.formula.api as smf
import pandas as pd
import numpy as np
from sklearn.datasets import make_classification

X,y = make_classification(n_features=3,n_informative=2,n_redundant=1)
model_data = pd.DataFrame(X,columns = ['var1','var2','var3'])
model_data['dep'] = y

拟合模型(我在你的代码中没有看到):

import statsmodels.formula.api as smf
model_logit = smf.logit(formula="dep ~ var1 + var2 + var3", data=model_data)
res = model_logit.fit()

您可以获得样本内预测(概率)和预测标签:

in_sample = pd.DataFrame({'prob':res.predict()})
in_sample['pred_label'] = (in_sample['prob']>0.5).astype(int)

in_sample.head()
 
       prob  pred_label
0  0.005401           0
1  0.911056           1
2  0.990406           1
3  0.412332           0
4  0.983642           1

然后我们检查实际标签:

pd.crosstab(in_sample['pred_label'],model_data['dep'])
 
dep          0   1
pred_label        
0           46   2
1            4  48