tidy, tidy_mfx
線形モデルの推定結果を DataFrame に集約
概要
tidy() はR言語の broom::tidy() をオマージュした関数で、sm.ols() や smf.logit() などの推定結果を pands.DataFrame に変換します。py4stats.tidy() は回帰係数と関連する検定結果を表示し、 py4stats.tidy_mfx() は限界効果と関連する検定結果を表示します。
tidy(
x,
name_of_term = None,
conf_level = 0.95,
**kwargs
)
tidy_mfx(
x,
at = 'overall',
method = 'dydx',
dummy = False,
conf_level = 0.95,
**kwargs
)引数 Argument
x(必須)
sm.ols()もしくはsmf.logit()などで作成された分析結果のオブジェクト。name_of_term:list of str
term列(index) として表示する説明変数の名前のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。conf_level:float
信頼区間の計算に用いる信頼係数。at:限界効果の集計方法(tidy_mfx()のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff()メソッドに引数atとして渡されます。method = 'coef'を指定した場合、この引数は無視されます。'overall':各観測値の限界効果の平均値を表示(初期設定)'mean':各説明変数の平均値における限界効果を表示'median':各説明変数の中央値における限界効果を表示'zero':各説明変数の値がゼロであるときの限界効果を表示
method:推定する限界効果の種類(tidy_mfx()のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff()メソッドに引数methodとして渡されます。ただし、method = 'coef'を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。'coef':回帰係数の推定値を表示'dydx':限界効果の値を変換なしでそのまま表。(初期設定)'eyex':弾力性 d(ln y)/d(ln x) の推定値を表示'dyex':準弾力性 dy /d(ln x) の推定値を表示'eydx':準弾力性 d(ln y)/dx の推定値を表示
dummy:ダミー変数の限界効果の推定方法(tidy_mfx()のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff()メソッドに引数dummyとして渡されます。
返り値 Value
次の列を含む pands.DataFrame が出力されます。
term(index)
説明変数の名称estimate
回帰係数(tidy()の場合)、もしくは限界効果(tidy_mfx()の場合)の推定値std_err
推定値estimateの標準誤差statistics
estimate = 0を帰無仮説とする仮説検定の標本検定統計量。xに代入されたモデルがsm.ols()によって作成されたものであれば \(t\) 統計量が表示され、sm.glm()によって作成されたものであれば \(z\) 統計量が表示されます。p_value
estimate = 0を帰無仮説とする両側検定の標本p-値conf_lower
信頼区間の下側信頼限界conf_higher
信頼区間の上側信頼限界
使用例 Examples
import pandas as pd
import numpy as np
from palmerpenguins import load_penguins
import statsmodels.formula.api as smf
import py4stats as py4st
penguins = load_penguins() # サンプルデータの読み込み# 回帰分析の実行
fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
print(py4st.tidy(fit1).round(4))
#> estimate std_err statistics p_value conf_lower conf_higher
#> term
#> Intercept 153.7397 268.9012 0.5717 0.5679 -375.1910 682.6704
#> species[T.Chinstrap] -885.8121 88.2502 -10.0375 0.0000 -1059.4008 -712.2234
#> species[T.Gentoo] 578.6292 75.3623 7.6780 0.0000 430.3909 726.8674
#> bill_length_mm 91.4358 6.8871 13.2764 0.0000 77.8888 104.9828penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
# ロジスティック回帰の実行
fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
print(py4st.tidy_mfx(fit_logit1).round(4))
#> estimate std_err statistics p_value conf_lower conf_higher
#> body_mass_g -0.0004 0.0000 -17.6561 0.0000 -0.0004 -0.0003
#> bill_length_mm -0.0053 0.0036 -1.4628 0.1435 -0.0123 0.0018
#> bill_depth_mm -0.1490 0.0051 -29.1681 0.0000 -0.1591 -0.1390注意点
参考にしたR言語の broom::tidy() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4stats.tidy() と py4stats.tidy_mfx() では対応しているモデルが限定的であることにご注意ください。py4st.tidy() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。
import py4stats as py4st
list(py4st.tidy.registry.keys())py4stats.tidy() は functools.singledispatch を用いたジェネリック関数として実装しています。 Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト用のメソッドについては heckit_helper.tidy_heckit() を参照してください。