Python 2.7 - statsmodels - 格式化和编写摘要输出

DMM*_*MML 10 python python-2.7 pandas statsmodels

我在Mac OSX Lion上使用pandas 0.11.0(数据处理)进行逻辑回归并statsmodels 0.4.3进行实际回归.

我将运行~2,900种不同的逻辑回归模型,需要将结果输出到csv文件并以特定方式格式化.

目前,我只知道做了print result.summary()哪些打印结果(如下)到shell:

 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
 ===============================================================================
Run Code Online (Sandbox Code Playgroud)

我还需要比值比,由比率计算print np.exp(result.params),并打印在shell中:

age_age5064    0.818842
age_age6574    0.774648
sex_female     0.777667
stage_early    0.832098
access         0.989859
dtype: float64
Run Code Online (Sandbox Code Playgroud)

我需要的是将这些文件以非常类似的形式写入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`
Run Code Online (Sandbox Code Playgroud)

我想你得到的图片 - 一个非常长的行,包含所有这些实际值,以及一个标题,所有列的名称都采用相似的格式.

我熟悉csv modulePython,并且越来越熟悉了pandas.不确定这些信息是否可以格式化并存储在一个pandas dataframe然后写入,to_csv一旦所有约2,900个逻辑回归模型完成,就使用文件; 那肯定会好的.此外,在每个模型完成时编写它们也很好(使用csv module).

更新:

所以,我更多地关注statsmodels网站,特别是试图弄清楚模型的结果是如何存储在类中的.看起来有一个名为'Results'的类,需要使用它.我认为使用这个类的继承来创建另一个类,其中一些方法/运算符被改变可能是要走的路,以获得我需要的格式.我在这方面的经验很少,并且需要花费相当多的时间来解决这个问题(这很好).如果有人可以帮助/有更多的经验,那将是非常棒的!

这是布置类的站点:statsmodels结果类

Jos*_*sef 8

目前没有预制的参数表及其结果统计数据.

基本上你需要自己堆叠所有结果,无论是在列表,numpy数组还是pandas中DataFrame取决于什么对你更方便.

例如,如果我想要一个具有模型结果的numpy数组,llf并在summary参数表中生成结果,那么我可以使用

res_all = []
for res in results:
    low, upp = res.confint().T   # unpack columns 
    res_all.append(numpy.concatenate(([res.llf], res.params, res.tvalues, res.pvalues, 
                   low, upp)))
Run Code Online (Sandbox Code Playgroud)

但是,与大熊猫对齐可能会更好,具体取决于您在模型中的结构.

您可以编写一个辅助函数,该函数从结果实例中获取所有结果并将它们连接起来.

(我不确定按行写csv最方便的是什么)

编辑:

以下是将回归结果存储在数据框中的示例

https://github.com/statsmodels/statsmodels/blob/master/statsmodels/sandbox/multilinear.py#L21

循环在第159行.

summary()和statsmodels之外的类似代码,例如http://johnbeieler.org/py_apsrtable/,用于组合多个结果,面向打印而不是存储变量.


swu*_*wu4 5

write_path = '/my/path/here/output.csv'
with open(write_path, 'w') as f:
    f.write(result.summary().as_csv())
Run Code Online (Sandbox Code Playgroud)

  • 请为您的回答提供一些背景信息。仅靠代码几乎永远无法得到好的答案 (2认同)