1 들어가며 — 5 구조의 마지막
Ch.7 Overview 의 자기상관 5 구조 중 앞의 4 개 — AR(1)·MA(1), ARMA(1,1)·Toeplitz — 는 모두 한 가지 공통 가정을 깔고 있다.
정상성 (stationarity): 분산이 시점 무관 + 같은 lag 의 상관이 시점 위치 무관.
이 가정이 합리적인 종단 데이터도 있지만, 현실에서는 시점 후반으로 갈수록 분산이 증가하는 패턴 (fan-out) 이 매우 흔하다. 임상 추적의 처치 반응이 누적되거나, 학습 곡선의 개인차가 시간 따라 벌어지는 경우.
NS-AR(1) (Non-Stationary AR(1)) 는 이 패턴을 자기상관 모형으로 표현한다.
정상 AR(1): “강이 평형 상태에서 흐른다 — 어느 지점에서 봐도 수위가 비슷.” NS-AR(1): “강이 발원지에서 흐름을 시작 — 처음에는 수위가 0, 시간 따라 점점 깊어짐.”
같은 점화식을 따르지만 출발 조건이 다르다. 정상 AR(1) 는 이미 평형에 있는 과정 의 단면, NS-AR(1) 는 출발부터 따라가는 과정.
1.1 5 구조 비교 표 (재정리)
| 구조 | 자유 모수 | 시점별 분산 | 핵심 가정 |
|---|---|---|---|
| AR(1) | 2 | 동일 (\(\sigma^2/(1-\rho^2)\)) | 정상성, 지수 감쇠 |
| MA(1) | 2 | 동일 (\((1+\theta^2)\sigma^2\)) | 정상성, lag-1 만 |
| ARMA(1,1) | 3 | 동일 | 정상성, lag-1 hump + 감쇠 |
| Toeplitz | \(n\) | 동일 (\(\sigma^2\)) | 정상성, lag 별 자유 |
| NS-AR(1) | 2 | 시간 따라 증가 | 비정상성, 분산 누적 |
NS-AR(1) 은 모수 수 (\(q=2\)) 는 AR(1) 와 같지만 분산 패턴이 본질적으로 다르다.
2 정상 AR(1) 의 한계 — 분산 동일 가정
§ 7.2.1 의 정상 AR(1) 분산 유도를 짧게 회상한다.
점화식: \(\varepsilon_j = \rho \varepsilon_{j-1} + \xi_j\), \(\xi_j \sim \mathcal{N}(0, \sigma^2)\).
분산: \(V(\varepsilon_j) = \rho^2 V(\varepsilon_{j-1}) + \sigma^2\).
정상성 가정 \(V(\varepsilon_j) = V(\varepsilon_{j-1}) \equiv \nu^2\) 대입:
\[ \nu^2 = \rho^2 \nu^2 + \sigma^2 \implies \nu^2 = \frac{\sigma^2}{1-\rho^2} \]
→ 모든 시점에서 분산이 일정한 값 \(\sigma^2/(1-\rho^2)\). 이는 암묵적으로 무한히 오래 흐른 과정 을 가정.
2.1 “이미 평형 상태” 가정의 비현실성
표준 종단 임상 시험을 생각하자.
- 환자 모집 후 baseline 측정 (Wk1) → 약물 시작 (Wk2~) → 추적 종료 (Wk6).
- 정상 AR(1) 가 가정하는 것: “Wk1 의 환자 상태가 이미 평형 분산 (\(\sigma^2/(1-\rho^2)\)) 에 있다.”
- 그러나 실제: 환자가 baseline 에서 막 측정 시작 → 분산은 점진적으로 누적되어야 자연스러움.
이런 상황에서 분산이 시점 후반에 증가하는 패턴 이 데이터에 나타남. Bock WPSS 데이터 의 SD: 1.30 → 1.65 (Wk1 → Wk6, 약 27% 증가) 가 그 예.
정상 AR(1) 는 이 패턴을 표현 자체가 불가능.
3 § 7.2.5 — NS-AR(1) 정의
3.1 출발 조건과 분산 누적
같은 점화식 \(V(\varepsilon_j) = \rho^2 V(\varepsilon_{j-1}) + \sigma^2\) (식 7.18, Mansour et al. 1985) 에서 정상성 대신 초기 조건 을 사용:
\[ V(\varepsilon_0) = 0 \]
→ 시점 0 (관측 시작 한 시점 전) 에서 분산이 0. 즉 새로 시작하는 과정.
이 조건으로 점화식을 풀면:
\[ V(\varepsilon_1) = \rho^2 \cdot 0 + \sigma^2 = \sigma^2 \]
\[ V(\varepsilon_2) = \rho^2 \sigma^2 + \sigma^2 = (1 + \rho^2)\sigma^2 \]
\[ V(\varepsilon_3) = \rho^2(1+\rho^2)\sigma^2 + \sigma^2 = (1 + \rho^2 + \rho^4)\sigma^2 \]
\[ V(\varepsilon_4) = (1 + \rho^2 + \rho^4 + \rho^6)\sigma^2 \]
일반 형태:
\[ V(\varepsilon_j) = \sigma^2 \sum_{k=0}^{j-1} \rho^{2k} \]
식의 형태 \(\sum_{k=0}^{j-1} \rho^{2k}\) 는 시점 \(j\) 까지 들어온 모든 새 잡음 \(\xi_j, \xi_{j-1}, \ldots, \xi_1\) 의 분산 기여 합.
\[ \varepsilon_j = \rho \varepsilon_{j-1} + \xi_j = \rho^2 \varepsilon_{j-2} + \rho \xi_{j-1} + \xi_j = \cdots = \sum_{k=0}^{j-1} \rho^k \xi_{j-k} \]
(초기 \(\varepsilon_0 = 0\) 가정으로 합 끝.)
분산:
\[ V(\varepsilon_j) = \sum_{k=0}^{j-1} \rho^{2k} V(\xi_{j-k}) = \sigma^2 \sum_{k=0}^{j-1} \rho^{2k} \]
→ 잡음이 시점마다 추가되며 누적. 시간이 길수록 누적 분산 증가.
정상 AR(1) 는 이 합이 무한대 (\(j \to \infty\)) 까지 가서 등비급수의 합 \(1/(1-\rho^2)\) 로 수렴 — 정상 분산이 그 결과.
3.2 정상 AR(1) 와의 점근 수렴
NS-AR(1) 분산:
\[ V(\varepsilon_j) = \sigma^2 \sum_{k=0}^{j-1} \rho^{2k} = \sigma^2 \cdot \frac{1 - \rho^{2j}}{1 - \rho^2} \]
(등비수열 \(j\) 항 합 공식.)
\(j \to \infty\):
\[ \lim_{j \to \infty} V(\varepsilon_j) = \frac{\sigma^2}{1 - \rho^2} \]
→ 정상 AR(1) 의 분산 과 정확히 일치.
| 모형 | 시점 1 분산 | 시점 \(j\) 분산 | \(j \to \infty\) |
|---|---|---|---|
| 정상 AR(1) | \(\sigma^2/(1-\rho^2)\) | \(\sigma^2/(1-\rho^2)\) | \(\sigma^2/(1-\rho^2)\) |
| NS-AR(1) | \(\sigma^2\) | \(\sigma^2 \frac{1-\rho^{2j}}{1-\rho^2}\) | \(\sigma^2/(1-\rho^2)\) |
두 모형은 같은 한계 분산 을 가지지만 도달 경로가 다르다. NS-AR(1) 는 출발부터 점근 수렴까지의 전체 곡선 을 표현.
\(\rho = 0.7\) 일 때 시점별 분산 곡선:
| 시점 \(j\) | \(\sum_{k=0}^{j-1} \rho^{2k}\) | NS-AR(1) 분산 / \(\sigma^2\) | 정상 분산까지 비율 |
|---|---|---|---|
| 1 | 1.000 | 1.000 | 51% |
| 3 | 1.490 | 1.490 | 76% |
| 5 | 1.730 | 1.730 | 88% |
| 10 | 1.928 | 1.928 | 98% |
| ∞ | 1.961 | 1.961 | 100% |
(정상 분산 = \(1/(1-0.49) = 1.961\).)
→ \(\rho\) 가 클수록 점근 수렴이 느림. \(\rho = 0.7\) 면 시점 5 에서 정상 분산의 88% 도달, \(\rho = 0.95\) 면 같은 수준 도달까지 시점 30 이상 필요.
3.3 공분산 형태
같은 식 \(\varepsilon_j = \sum_{k=0}^{j-1} \rho^k \xi_{j-k}\) 에서 공분산을 유도. 두 시점 \(j\) 와 \(j-s\) (\(s > 0\)):
\[ \text{Cov}(\varepsilon_j, \varepsilon_{j-s}) = \rho^s V(\varepsilon_{j-s}) = \rho^s \sigma^2 \sum_{k=0}^{j-s-1} \rho^{2k} \]
(자세한 유도는 점화식 반복 + \(\xi\) 들의 독립성 사용.)
정상 AR(1): \(\text{Cov}(\varepsilon_j, \varepsilon_{j-s}) = \rho^s \sigma^2/(1-\rho^2)\) — 시점 위치 무관, lag 만 결정.
NS-AR(1): \(\text{Cov}(\varepsilon_j, \varepsilon_{j-s}) = \rho^s V(\varepsilon_{j-s})\) — 시점 위치에 따라 다름 (\(V(\varepsilon_{j-s})\) 가 시점에 따라 변하므로).
→ NS-AR(1) 는 분산뿐 아니라 공분산도 시점에 따라 변동. Toeplitz 의 정상성도 깨는 더 일반적 구조.
3.4 분산-공분산 행렬 \(\Omega\)
식 (7.18) 다음의 일반 행렬 형태:
\[ \Omega = \begin{bmatrix} 1 & \rho & \rho^2 & \cdots & \rho^{n-1} \\ \rho & \rho(1+\rho^2) & \rho(1+\rho^2) & \cdots & \cdots \\ \rho^2 & \rho(1+\rho^2) & (1+\rho^2+\rho^4) & \cdots & \rho^{n-3}(1+\rho^2+\rho^4) \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \rho^{n-1} & \rho^{n-2}(1+\rho^2) & \rho^{n-3}(1+\rho^2+\rho^4) & \cdots & \sum_{j=0}^{n-1} \rho^{2j} \end{bmatrix} \]
(분산은 \(\sigma^2 \Omega\) 로 적용.)
- 모수: \(\sigma^2\) + \(\rho\) — 단 2 개 (정상 AR(1) 와 같음).
- 대각: 시점에 따라 단조 증가.
- 비대각: 시점에 따라 변동.
NS-AR(1) 의 우아함: 단 2 모수로 시점별 분산 변동 + 시점별 공분산 변동 모두 표현.
비교:
| 구조 | 시점별 분산 표현 | 모수 수 |
|---|---|---|
| AR(1) | X | 2 |
| Toeplitz | X (정상성) | \(n\) |
| UN | O | \(n(n+1)/2\) |
| NS-AR(1) | O | 2 |
UN 의 \(n(n+1)/2\) 와 비교하면 압도적 절약. fan-out 패턴이 데이터에 명확하면 NS-AR(1) 가 매우 효율적인 표현.
4 Cholesky 인수분해 — 식 (7.19)
4.1 정의와 형태
NS-AR(1) 행렬을 Cholesky factor 로 분해:
\[ \Upsilon = \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 \\ \rho & 1 & 0 & \cdots & 0 \\ \rho^2 & \rho & 1 & \cdots & 0 \\ \rho^3 & \rho^2 & \rho & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \rho^{n-1} & \rho^{n-2} & \rho^{n-3} & \cdots & 1 \end{bmatrix} \tag{7.19} \]
- 하삼각: 일반 AR(1) 형태 (\(\rho\) 의 거듭제곱).
- 상삼각: 모두 0.
- 대각: 모두 1.
\(\Upsilon\) 의 의미를 식 \(\varepsilon = \Upsilon \xi\) 로 보면 명확하다 (\(\xi\) 는 i.i.d. \(\mathcal{N}(0, \sigma^2)\) 잡음 벡터).
각 \(\varepsilon_j\) 가 \(\xi_1, \ldots, \xi_j\) 의 선형 결합:
\[ \varepsilon_1 = \xi_1 \]
\[ \varepsilon_2 = \rho \xi_1 + \xi_2 \]
\[ \varepsilon_3 = \rho^2 \xi_1 + \rho \xi_2 + \xi_3 \]
\[ \varepsilon_j = \sum_{k=0}^{j-1} \rho^{j-1-k} \xi_{k+1} = \sum_{k=0}^{j-1} \rho^k \xi_{j-k} \]
→ AR(1) 점화식의 명시적 풀이가 정확히 \(\Upsilon\) 의 행 형태.
Mansour et al. (1985) 의 통찰: 행렬 \(\Omega\) 자체보다 Cholesky factor \(\Upsilon\) 이 새 잡음의 누적 메커니즘 을 직접 보여준다.
4.2 ML 추정에서의 양정치 자동 보장
ML 추정에서 \(\Omega\) 가 양정치를 유지하지 않으면 우도 계산이 실패한다 (음의 분산, \(\det\Omega < 0\) 등).
NS-AR(1) 의 자유 모수가 (\(\sigma^2, \rho\)) 이므로 \(\Omega\) 가 양정치이려면 두 모수에 제약이 필요.
Cholesky 분해의 가치: \(\Omega = \Upsilon \Upsilon^\top\) 형태로 표현하면 \(\Upsilon\) 이 어떤 형태를 가지든 \(\Omega\) 가 자동 양정치 (\(\Upsilon \Upsilon^\top\) 는 항상 양반정치, 가역이면 양정치).
→ ML 추정에서 \(\Omega\) 의 모든 원소를 직접 추정하지 않고 \(\Upsilon\) 만 추정 → 양정치 제약이 자동 만족.
- 모수: \(\sigma^2, \rho\) 만.
- \(\Upsilon\) 구성: 식 (7.19) 에 \(\rho\) 대입.
- \(\Omega\) 구성: \(\Omega = \Upsilon \Upsilon^\top\).
- 우도 계산: 정규 분포 우도에 \(\sigma^2 \Omega\) 대입.
- 모수 갱신: 기울기 또는 EM 으로 \(\sigma^2, \rho\) 추정.
각 반복마다 \(\Omega\) 가 자동 양정치 → 수치적 안정성.
이 효율성이 NS-AR(1) 가 SAS PROC MIXED, MIXREG (Hedeker & Gibbons, 1996b) 등에서 표준 옵션으로 제공되는 이유.
4.3 \(\rho\) 의 범위 — 정상 AR(1) 와 차이
정상 AR(1): \(|\rho| < 1\) 강제 (정상성 분산 \(\sigma^2/(1-\rho^2)\) 가 양수이려면).
NS-AR(1): \(|\rho| < 1\) 가정 불필요 — Cholesky 분해 \(\Omega = \Upsilon \Upsilon^\top\) 가 \(\rho\) 의 어떤 값에 대해서도 양정치.
단 실용적 권장:
- \(|\rho| < 1\): 분산이 점근 수렴 (정상 AR(1) 의 분산까지). 임상 시나리오 표준.
- \(|\rho| = 1\): 분산이 무한 발산 (랜덤 워크). 자기상관이 영구 — 매우 드문 경우.
- \(|\rho| > 1\): 분산이 지수 폭발. 실제 데이터에서 거의 안 발생.
ML 추정: 보통 \(|\rho| < 1\) 범위에서 결과 나옴. 추정값이 1 에 가까우면 데이터가 비정상 (랜덤 워크) 패턴 → 차분 (differencing) 등 다른 모형 고려.
5 적합 시나리오 — 언제 NS-AR(1) 를 쓰나
NS-AR(1) 가 다른 4 구조 (정상 가정) 보다 적합한 데이터의 시그너처:
- 시점별 SD 단조 증가 — 잔차 SD 그림에서 시점 후반 명확히 증가.
- fan-out 패턴 — 시점 후반에 환자 별 곡선 분산이 커짐 (개인차 누적).
- 학습 곡선 데이터 — 학습이 진행될수록 개인차 발현.
- 처치 반응 누적 — 약물 효과의 분산이 시간 따라 발현 (반응자 vs 비반응자 구분).
- AR(1) LR 검정에서 적합도 부족 — 표준 AR(1) 가 데이터의 시점별 분산 변동 못 잡음.
Bock WPSS 데이터 의 SD 패턴 (1.20 → 1.54, 28% 증가) 이 fan-out 시그너처의 전형. UN 적합이 압도적이지만 NS-AR(1) 는 단 2 모수로 비슷한 패턴 표현 시도.
5.1 임상 해석의 가치
- \(\sigma^2\): 새 잡음의 단일 시점 분산 — 시점마다 들어오는 새로운 변동의 크기. 작을수록 환자 상태가 안정적.
- \(\rho\): lag-1 자기상관 — 어제 잡음의 기여도. 정상 AR(1) 와 같은 의미.
추정 결과 해석 예:
- \(\hat\sigma^2 = 0.5\), \(\hat\rho = 0.6\):
- 시점 1 분산 = 0.5, 시점 6 분산 = \(0.5 \cdot \sum_{k=0}^{5} 0.36^k \approx 0.78\).
- 28% 증가 패턴 (Bock WPSS 와 유사).
- \(\hat\rho \to 0\) 이면 NS 효과 없음 → 정상 모형으로 회귀.
6 한계와 다른 비정상 구조
6.1 NS-AR(1) 의 약점
| 한계 | 의미 |
|---|---|
| 분산이 단조 증가만 | 분산이 감소하거나 비단조면 부적합 |
| AR(1) 의 지수 감쇠 가정 유지 | lag 별 자유 패턴 못 표현 (Toeplitz 가 필요) |
| 단 1 모수 (\(\rho\)) 로 모든 lag 결정 | ARMA 의 lag-1 hump 표현 못함 |
| 등간격 가정 | 불등간격 시 continuous-time NS 필요 |
NS-AR(1) 는 정상성만 푼다 — 다른 가정 (지수 감쇠, 등간격 등) 은 그대로.
6.2 SAS PROC MIXED 의 추가 비정상 구조
Hedeker §6.5 Summary 가 언급하는 추가 구조 (Wolfinger 1993):
- CSH (Heterogeneous CS): CS 와 같지만 시점별 분산 자유.
- ARH(1): AR(1) 와 같지만 시점별 분산 자유 (= NS-AR(1) 과 유사).
- TOEPH: Toeplitz + 시점별 분산 자유.
- Antedependence: 더 일반적 비정상 구조.
이런 “이질 분산 (heterogeneous variance)” 변형이 NS-AR(1) 의 일반화. 본 sub-post 의 NS-AR(1) 는 가장 단순한 비정상 형태.
7 코드 예시
7.1 Step 1: NS-AR(1) 행렬과 Cholesky factor 구성
import numpy as np
def ns_ar1_cholesky(rho: float, n: int) -> np.ndarray:
"""NS-AR(1) Cholesky factor (식 7.19)
하삼각: rho 의 거듭제곱.
상삼각: 0.
"""
Upsilon = np.eye(n)
for j in range(n):
for k in range(j):
Upsilon[j, k] = rho ** (j - k)
return Upsilon
def ns_ar1_omega(rho: float, n: int) -> np.ndarray:
"""NS-AR(1) Omega = Upsilon Upsilon^T"""
U = ns_ar1_cholesky(rho, n)
return U @ U.T
# 비교: 정상 AR(1) vs NS-AR(1)
n = 6
rho = 0.7
print("NS-AR(1) Cholesky factor (rho=0.7):")
print(ns_ar1_cholesky(rho, n).round(3))
print("\nNS-AR(1) Omega:")
omega_ns = ns_ar1_omega(rho, n)
print(omega_ns.round(3))
# 정상 AR(1) 비교 — 분산이 sigma^2/(1-rho^2) 로 일정
def ar1_omega(rho: float, n: int) -> np.ndarray:
"""정상 AR(1) (시계열 표기, 식 7.13)"""
idx = np.arange(n)
lag = np.abs(idx[:, None] - idx[None, :])
return rho ** lag / (1 - rho ** 2)
print("\n정상 AR(1) Omega:")
print(ar1_omega(rho, n).round(3))
# 시점별 분산 비교
print("\nNS-AR(1) 시점별 분산:", np.diag(omega_ns).round(3))
print("정상 AR(1) 시점별 분산:", np.diag(ar1_omega(rho, n)).round(3))NS-AR(1) (\(\rho=0.7\)) 시점별 분산:
- 시점 1: \(1.000\)
- 시점 2: \(1 + 0.49 = 1.490\)
- 시점 3: \(1 + 0.49 + 0.2401 = 1.730\)
- 시점 4: \(1.730 + 0.49^3 \approx 1.847\)
- 시점 5: 1.928
- 시점 6: 1.961
정상 AR(1) 분산: 모든 시점 \(1/(1-0.49) = 1.961\).
시점 6 (마지막) 에서 NS-AR(1) 가 정상 AR(1) 와 거의 일치 — 점근 수렴 검증.
7.2 Step 2: 시점별 분산 곡선 시각화
import numpy as np
import matplotlib.pyplot as plt
def ns_ar1_var_curve(rho: float, n: int) -> np.ndarray:
"""NS-AR(1) 시점별 분산 (sigma^2 = 1 정규화)"""
return np.array([sum(rho ** (2 * k) for k in range(j + 1)) for j in range(n)])
n = 12
rhos = [0.3, 0.5, 0.7, 0.9]
plt.figure(figsize=(8, 5))
for rho in rhos:
var_curve = ns_ar1_var_curve(rho, n)
asymptotic = 1 / (1 - rho ** 2)
plt.plot(np.arange(1, n + 1), var_curve,
"o-", label=f"NS-AR(1) ρ={rho} (점근 {asymptotic:.2f})")
plt.axhline(asymptotic, linestyle="--", alpha=0.3, color=plt.gca().lines[-1].get_color())
plt.xlabel("시점 j")
plt.ylabel("Var(ε_j) / σ²")
plt.title("NS-AR(1) — 시점별 분산의 점근 수렴")
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()곡선들의 공통 패턴:
- 시점 1 에서 모두 1 (즉 \(\sigma^2\)).
- 시점 따라 점진 증가, 점선 (점근 분산) 으로 수렴.
- \(\rho\) 가 클수록 점근값 (\(1/(1-\rho^2)\)) 큼 + 수렴 속도 느림.
\(\rho = 0.3\): 시점 4 에서 거의 점근 도달 (변동 거의 없음). \(\rho = 0.9\): 시점 12 에서도 점근 약 70% — 매우 느린 수렴.
7.3 Step 3: R nlme 로 NS-AR(1) 적합
R nlme 의 표준 함수에는 NS-AR(1) 가 없다. SAS PROC MIXED 의 type=ARH(1) 또는 MIXREG 가 직접 지원.
# nlme 직접 지원 안 함 — varIdent 와 corAR1 결합으로 근사
library(nlme)
# 시점별 분산 자유 + AR(1) 상관 — 정상 AR(1) 변형 (ARH(1) 와 유사)
fit_arh1 <- lme(y ~ Linear + SlopeChange,
random = ~ Linear | subject,
correlation = corAR1(form = ~ week | subject),
weights = varIdent(form = ~ 1 | week),
data = bock,
method = "ML")
summary(fit_arh1)| 도구 | NS-AR(1) 지원 |
|---|---|
R nlme |
직접 지원 안 함 (ARH(1) 근사로 우회) |
| SAS PROC MIXED | type=ARH(1) 직접 지원 |
| MIXREG (Hedeker & Gibbons 1996b) | 직접 지원 (NS-AR(1) 의 출처) |
Python statsmodels |
지원 안 함 |
R/Python 환경에서 본격 NS-AR(1) 가 필요하면 SAS 또는 MIXREG 사용 권장.
7.4 Step 4: 시점별 SD 진단으로 NS-AR(1) 후보 식별
import numpy as np
import pandas as pd
def diagnose_variance_pattern(df: pd.DataFrame,
time_col: str,
y_col: str) -> pd.DataFrame:
"""시점별 SD 가 단조 증가하면 NS-AR(1) 후보"""
sd_by_time = df.groupby(time_col)[y_col].std()
n = len(sd_by_time)
# 단조 증가 검정
is_monotone = all(sd_by_time.iloc[i] <= sd_by_time.iloc[i + 1] for i in range(n - 1))
# 첫-마지막 SD 비율
sd_ratio = sd_by_time.iloc[-1] / sd_by_time.iloc[0]
return pd.DataFrame({
"시점": sd_by_time.index,
"SD": sd_by_time.values,
"is_monotone_increasing": is_monotone,
"sd_ratio_last_first": sd_ratio,
}).head()
# Bock WPSS 데이터 시뮬레이션 후 진단
np.random.seed(2026)
n_subj, n_time = 75, 6
sd_t = np.linspace(1.20, 1.54, n_time) # 시점별 SD 단조 증가
y = np.random.normal(0, sd_t[None, :], (n_subj, n_time))
df = pd.DataFrame({
"id": np.repeat(np.arange(n_subj), n_time),
"week": np.tile(np.arange(1, n_time + 1), n_subj),
"y": y.flatten(),
})
result = diagnose_variance_pattern(df, "week", "y")
print(result)is_monotone_increasing == True+sd_ratio_last_first > 1.2: NS-AR(1) 강력 후보.- 단조 증가 깨짐: 더 일반적 비정상 구조 (Antedependence) 또는 UN.
- 비율 ≈ 1: 정상 가정 합리적, AR(1) 또는 ARMA(1,1).
8 핵심 정리
- NS-AR(1) 동기: 정상 AR(1) 의 “이미 평형” 가정을 풀어 baseline 부터 시작하는 과정 모형화.
- 초기 조건: \(V(\varepsilon_0) = 0\) — 시점 0 에서 분산 0, 새 출발.
- 분산 누적 형태: \(V(\varepsilon_j) = \sigma^2 \sum_{k=0}^{j-1} \rho^{2k} = \sigma^2 (1-\rho^{2j})/(1-\rho^2)\).
- 점근 수렴: \(j \to \infty\) 에서 정상 AR(1) 의 분산 \(\sigma^2/(1-\rho^2)\) 로 수렴.
- 모수 절약성: 단 2 모수 (\(\sigma^2, \rho\)) 로 시점별 분산 변동 + 시점별 공분산 변동 모두 표현. UN (\(n(n+1)/2\)) 의 매우 절약적 대안.
- 공분산 형태: \(\text{Cov}(\varepsilon_j, \varepsilon_{j-s}) = \rho^s V(\varepsilon_{j-s})\) — 시점 위치에 따라 변동.
- Cholesky 분해: \(\Omega = \Upsilon\Upsilon^\top\), \(\Upsilon\) 의 하삼각이 일반 AR(1) 형태. ML 추정에서 자동 양정치 보장.
- \(\rho\) 범위: \(|\rho| < 1\) 가정 불필요 (Cholesky 가 항상 양정치). 단 실용적으로 \(|\rho| < 1\) 가 자연스러움.
- 적합 시나리오: 시점별 SD 단조 증가 (fan-out), 학습 곡선, 처치 반응 누적. Bock WPSS 데이터 패턴.
- 다음 단계: 단조 증가만 표현 가능. 더 일반적 비정상 → ARH(1), Antedependence 등 SAS 추가 구조.
NS-AR(1) 는 5 자기상관 구조의 마지막. 정상성 가정을 풀고 분산이 시간 따라 누적되는 fan-out 패턴을 단 2 모수로 표현하는 우아한 해결. Cholesky 인수분해의 양정치 자동 보장이 ML 추정의 효율성을 뒷받침.
9 Ch.7 § 7.2 마무리 — sub-post 시리즈 완성
본 sub-post 로 Ch.7 § 7.2 의 5 구조 sub-post 시리즈가 완성됐다.
| sub-post | 다룬 구조 | 핵심 |
|---|---|---|
| Ch.7 Overview | 5 구조 비교 + framework | “\(I \to \Omega\) 의 우아한 일반화” |
| § 7.2 통합 | 5 구조 한 페이지 | (참고용) |
| § 7.2.1-7.2.2 | AR(1), MA(1) | “지수 감쇠 vs hard cutoff” |
| § 7.2.3-7.2.4 | ARMA(1,1), Toeplitz | “lag-1 hump 결합 + lag 별 자유” |
| 이 포스트 | NS-AR(1) | “정상성 풀기 + 분산 누적” |
남은 것:
- § 7.3 모형 선택 — § 6.3 와 통합 가능 (LR·AIC 절차 공유).
- § 7.4 Bock 데이터 적합 sub-post — 작성 예정 (
07-5-mrm-ac-bock-example.qmd).
10 관련 주제
선행 지식
- Ch.7 Overview — MRM with AC errors — 5 구조 개요 + framework
- § 7.2.1-7.2.2 — AR(1)·MA(1) — 정상 AR(1) 분산 식 (7.10)
- § 7.2.3-7.2.4 — ARMA(1,1)·Toeplitz — 정상 5 구조의 마지막
- § 6.6 — Bock WPSS 예시 — fan-out 패턴의 데이터 사례
- § 4.5 — MRM 추정론 — ML 추정 일반론
관련
- § 7.2 통합 — 5 구조 — 모든 구조의 비교
- § 6.3 — 모형 선택 (CPM) — Ch.7 의 모형 선택과 공유
- § 6.2.5 — RE 구조 — 메커니즘 기반 분산 모형의 모태
후속 주제
- § 7.4 Bock 데이터 적합 (작성 예정) — Ch.7 케이스 스터디
- Ch.8 GEE — 비정규 marginal 모형
- Antedependence 구조 — 더 일반적 비정상 (SAS PROC MIXED 추가 옵션)
교재
- Hedeker, D. & Gibbons, R. D. (2006). Longitudinal Data Analysis, Wiley, Ch.7 §7.2.5 (pp. 120-121)
- Mansour, H., Nordheim, E. V. & Rutledge, J. J. (1985). “Maximum likelihood estimation of variance components in repeated measures designs assuming autoregressive errors”, Biometrics 41, 287-294 — NS-AR(1) 의 원전
- Hedeker, D. & Gibbons, R. D. (1996b). “MIXREG: A computer program for mixed-effects regression analysis with autocorrelated errors”, Computer Methods and Programs in Biomedicine 49, 229-252 — NS-AR(1) 구현
- Wolfinger, R. (1993). “Covariance structure selection in general mixed models”, Communications in Statistics 22, 1079-1106 — SAS PROC MIXED 의 ARH(1) 추가 구조
- Verbeke, G. & Molenberghs, G. (2000). Linear Mixed Models for Longitudinal Data, Springer — Cholesky 분해 ML 추정