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_var
、level1_var
等相似。
[13]:
r.cov_struct.summary()
[13]:
變異數 | |
---|---|
groups_ix | 1.038792 |
level1_ix | 1.973529 |
level2_ix | 3.045533 |
殘差 | 4.000621 |
上次更新:2024 年 10 月 03 日