Python で尤度比テストを実行する方法


尤度比検定では、 2 つのネストされた回帰モデルの適合度を比較します。

ネストされたモデルは、回帰モデル全体の予測子変数のサブセットを含む単なるモデルです。

たとえば、4 つの予測子変数を含む次の回帰モデルがあるとします。

Y = β 0 + β 1 × 1 + β 2 × 2 + β 3 × 3 + β 4 × 4 + ε

入れ子になったモデルの例は、元の予測子変数が 2 つだけある次のモデルです。

Y = β 0 + β 1 × 1 + β 2 × 2 + ε

これら 2 つのモデルが大きく異なるかどうかを判断するには、次の帰無仮説と対立仮説を使用する尤度比検定を実行できます。

H 0 :完全なモデルとネストされたモデルはデータに同様によく適合します。したがって、ネストされたモデルを使用する必要があります。

H A :完全なモデルは、入れ子になったモデルよりもはるかによくデータに適合します。したがって、完全なテンプレートを使用する必要があります。

検定のp 値が特定の有意レベル (例: 0.05) を下回っている場合、帰無仮説を棄却し、完全なモデルが大幅に良好な適合を提供すると結論付けることができます。

次のステップバイステップの例は、Python で尤度比テストを実行する方法を示しています。

ステップ 1: データをロードする

この例では、 mtcarsデータセットのデータを使用して、Python で次の 2 つの回帰モデルを近似する方法を示します。

フルモデル: mpg = β 0 + β 1利用可能 + β 2炭水化物 + β 3 hp + β 4シリンダー

モデル: mpg = β 0 + 利用可能な β 1 + β 2炭水化物

まず、データセットを読み込みます。

 from sklearn. linear_model import LinearRegression
import statsmodels. api as sm
import pandas as pd
import scipy

#define URL where dataset is located
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/mtcars.csv"

#read in data
data = pd. read_csv (url)

関連: Pandas で CSV ファイルを読み取る方法

ステップ 2: 回帰モデルを当てはめる

まず、完全なモデルを当てはめて、モデルの対数尤度を計算します。

 #define response variable
y1 = data['mpg']

#define predictor variables
x1 = data[['disp', 'carb', 'hp', 'cyl']]

#add constant to predictor variables
x1 = sm. add_constant (x1)

#fit regression model
full_model = sm. OLS (y1,x1). fit ()

#calculate log-likelihood of model
full_ll = full_model. llf

print (full_ll)

-77.55789711787898

次に、縮小モデルを当てはめて、モデルの対数尤度を計算します。

 #define response variable
y2 = data['mpg']

#define predictor variables
x2 = data[['disp', 'carb']]

#add constant to predictor variables
x2 = sm. add_constant (x2)

#fit regression model
reduced_model = sm. OLS (y2, x2). fit ()

#calculate log-likelihood of model
reduced_ll = reduced_model. llf

print (reduced_ll)

-78.60301334355185

ステップ 3: 対数尤度検定を実行する

次に、次のコードを使用して妥当性テストを実行します。

 #calculate likelihood ratio Chi-Squared test statistic
LR_statistic = -2 * (reduced_ll-full_ll)

print (LR_statistic)

2.0902324513457415

#calculate p-value of test statistic using 2 degrees of freedom
p_val = scipy. stats . chi2 . sf (LR_statistic, 2)

print (p_val)

0.35165094613502257

結果から、カイ二乗検定統計量は2.0902で、対応する p 値は0.3517であることがわかります。

この p 値は 0.05 未満ではないため、帰無仮説を棄却できません。

これは、完全なモデルとネストされたモデルがデータに同等によく適合することを意味します。したがって、完全なモデルに予測子変数を追加しても適合度が大幅に向上しないため、入れ子になったモデルを使用する必要があります。

したがって、最終的なモデルは次のようになります。

mpg = β 0 + 利用可能なβ 1 + β 2炭水化物

: p 値を計算するときに 2 自由度を使用しました。これは、2 つのモデル間で使用される予測変数の合計の差を表すためです。

追加リソース

次のチュートリアルでは、Python での回帰モデルの使用に関する追加情報を提供します。

Python の線形回帰の完全ガイド
Python で多項式回帰を実行する方法
Python でロジスティック回帰を実行する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です