GEE ネスト共分散構造シミュレーション調査

このノートブックは GEE ネスト共分散構造のパフォーマンスを説明および評価するシミュレーション調査です。

ネスト共分散構造は、ネストされたグループまたは「レベル」のシーケンスに基づいています。階層の最上位レベルは、GEE の groups 引数によって定義されます。後のレベルは、GEE の dep_data 引数によって定義されます。

[1]:
import numpy as np
import pandas as pd
import statsmodels.api as sm

共変量の数を設定します。

[2]:
p = 5

これらのパラメーターは、各グループ化レベルの母集団分散を定義します。

[3]:
groups_var = 1
level1_var = 2
level2_var = 3
resid_var = 4

グループ数を設定します

[4]:
n_groups = 100

グループ化の各レベルでの観測値数を設定します。ここではすべてがバランスがとれています。つまり、各グループはレベル内で同じサイズです。

[5]:
group_size = 20
level1_size = 10
level2_size = 5

サンプルの全体数を計算します。

[6]:
n = n_groups * group_size * level1_size * level2_size

デザイン行列を構築します。

[7]:
xmat = np.random.normal(size=(n, p))

各観測値が各レベルで属するグループを示すラベルを構築します。

[8]:
groups_ix = np.kron(np.arange(n // group_size), np.ones(group_size)).astype(int)
level1_ix = np.kron(np.arange(n // level1_size), np.ones(level1_size)).astype(int)
level2_ix = np.kron(np.arange(n // level2_size), np.ones(level2_size)).astype(int)

ランダム効果をシミュレートします。

[9]:
groups_re = np.sqrt(groups_var) * np.random.normal(size=n // group_size)
level1_re = np.sqrt(level1_var) * np.random.normal(size=n // level1_size)
level2_re = np.sqrt(level2_var) * np.random.normal(size=n // level2_size)

応答変数をシミュレートします。

[10]:
y = groups_re[groups_ix] + level1_re[level1_ix] + level2_re[level2_ix]
y += np.sqrt(resid_var) * np.random.normal(size=n)

すべてをデータフレームに入れます。

[11]:
df = pd.DataFrame(xmat, columns=["x%d" % j for j in range(p)])
df["y"] = y + xmat[:, 0] - xmat[:, 3]
df["groups_ix"] = groups_ix
df["level1_ix"] = level1_ix
df["level2_ix"] = level2_ix

モデルを適合します。

[12]:
cs = sm.cov_struct.Nested()
dep_fml = "0 + level1_ix + level2_ix"
m = sm.GEE.from_formula(
    "y ~ x0 + x1 + x2 + x3 + x4",
    cov_struct=cs,
    dep_data=dep_fml,
    groups="groups_ix",
    data=df,
)
r = m.fit()

推定共分散パラメーターは、上で定義した groups_varlevel1_var などと同様である必要があります。

[13]:
r.cov_struct.summary()
[13]:
分散
groups_ix 1.038792
level1_ix 1.973529
level2_ix 3.045533
残差 4.000621

最後の更新: 2024 年 10 月 3 日