我在Mac上使用pandas 0.11.0
(数据处理)和statsmodels 0.4.3
进行逻辑回归,以进行实际的回归。
我将运行大约2900个不同的逻辑回归模型,需要将结果输出到csv文件,并以特定的方式格式化。
目前,我只知道使用print result.summary()
将结果(如下所示)打印到外壳:
Logit Regression Results
==============================================================================
Dep. Variable: death_death No. Observations: 9752
Model: Logit Df Residuals: 9747
Method: MLE Df Model: 4
Date: Wed, 22 May 2013 Pseudo R-squ.: -0.02672
Time: 22:15:05 Log-Likelihood: -5806.9
converged: True LL-Null: -5655.8
LLR p-value: 1.000
===============================================================================
coef std err z P>|z| [95.0% Conf. Int.]
-------------------------------------------------------------------------------
age_age5064 -0.1999 0.055 -3.619 0.000 -0.308 -0.092
age_age6574 -0.2553 0.053 -4.847 0.000 -0.359 -0.152
sex_female -0.2515 0.044 -5.765 0.000 -0.337 -0.166
stage_early -0.1838 0.041 -4.528 0.000 -0.263 -0.104
access -0.0102 0.001 -16.381 0.000 -0.011 -0.009
===============================================================================
我还需要赔率比,它是由print np.exp(result.params)
计算的,并打印在外壳中:
age_age5064 0.818842
age_age6574 0.774648
sex_female 0.777667
stage_early 0.832098
access 0.989859
dtype: float64
我需要的是将它们分别以非常长的行的形式写入到csv文件中(在这一点上,我不确定我是否需要像Log-Likelihood
这样的东西,但为了彻底起见,我已经将其包括在内):
`Log-Likelihood, age_age5064_coef, age_age5064_std_err, age_age5064_z, age_age5064_p>|z|,...age_age6574_coef, age_age6574_std_err, ......access_coef, access_std_err, ....age_age5064_odds_ratio, age_age6574_odds_ratio, ...sex_female_odds_ratio,.....access_odds_ratio`
我想你会看到这样的画面--一个非常长的行,包含所有这些实际值,还有一个标题,其中包含所有类似格式的列名称。
我熟悉Python语言中的csv module
,对pandas
也越来越熟悉。不确定这些信息是否可以格式化并存储在pandas dataframe
中,然后在所有大约2,900个逻辑回归模型完成后使用to_csv
写入文件;这当然可以。此外,在每个模型完成时编写它们也很好(使用csv module
)。
更新:
因此,我更多地关注了statsmodels站点,特别是试图弄清楚模型的结果是如何存储在类中的。看起来有一个叫做'Results‘的类,需要使用它。我认为使用这个类的继承来创建另一个类,其中一些方法/操作符被更改可能是可行的,以便获得我需要的格式。我在这方面的经验很少,需要花相当多的时间弄清楚(这很好)。如果有人能帮上忙/有更多的经验,那就太棒了!
下面是这些类的布局站点:statsmodels results class
发布于 2018-04-25 22:01:54
write_path = '/my/path/here/output.csv'
with open(write_path, 'w') as f:
f.write(result.summary().as_csv())
发布于 2016-04-21 09:06:02
我发现这个公式更简单一些。您可以通过遵循示例中的语法来添加/减去列(pvals、coeff、conf_lower、conf_higher)。
import pandas as pd #This can be left out if already present...
def results_summary_to_dataframe(results):
'''This takes the result of an statsmodel results table and transforms it into a dataframe'''
pvals = results.pvalues
coeff = results.params
conf_lower = results.conf_int()[0]
conf_higher = results.conf_int()[1]
results_df = pd.DataFrame({"pvals":pvals,
"coeff":coeff,
"conf_lower":conf_lower,
"conf_higher":conf_higher
})
#Reordering...
results_df = results_df[["coeff","pvals","conf_lower","conf_higher"]]
return results_df
发布于 2018-07-27 06:14:23
documentation here中实际上记录了一个内置方法:
f = open('csvfile.csv','w')
f.write(result.summary().as_csv())
f.close()
我相信这是一种将摘要输出到csv文件的更简单(也更干净)的方法。
https://stackoverflow.com/questions/16705598
复制相似问题