Python 2.7 - statsmodels - formatando e escrevendo a saída de resumo
Eu estou fazendo regressão logística usandopandas 0.11.0
(manipulação de dados) estatsmodels 0.4.3
para fazer a regressão real, no Mac OSX Lion.
Eu vou estar executando ~ 2.900 modelos de regressão logística diferentes e preciso da saída dos resultados para o arquivo csv e formatado de uma maneira particular.
Atualmente, só estou ciente de fazerprint result.summary()
que imprime os resultados (como segue) para o 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
===============================================================================
Eu também precisarei do odds ratio, que é calculado porprint np.exp(result.params)
e é impresso no shell como tal:
age_age5064 0.818842
age_age6574 0.774648
sex_female 0.777667
stage_early 0.832098
access 0.989859
dtype: float64
O que eu preciso é que cada um seja escrito em um arquivo csv em forma de uma linha muito longa como (não tenho certeza, neste momento, se eu vou precisar de coisas comoLog-Likelihood
, mas incluiu por uma questão de meticulosidade):
`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`
Eu acho que você começa a foto - uma linha muito longa, com todos esses valores reais, e um cabeçalho com todas as designações de coluna em um formato similar.
Estou familiarizado com ocsv module
em Python, e estou me tornando mais familiarizado compandas
. Não tenho certeza se essa informação pode ser formatada e armazenada em umpandas dataframe
e depois escrito, usandoto_csv
para um arquivo uma vez que todos os 2.900 modelos de regressão logística tenham sido concluídos; isso certamente estaria bem. Além disso, escrevê-los como cada modelo é concluído também é bom (usandocsv module
).
ATUALIZAR:
Então, eu estava procurando mais no site statsmodels, especificamente tentando descobrir como os resultados de um modelo são armazenados dentro das classes. Parece que existe uma classe chamada 'Resultados', que precisará ser usada. Eu acho que usar a herança dessa classe para criar outra classe, onde alguns dos métodos / operadores são alterados, pode ser o caminho a percorrer, a fim de obter a formatação que eu preciso. Eu tenho muito pouca experiência nas maneiras de fazer isso, e preciso gastar um pouco de tempo para descobrir isso (o que é bom). Se alguém pode ajudar / tem mais experiência que seria incrível!
Aqui está o site onde as classes são apresentadas:classe de resultados statsmodels