<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Statistics |</title><link>https://chaeniverse.github.io/tags/statistics/</link><atom:link href="https://chaeniverse.github.io/tags/statistics/index.xml" rel="self" type="application/rss+xml"/><description>Statistics</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Tue, 26 Aug 2025 00:00:00 +0000</lastBuildDate><image><url>https://chaeniverse.github.io/media/icon_hu_da05098ef60dc2e7.png</url><title>Statistics</title><link>https://chaeniverse.github.io/tags/statistics/</link></image><item><title>Causal Inference: PSM, IPTW, CCW, Target Trial Emulation</title><link>https://chaeniverse.github.io/blog/causal-inference/</link><pubDate>Tue, 26 Aug 2025 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/causal-inference/</guid><description>&lt;h2 id="왜-인과추론이-필요한가"&gt;왜 인과추론이 필요한가&lt;/h2&gt;
&lt;p&gt;후향적 연구 (registry data, 건강보험·심평원 청구 데이터 등) 는 RCT처럼 미리 정의된 조건으로 데이터를 수집한 게 아니다. &lt;strong&gt;bias가 존재할 수밖에 없다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;예) 새로운 약 효과를 보기 위해 두 그룹 (약 먹은 vs 안 먹은) 비교.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;임상시험&lt;/strong&gt;: randomization으로 baseline 통제 → 순수한 약 효과 (causal effect).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;후향적 연구&lt;/strong&gt;: 이미 모인 데이터 → 두 그룹의 baseline이 다를 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ &lt;strong&gt;요는, 후향적 연구를 통계 기법으로 최대한 임상시험처럼 셋팅하는 것.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="카운터팩추얼-프레임"&gt;카운터팩추얼 프레임&lt;/h2&gt;
&lt;p&gt;각 개인에게 두 개의 잠재적 결과가 있다고 가정:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$Y^{a=1}$ : &amp;ldquo;&lt;strong&gt;약을 먹었다면&lt;/strong&gt;&amp;rdquo; 의 결과&lt;/li&gt;
&lt;li&gt;$Y^{a=0}$ : &amp;ldquo;&lt;strong&gt;약을 먹지 않았다면&lt;/strong&gt;&amp;rdquo; 의 결과&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;진짜 인과효과는 $E[Y^{a=1}] - E[Y^{a=0}]$ — &lt;strong&gt;평행세계의 약 먹은 나 vs. 평행세계의 약 안 먹은 나&lt;/strong&gt; 의 차이.&lt;/p&gt;
&lt;p&gt;문제: 한 사람에게 한쪽만 관측됨. 그래서&lt;/p&gt;
$$E[Y^{a=1}] = E[Y \mid A=1] \quad \text{(?)}$$&lt;p&gt;&lt;strong&gt;이 등식이 성립하려면 가정이 필요하다.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="조건부-독립-strongly-ignorable-assignment"&gt;조건부 독립 (Strongly Ignorable Assignment)&lt;/h3&gt;
$$Y^a \perp A \mid X$$
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;모든 confounder $X$ 가 주어졌을 때, 잠재적 결과 $Y^a$ 와 treatment 배정 $A$ 가 독립&lt;/strong&gt;이라는 가정.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;이게 성립하면&lt;/p&gt;
$$E[Y^{a=1}] = E[Y \mid A=1, X = x_0] \cdot \text{(for any specific } x_0\text{)}$$&lt;p&gt;그리고 marginalization으로&lt;/p&gt;
$$E[Y^{a=1}] = \sum_x E[Y \mid A=1, X=x]\, P(X=x)$$&lt;p&gt;즉, &lt;strong&gt;공변량 $X$ 가 충분히 주어지면 인과효과를 추정할 수 있다.&lt;/strong&gt; 이 marginalization을 통계 기법으로 풀어내는 게 &lt;strong&gt;PS / IPTW&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="ate-vs-att--무엇을-추정할-것인가"&gt;ATE vs ATT — 무엇을 추정할 것인가&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;추정량&lt;/th&gt;
&lt;th&gt;정의&lt;/th&gt;
&lt;th&gt;누가 쓰나&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ATE&lt;/strong&gt; (Average Treatment Effect)&lt;/td&gt;
&lt;td&gt;$E[Y^{a=1}] - E[Y^{a=0}]$&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;IPTW&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ATT&lt;/strong&gt; (Average Treatment effect on the Treated)&lt;/td&gt;
&lt;td&gt;$E[Y^{a=1} - Y^{a=0} \mid A=1]$&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;PSM (matching)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;매칭은 treated 군에 untreated 자료를 짝지어 가져오므로, &lt;strong&gt;treated 군에 한정된 효과&lt;/strong&gt;만 정확히 본다 → ATT.&lt;/p&gt;
&lt;p&gt;ATT의 해석은 까다롭다 — 일반적으로 &lt;strong&gt;정책 평가&lt;/strong&gt;처럼 &amp;ldquo;정책 시행군 전체에 대한 효과&amp;quot;를 보고 싶을 때 사용된다 (정책 시행 후엔 모두가 시행군이라 ATT가 자연스러움).&lt;/p&gt;
&lt;p&gt;IPTW는 전체 모집단에 대한 효과 (ATE) 를 직접 추정 → &lt;strong&gt;인과효과로 해석하기 가장 쉽다&lt;/strong&gt;. 최근 임상연구의 흐름은 매칭보다 &lt;strong&gt;IPTW로 점점 이동&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="기존-회귀adjusted-vs-인과추론"&gt;기존 회귀(Adjusted) vs 인과추론&lt;/h2&gt;
&lt;p&gt;회귀모형에 그냥 공변량을 다 넣어 보정하는 흔한 방법:&lt;/p&gt;
$$\text{lm}(y \sim a + x)$$&lt;p&gt;이때 회귀 계수는&lt;/p&gt;
$$E[Y \mid A=1, X] - E[Y \mid A=0, X]$$&lt;p&gt;이고, 보고 표기는 &lt;strong&gt;Adjusted risk ratio / Adjusted HR&lt;/strong&gt; 등.&lt;/p&gt;
&lt;p&gt;문제점:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;공변량 $X$ 가 &lt;strong&gt;conditioning 된 상태에서의 효과&lt;/strong&gt; — &amp;ldquo;성별·연령이 고정된 채 약 변수만 1 증가했을 때 효과&amp;rdquo; 라는 의미.&lt;/li&gt;
&lt;li&gt;진짜 약효 (marginal causal effect) 와 해석이 다름.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;용어 구분:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conditional model&lt;/strong&gt; — 공변량을 모형 안에 넣어 보정 (회귀의 표준)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Marginal model&lt;/strong&gt; — weight를 주어 보정 (IPTW + univariate)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ 임상 논문 읽을 때 conditional/marginal HR 구분이 중요.&lt;/p&gt;
&lt;h2 id="crude-vs-causal"&gt;Crude vs Causal&lt;/h2&gt;
&lt;p&gt;매칭 후 단순 비교:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;coxph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Surv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;matched_df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;→ 매칭으로 균형이 맞춰졌으니 결과는 단순 crude HR이 아니라 &lt;strong&gt;causal HR&lt;/strong&gt; 로 부를 수 있다.&lt;/p&gt;
&lt;p&gt;매칭 안 한 raw 비교는 &lt;strong&gt;crude HR&lt;/strong&gt;. 이 둘을 구분해서 보고하는 게 좋다.&lt;/p&gt;
&lt;h2 id="propensity-score-matching-psm"&gt;Propensity Score Matching (PSM)&lt;/h2&gt;
&lt;p&gt;공변량이 비슷한 사람끼리 두 그룹 간 짝지어 분석.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;propensity score&lt;/strong&gt; $P(A=1 \mid X)$ 를 logistic regression으로 추정.&lt;/li&gt;
&lt;li&gt;점수가 비슷한 treated/untreated 짝을 매칭.&lt;/li&gt;
&lt;li&gt;모든 case가 1:1로 맞춰진 후엔 단순 비교 (&lt;code&gt;coxph(Y ~ A)&lt;/code&gt;) 가 곧 인과 효과 추정.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;단점:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$n$ 수가 줄어든다 (짝 안 맞는 케이스 제거).&lt;/li&gt;
&lt;li&gt;매칭 결과 자체가 진짜 causal effect인지 약간 애매할 수 있음 (causal risk difference).&lt;/li&gt;
&lt;li&gt;treated 기준이라 ATT 추정.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;임상 국룰&lt;/strong&gt;: greedy matching (1:1 nearest matching) + caliper.&lt;/p&gt;
&lt;h2 id="iptw-inverse-probability-of-treatment-weighting"&gt;IPTW (Inverse Probability of Treatment Weighting)&lt;/h2&gt;
&lt;p&gt;매칭의 반대. 짝짓는 대신 &lt;strong&gt;weight를 주어&lt;/strong&gt; balance를 맞춘다.&lt;/p&gt;
&lt;p&gt;직관: 남자 3명, 여자 6명 → 남자에 weight 2를 주면 6:6. 이 weight 2 가 곧 $1/P(A=1 \mid X)$.&lt;/p&gt;
$$w_i = \frac{1}{P(A_i=1 \mid X_i)}$$&lt;p&gt;이 weight를 분석에 넣으면 &lt;strong&gt;단변량 회귀로도 인과효과&lt;/strong&gt;를 얻는다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;coxph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Surv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weights&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;장점:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$n$ 수 유지.&lt;/li&gt;
&lt;li&gt;ATE 직접 추정.&lt;/li&gt;
&lt;li&gt;인과효과 해석이 가장 쉽다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="weight의-직관"&gt;Weight의 직관&lt;/h3&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;ID 1번이 weight 2로 들어갔다 = 그 사람을 &lt;strong&gt;2명으로 복제&lt;/strong&gt;했다고 생각하면 됨.&lt;/p&gt;
&lt;p&gt;실제로 표본 수가 늘어나는 게 아니라 cox 점수에 weight를 곱하는 형태로 처리.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;소수점 weight도 같은 직관.&lt;/p&gt;
&lt;h2 id="r-구현-흐름"&gt;R 구현 흐름&lt;/h2&gt;
&lt;p&gt;PSM도 IPTW도 출발점은 같다 — propensity score 추정:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;sex&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;comorbidities&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;family&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;binomial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;logit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;이 확률값으로 짝지으면 → &lt;strong&gt;PSM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;이 확률의 역수를 weight로 쓰면 → &lt;strong&gt;IPTW&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="stabilized-weight--truncation-실무-국룰"&gt;Stabilized Weight + Truncation (실무 국룰)&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&amp;ldquo;stabilized 넣고 weight truncation까지 하는 건 국룰이다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="왜-stabilized"&gt;왜 stabilized?&lt;/h3&gt;
&lt;p&gt;극단적인 표본 비대칭에서 weight가 폭발한다. 예: 남자 3명, 여자 30만명 → 남자 weight가 십만 단위. &lt;code&gt;glm&lt;/code&gt;이 안 돌아가고, 운 나쁘게 그 3명 중에 사건이 몰리면 분석이 왜곡된다.&lt;/p&gt;
&lt;p&gt;해결: &lt;strong&gt;분자에 marginal probability&lt;/strong&gt; 를 곱해 weight를 안정화.&lt;/p&gt;
$$w_i^{\text{stab}} = \frac{P(A_i=a)}{P(A_i=a \mid X_i)}$$&lt;ul&gt;
&lt;li&gt;결과에 영향을 주지 않으면서 분산을 안정화.&lt;/li&gt;
&lt;li&gt;weight의 평균이 1 → &lt;strong&gt;표본 수가 유지된다.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="왜-truncation"&gt;왜 truncation?&lt;/h3&gt;
&lt;p&gt;stabilized 후에도 극단적으로 큰 weight 케이스가 남는다. 다변량 공변량에서 특정 조합이 매우 드문 경우 (예: 20대 + 특정 질환 + 특정 약 동반).&lt;/p&gt;
&lt;p&gt;해결: &lt;strong&gt;99% percentile (또는 1% 양쪽 자르기)&lt;/strong&gt; 위 weight를 cap.&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&amp;ldquo;weight 4의 99% percentile, 100%가 32라고 하면 → 32 같은 outlier를 4로 바꾼다. 99% 이상은 다 4 4 4 …&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;논문 인용은 &lt;strong&gt;Peter Austin&lt;/strong&gt; 의 stabilization / truncation 원논문이 보통.&lt;/p&gt;
&lt;p&gt;R에선 보통 함수로 묶음 (&lt;code&gt;get_sw(formula, data, trunc_cut = 0.01)&lt;/code&gt; 같은 형태).&lt;/p&gt;
&lt;h2 id="cbps-covariate-balancing-propensity-score"&gt;CBPS (Covariate Balancing Propensity Score)&lt;/h2&gt;
&lt;p&gt;기본 IPTW로 balance가 안 맞을 때, balance를 명시적으로 maximize하도록 PS를 추정하는 변종 (GMM 기반).&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;실무 의견: &amp;ldquo;&lt;strong&gt;거의 안 쓴다.&lt;/strong&gt;&amp;rdquo; JAMA 등 임상 저널 게재 사례가 적고, reviewer 설득이 까다롭다. 정책학에서는 종종 사용.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;대신 우리는 &lt;strong&gt;interaction term을 하나씩 넣어가며&lt;/strong&gt; balance를 맞춘다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 기본&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="n"&gt;x1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# balance 안 맞으면&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;glm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="n"&gt;x1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;I&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x1^2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;x2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;연속형 변수 제곱항, 변수 간 interaction을 시도해 SMD가 떨어질 때까지 조정.&lt;/p&gt;
&lt;h2 id="balance-check"&gt;Balance Check&lt;/h2&gt;
&lt;p&gt;매칭/가중 결과가 잘 맞았는지 확인하는 진단:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SMD (Standardized Mean Difference)&lt;/strong&gt; $&lt; 0.1$ — 균형 OK&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Love plot&lt;/strong&gt; — 변수별 SMD를 시각화 (matching/weighting 전·후 비교)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="robust-sandwich-estimator-매칭가중의-짝꿍"&gt;Robust Sandwich Estimator (매칭/가중의 짝꿍)&lt;/h2&gt;
&lt;p&gt;PSM, IPTW를 적용하면 신뢰구간이 인위적으로 줄어들어 &lt;strong&gt;p-value가 유의하게 잘못 나올 수 있다.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;원래 분산 공식은 어떤 역행렬 가정에 기반함.&lt;/li&gt;
&lt;li&gt;weight를 쓰면 그 가정이 깨지므로 &lt;strong&gt;분산이 과소추정&lt;/strong&gt;된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;해결: &lt;strong&gt;robust sandwich estimator&lt;/strong&gt; — 분산 식이 $I S I$ 모양 (한 항이 더 추가). 이름의 유래는 그 모양.&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;매칭/가중 ↔ Robust estimator&lt;/strong&gt; 짝꿍처럼 기억.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;추가 분석에서 robust estimator로 바꿨다가 결과가 뒤집히는 사례가 있어 반드시 같이 써야 함.&lt;/p&gt;
&lt;h2 id="hr-vs-risk-difference-ratio"&gt;HR vs Risk Difference Ratio&lt;/h2&gt;
&lt;p&gt;전통적으로 생존분석은 hazard ratio (HR) 만 보고했지만, 최근 trend는 &lt;strong&gt;HR + risk difference / risk ratio&lt;/strong&gt; 를 같이 보는 것.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HR은 proportional hazard 가정에 의존 → 가정 위배 시 해석 위험.&lt;/li&gt;
&lt;li&gt;Risk Ratio는 cumulative incidence curve의 각 시점에서의 risk를 비교 → 가정 더 자유로움.&lt;/li&gt;
&lt;li&gt;Time-specific hazard는 시간에 따라 위험이 변하지만, proportional hazard ratio는 그 평균 한 값으로 보고 → &lt;strong&gt;해석 모호&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="immortal-time-bias"&gt;Immortal Time Bias&lt;/h2&gt;
&lt;p&gt;치료군 vs 비치료군 비교 시 &lt;strong&gt;index date를 어떻게 잡느냐&lt;/strong&gt; 가 핵심.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;치료군의 index date = 치료 시점 → 그 시점까지 사망하지 않은 사람만 치료군에 들어감.&lt;/li&gt;
&lt;li&gt;비치료군은 그런 비대칭이 없음.&lt;/li&gt;
&lt;li&gt;결과적으로 치료군에 &amp;ldquo;사망하지 않을 운명&amp;rdquo; 의 시간(immortal time)이 부여됨 → bias.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;전통적 보정: &lt;strong&gt;landmark analysis&lt;/strong&gt; (landmark 이전 사망자 제외).&lt;/p&gt;
&lt;p&gt;문제:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;전체 모집단이 아니라 &amp;ldquo;landmark까지 살아남은 사람&amp;rdquo; 만의 효과 → &lt;strong&gt;selection bias&lt;/strong&gt;, 해석 어려움.&lt;/li&gt;
&lt;li&gt;Time-varying Cox 등 보조 도구가 필요해짐.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="clone-censor-weighting-ccw"&gt;Clone Censor Weighting (CCW)&lt;/h2&gt;
&lt;p&gt;최신 흐름. 한 사람을 &lt;strong&gt;양쪽 그룹에 복제&lt;/strong&gt;해 immortal time bias를 원천 제거한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A라는 사람이 90일째 treatment 받았다고 하자 → 그 사람은 90일까지 안 죽었다.&lt;/li&gt;
&lt;li&gt;Control 군에도 똑같은 가상의 사람을 0~90일까지 만든다.&lt;/li&gt;
&lt;li&gt;두 쪽이 동일한 0~90일을 가지므로 immortal time이 상쇄됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;장점:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Landmark 없이 immortal time bias 해결.&lt;/li&gt;
&lt;li&gt;같은 사람을 만들기 때문에 covariate balance도 자동 해결.&lt;/li&gt;
&lt;li&gt;매칭/IPTW 없이도 분석 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;단점:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cloning된 자료 만드는 과정이 복잡 (경우의 수 많음).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CCW를 쓰면 IPCW (Inverse Probability of Censoring Weighting)&lt;/strong&gt; 가 필수 짝꿍.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="인과추론-방법-계층-trend"&gt;인과추론 방법 계층 (Trend)&lt;/h2&gt;
&lt;p&gt;분석의 중요도에 따라 방법이 점진적으로 강해진다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;가벼운 분석 매칭 (PSM)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; IPTW
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;중요한 분석 CCW + IPCW
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Target Trial Emulation (전체 framework)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;→ 중요한 분석에서는 &amp;ldquo;&lt;strong&gt;우리는 모든 bias를 제거했다&lt;/strong&gt;&amp;rdquo; 라고 method에 기술할 수 있을 정도까지 간다.&lt;/p&gt;
&lt;h2 id="target-trial-emulation-tte"&gt;Target Trial Emulation (TTE)&lt;/h2&gt;
&lt;p&gt;상위 framework. 임상시험 protocol처럼 &lt;strong&gt;연구 설계 시 조작적 정의를 엄격하게 명시&lt;/strong&gt;하는 일련의 과정을 정형화. PRISMA가 메타분석 reporting을 정형화한 것처럼, TTE는 후향적 인과추론의 reporting/설계 standard.&lt;/p&gt;
&lt;p&gt;명시 항목:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Eligibility criteria&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Treatment strategies&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assignment procedure&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Outcome / Follow-up&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Causal contrast&lt;/strong&gt; (intention-to-treat / per-protocol)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Statistical analysis&lt;/strong&gt; plan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ TTE는 잘 구조화된 retrospective data 분석을 위한 framework. 위에서 다룬 PSM/IPTW/CCW를 &lt;strong&gt;어떻게 조합해 protocol을 설계할지&lt;/strong&gt;를 다룬다.&lt;/p&gt;
&lt;h2 id="요약"&gt;요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;인과추론의 출발점: &lt;strong&gt;카운터팩추얼 프레임 + 조건부 독립 가정&lt;/strong&gt; ($Y^a \perp A \mid X$)&lt;/li&gt;
&lt;li&gt;$X$ 를 통계 기법으로 처리하는 핵심 도구: &lt;strong&gt;PSM (ATT)&lt;/strong&gt; 과 &lt;strong&gt;IPTW (ATE)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;IPTW는 &lt;strong&gt;stabilized + truncation&lt;/strong&gt; 가 실무 국룰&lt;/li&gt;
&lt;li&gt;매칭/가중 후엔 &lt;strong&gt;robust sandwich estimator&lt;/strong&gt; 필수 짝꿍&lt;/li&gt;
&lt;li&gt;모형 안에 공변량 → conditional, weight로 보정 → marginal&lt;/li&gt;
&lt;li&gt;Balance 진단: SMD &amp;lt; 0.1, love plot&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Immortal time bias&lt;/strong&gt; 는 landmark가 전통 해법, 최근엔 &lt;strong&gt;CCW (+ IPCW)&lt;/strong&gt; 가 부상&lt;/li&gt;
&lt;li&gt;전체를 framework로 정형화한 게 &lt;strong&gt;Target Trial Emulation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;임상 trend: HR 단독 → HR + Risk Difference / Risk Ratio&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Survival Analysis: Exposure Period, Immortal Time Bias, Fine-and-Gray</title><link>https://chaeniverse.github.io/blog/survival-analysis/</link><pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/survival-analysis/</guid><description>&lt;h2 id="ggsurvfit-survfit2-잠깐"&gt;ggsurvfit (&lt;code&gt;survfit2&lt;/code&gt;) 잠깐&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;survfit2()&lt;/code&gt; 는 survival curve를 깔끔하게 그려주는 함수로 &lt;strong&gt;&lt;code&gt;ggsurvfit&lt;/code&gt;&lt;/strong&gt; 패키지에 있다. base R &lt;code&gt;survfit()&lt;/code&gt; 결과를 ggplot 스타일로 변환.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ggsurvfit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;survfit2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Surv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;ggsurvfit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;add_confidence_interval&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;add_risktable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="wash-out-기간"&gt;Wash-out 기간&lt;/h2&gt;
&lt;p&gt;중재/약물 연구에서 &lt;strong&gt;이전 치료의 잔여 효과가 몸에서 사라지도록 두는 기간&lt;/strong&gt;. 이 동안 참가자는 어떤 치료도 받지 않는다.&lt;/p&gt;
&lt;p&gt;예) 약물 A 효과 평가 후 같은 참가자에게 약물 B를 투여하기 전, A의 잔여 효과가 완전히 사라질 때까지 기다린다 → B 효과를 정확히 측정 가능.&lt;/p&gt;
&lt;h2 id="index-date를-어디로-잡을-것인가--exposure-period-문제"&gt;Index Date를 어디로 잡을 것인가 — Exposure Period 문제&lt;/h2&gt;
&lt;p&gt;후향적 약물 연구의 핵심 질문 중 하나: &lt;strong&gt;약 복용 시점을 index date로 잡을지, 진단일로 잡을지.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&amp;ldquo;팽이 비유: 팽이 던진 순간부터는 가만 둬야 한다. 그 이후에 행위(약 처방)를 추가하면 그게 time-varying cox이고, 결과 활용이 어려워서 잘 안 쓴다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="index-date--진단일로-잡으면"&gt;Index date = 진단일로 잡으면&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;좋은 점: control 군의 index를 잡기 쉽다.&lt;/li&gt;
&lt;li&gt;문제: 복용군이 약을 &lt;strong&gt;언제&lt;/strong&gt; 먹었는지 모를 때 immortal time bias.
&lt;ul&gt;
&lt;li&gt;약을 1년 뒤에 먹은 사람 = &amp;ldquo;1년 동안 죽지 않았다&amp;rdquo; 는 정보가 미래에서 새는 셈.&lt;/li&gt;
&lt;li&gt;control 군은 그런 보장이 없다 → &lt;strong&gt;항상 약 먹은 사람이 더 오래 산다 (효과 좋음)&lt;/strong&gt; 로 잘못 나옴.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="index-date--약-복용일로-잡으면"&gt;Index date = 약 복용일로 잡으면&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;control 군의 index를 잡을 수 없다 (약을 안 먹었으니까).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="가장-흔한-해결-landmark--exposure-period"&gt;가장 흔한 해결: Landmark + Exposure Period&lt;/h3&gt;
&lt;p&gt;진단일부터 일정 기간 (예: 1년, 2년) 을 &lt;strong&gt;exposure period&lt;/strong&gt; 로 정의:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;진단 시점부터 진단 + N년까지를 exposure 정의 구간&lt;/strong&gt; 으로 둔다.&lt;/li&gt;
&lt;li&gt;그 안에 약을 먹었으면 treatment, 아니면 control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;분석 시작은 진단 + N년 시점부터&lt;/strong&gt; (이게 새 index date).&lt;/li&gt;
&lt;li&gt;분석엔 N년 이전 데이터는 버림.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;효과&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Treatment 군과 control 군이 &lt;strong&gt;같은 시점부터 추적 시작&lt;/strong&gt; → immortal time이 양쪽에 동일하게 작용해 상쇄.&lt;/li&gt;
&lt;li&gt;미래 정보 누설 없음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;단점&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;N년 사이에 사망한 사람은 분석에서 제거 → 표본 수 감소.&lt;/li&gt;
&lt;li&gt;N이 너무 길면 표본이 많이 빠진다.&lt;/li&gt;
&lt;li&gt;결과는 &amp;ldquo;진단 후 N년까지 살아남은 사람들&amp;rdquo; 에 한정된 효과.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="실무-팁"&gt;실무 팁&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;랜드마크 1년 vs 2년 vs 3년&lt;/strong&gt; 으로 표본 수와 결과를 비교해보고 합리적인 기간을 고른다.&lt;/li&gt;
&lt;li&gt;가능하면 &lt;strong&gt;진단 전에 먹은 것만&lt;/strong&gt; 분석하는 게 가장 깔끔 (statin 연구처럼).&lt;/li&gt;
&lt;li&gt;&amp;ldquo;약을 끊는 시점&amp;rdquo; 같이 &lt;strong&gt;미래 정보를 봐야 하는 분석&lt;/strong&gt;은 본질적으로 어렵다. 그래도 landmark로 어느 정도 우회 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="treatment-군-정의의-시점성"&gt;Treatment 군 정의의 시점성&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&amp;ldquo;팽이를 만드는 거랑 팽이를 치는 거랑 차이가 있다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;treatment 군 / control 군을 정할 때는 &lt;strong&gt;현재 기준&lt;/strong&gt; 으로 해야 한다.&lt;/li&gt;
&lt;li&gt;그냥 raw data로 &amp;ldquo;이 사람이 치료받은 사람이고 저 사람은 아니다&amp;rdquo; 라고 하면 사실상 &lt;strong&gt;미래를 본 거&lt;/strong&gt; (그 사람이 약을 먹은 게 미래라).&lt;/li&gt;
&lt;li&gt;그래서 landmark를 걸면 그 시점까지의 정보로 그룹을 정의 — &amp;ldquo;현재 기준&amp;rdquo; 이 됨 → 사기 X.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="competing-risk-regression-실무-코드"&gt;Competing Risk Regression (실무 코드)&lt;/h2&gt;
&lt;h3 id="cause-specific-hazard-model"&gt;Cause-Specific Hazard Model&lt;/h3&gt;
&lt;p&gt;특정 사망 (e.g., cancer death) 의 위험만 본다. 다른 event는 censoring 처리.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;coxph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Surv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="bp"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# status == 1 만 event, 그 외(예: 사망)는 censor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="fine-and-gray-sub-distribution-model"&gt;Fine-and-Gray Sub-Distribution Model&lt;/h3&gt;
&lt;p&gt;다른 event 발생 시 그 사람을 &lt;strong&gt;risk set에서 빼지 않고 무한대로 둔다.&lt;/strong&gt; Cumulative incidence와 1:1 대응.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cmprsk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# crprep으로 weighted long-format data 생성&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# (또는 직접 crr 사용)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fit.crr&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;crr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ftime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;d.age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fstatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;cod2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cov1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;covs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;failcode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cencode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fit.crr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="두-모델-어떻게-다른가"&gt;두 모델 어떻게 다른가&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cause-specific&lt;/strong&gt; — 특정 원인 사망의 hazard rate를 추정. 다른 event는 censor 처리. 인과적 해석에 가깝지만, cumulative incidence plot과 직접 매칭되지 않는다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fine-and-Gray&lt;/strong&gt; — sub-distribution hazard. &lt;strong&gt;Cumulative incidence plot과 1:1 대응&lt;/strong&gt; → HR과 CI plot을 같이 보여주기 좋다. 임상에서 더 많이 쓰임.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;임상에서 cuminc plot과 HR을 함께 보여주려면 &lt;strong&gt;Fine-and-Gray&lt;/strong&gt; 가 자연스럽다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="fine-and-gray가-cuminc와-일치하는-이유-간단-설명"&gt;Fine-and-Gray가 cuminc와 일치하는 이유 (간단 설명)&lt;/h2&gt;
&lt;p&gt;Fine-and-Gray model의 핵심은 &lt;strong&gt;다른 event가 일어난 사람도 끝까지 본다&lt;/strong&gt;는 것 — 사망 시점에서 끊지 않고 연구 종료일까지 추적한다고 본다.&lt;/p&gt;
&lt;p&gt;다만 &amp;ldquo;언제까지 볼지&amp;rdquo; 가 애매하므로 &lt;strong&gt;시간이 멀어질수록 weight를 작게&lt;/strong&gt; 준다. 이렇게 &lt;strong&gt;stabilized censoring weight&lt;/strong&gt;를 곱한 long-format 데이터를 만들면, &lt;code&gt;survfit + ggsurvplot&lt;/code&gt; 로 그린 cumulative incidence plot이 &lt;code&gt;cmprsk::cuminc&lt;/code&gt; / &lt;code&gt;prodlim::Hist&lt;/code&gt; 결과와 정확히 일치한다.&lt;/p&gt;
&lt;p&gt;→ Geskus 가 증명한 결과. R에서는 &lt;code&gt;cmprsk::crprep()&lt;/code&gt; 함수가 이 long-format 데이터를 만들어준다.&lt;/p&gt;
&lt;h2 id="matching-with-matchit"&gt;Matching with &lt;code&gt;MatchIt&lt;/code&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MatchIt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;m.out&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;matchit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;sex&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;comorbidities&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;nearest&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;caliper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0.1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;m.data&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;match.data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m.out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;coxph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Surv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="n"&gt;group&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m.data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;method = &amp;quot;full&amp;quot;&lt;/code&gt; 을 주면 optimal full matching이 자동으로 적용됨.&lt;/p&gt;
&lt;h3 id="greedy-vs-full-matching"&gt;Greedy vs Full Matching&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Greedy (nearest, 1:1)&lt;/strong&gt; — 임상 국룰. 거리 가까운 짝부터 차례로 매칭. caliper로 정밀도 제어. 표본 손실 있음.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full&lt;/strong&gt; — &lt;code&gt;optmatch&lt;/code&gt; 패키지 기반. 모든 케이스를 활용해 더 효율적이지만 해석/보고가 까다롭다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="한-줄-요약"&gt;한 줄 요약&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Index date 결정이 곧 immortal time bias 처리의 핵심.&lt;/strong&gt; Exposure period + landmark가 가장 흔한 실무 해법이고, competing risk가 있을 땐 Fine-and-Gray가 cumulative incidence plot과 1:1 대응해 가장 자주 쓰인다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="관련"&gt;관련&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="참고"&gt;참고&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;
&lt;/em&gt; (Austin, Statistics in Medicine)&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Acceptance-Rejection Algorithm</title><link>https://chaeniverse.github.io/blog/acceptance-rejection/</link><pubDate>Sat, 07 Sep 2024 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/acceptance-rejection/</guid><description>&lt;h2 id="acceptance-rejection-algorithm"&gt;Acceptance-Rejection Algorithm&lt;/h2&gt;
&lt;p&gt;이전에는 A-R 알고리즘을 &amp;ldquo;균등분포를 씌우고 곡선 안쪽 점은 accept, 바깥은 reject&amp;rdquo; 정도로만 두루뭉술하게 알고 있었다. 이 글에서는 그 디테일한 로직을 단계별로 정리한다.&lt;/p&gt;
&lt;h2 id="셋업"&gt;셋업&lt;/h2&gt;
&lt;p&gt;지지구간 $[0,1]$ 위에 정의된 (그러나 직접 적분이 까다로운) 분포 $f(x)$ 에서 샘플을 뽑고 싶다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Target distribution f(x) on [0,1]"
srcset="https://chaeniverse.github.io/blog/acceptance-rejection/target_hu_56779ea065486ac3.webp 320w, https://chaeniverse.github.io/blog/acceptance-rejection/target_hu_a3410b39f6f1eea5.webp 480w, https://chaeniverse.github.io/blog/acceptance-rejection/target_hu_4c0bab44b5a23d68.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/acceptance-rejection/target_hu_56779ea065486ac3.webp"
width="760"
height="613"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="알고리즘"&gt;알고리즘&lt;/h2&gt;
&lt;h3 id="step-1-x-축-샘플링"&gt;Step 1. x-축 샘플링&lt;/h3&gt;
&lt;p&gt;먼저 $x$-축에서 약 10,000개의 data point를 $\mathrm{Unif}(0,1)$ 에서 추출해 고정점으로 둔다.&lt;/p&gt;
&lt;h3 id="step-2-y-축-샘플링"&gt;Step 2. y-축 샘플링&lt;/h3&gt;
&lt;p&gt;각 $x$ 고정점에 대해, $y$-축에서 약 10,000개의 data point를 $\mathrm{Unif}(0, a)$ 에서 추출한다. 여기서 $a$ 는 $f(x)$ 의 최댓값 (또는 그 이상). 즉, 곡선 $f(x)$ 를 충분히 덮는 가로 $1 \times$ 세로 $a$ 직사각형 안에 점들을 흩뿌리는 것.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Sampling along the y-axis at a fixed x"
srcset="https://chaeniverse.github.io/blog/acceptance-rejection/y-sample_hu_a01f6f68592b1334.webp 320w, https://chaeniverse.github.io/blog/acceptance-rejection/y-sample_hu_e2effc87f567206d.webp 480w, https://chaeniverse.github.io/blog/acceptance-rejection/y-sample_hu_a60948387b633bc4.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/acceptance-rejection/y-sample_hu_a01f6f68592b1334.webp"
width="760"
height="695"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="step-3-accept--reject"&gt;Step 3. Accept / Reject&lt;/h3&gt;
&lt;p&gt;각 $(x, y)$ 점에 대해&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$y \le f(x)$ → &lt;strong&gt;accept&lt;/strong&gt; (곡선 안쪽 점)&lt;/li&gt;
&lt;li&gt;$y &gt; f(x)$ → &lt;strong&gt;reject&lt;/strong&gt; (곡선 바깥 점)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="step-4-모든-x에-대해-반복"&gt;Step 4. 모든 x에 대해 반복&lt;/h3&gt;
&lt;p&gt;위 과정을 모든 $x$-축 data point에 대해 반복한다. accept된 $(x, y)$ 점들의 &lt;strong&gt;$x$-좌표만 모아서&lt;/strong&gt; 히스토그램으로 그리면 다음과 같다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Histogram of accepted x-coordinates approximates f(x)"
srcset="https://chaeniverse.github.io/blog/acceptance-rejection/histogram_hu_1cd35692a2375d71.webp 320w, https://chaeniverse.github.io/blog/acceptance-rejection/histogram_hu_2bc8c1739cc87115.webp 480w, https://chaeniverse.github.io/blog/acceptance-rejection/histogram_hu_894a7a1bc842417f.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/acceptance-rejection/histogram_hu_1cd35692a2375d71.webp"
width="760"
height="684"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;→ &lt;strong&gt;원래 $f(x)$ 의 분포에 잘 근사&lt;/strong&gt;된다.&lt;/p&gt;
&lt;h2 id="표본-통계량"&gt;표본 통계량&lt;/h2&gt;
&lt;p&gt;이 accepted data point들의 $x$-좌표 평균을 구하면 $f(x)$ 의 표본 평균을 추정할 수 있다 (분산도 마찬가지).&lt;/p&gt;
&lt;h2 id="왜-동작하나-직관"&gt;왜 동작하나 (직관)&lt;/h2&gt;
&lt;p&gt;곡선 $f(x)$ 아래 면적은 정확히 1 (확률밀도이므로). 직사각형 $[0,1] \times [0,a]$ 에 균등하게 점을 뿌리면, &lt;strong&gt;곡선 아래 영역에 떨어지는 비율&lt;/strong&gt;은 $\frac{1}{a}$. 그리고 이 영역 안의 점들은 &lt;strong&gt;곡선 아래에서 균등 분포&lt;/strong&gt;를 따른다.&lt;/p&gt;
&lt;p&gt;이때 $x$-좌표만 보면, 그 한계분포(marginal)가 정확히 $f(x)$ 가 된다.&lt;/p&gt;
&lt;p&gt;수식으로:&lt;/p&gt;
$$P(X \le x \mid \text{accepted}) = \frac{\int_0^x f(t)\,dt}{\int_0^1 f(t)\,dt} = \int_0^x f(t)\,dt = F(x)$$&lt;p&gt;→ accepted $X$ 의 CDF가 $F$ 이므로 $X \sim f$. $\blacksquare$&lt;/p&gt;
&lt;h2 id="일반화"&gt;일반화&lt;/h2&gt;
&lt;p&gt;지지구간이 $[0,1]$ 이 아니거나 $f$ 의 상한이 명확하지 않을 때는 임의의 proposal $g(x)$ 와 상수 $M$ 을 잡아 $f(x) \le M \cdot g(x)$ 를 만족시킨다. 그리고&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;$X \sim g$ 에서 후보를 뽑고,&lt;/li&gt;
&lt;li&gt;$U \sim \mathrm{Unif}(0,1)$ 을 뽑아,&lt;/li&gt;
&lt;li&gt;$U \le \dfrac{f(X)}{M \cdot g(X)}$ 이면 accept, 아니면 reject.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이때 accept된 $X$ 가 정확히 $f(x)$ 분포를 따른다. 위에서 다룬 케이스는 $g(x) = 1$ (균등 분포), $M = a$ 인 특수 경우에 해당한다.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>MCMC (Metropolis-Hastings)</title><link>https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/</link><pubDate>Sat, 07 Sep 2024 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/</guid><description>&lt;h2 id="markov-chain-monte-carlo"&gt;Markov Chain Monte Carlo&lt;/h2&gt;
&lt;p&gt;간단히 말하면,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Markov chain&lt;/strong&gt; 은 그 전에 몇 번 시행했든 간에 &lt;strong&gt;바로 이전 시행에 대해서만&lt;/strong&gt; 영향을 받는다는 거고,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monte Carlo&lt;/strong&gt; 는 이상한 pdf의 분포를 구하기 어려울 때, 해당하는 pdf의 $x$ 를 많이 sampling해서 근사화시켜 표본 평균과 표본 분산을 구하는 과정을 말한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="동기"&gt;동기&lt;/h2&gt;
&lt;p&gt;가령, $f(x)$ 라는 분포의 기댓값, 분산을 알고 싶다고 하자.&lt;/p&gt;
&lt;p&gt;이때 이 분포의 모양이 특이하면 (봉우리가 여러 개 있는 등), 적분하기 상당히 까다로울 것이다. 이럴 때 정규분포를 따르는 $h(x)$ 를 하나 씌워서 여기서 data point를 무작위로 뽑아 근사시켜 표본 평균·표본 분산을 구하는 식으로 기댓값과 분산을 유추할 수 있다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Target distribution f(x) is multimodal; proposal h(x) is normal"
srcset="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step0-setup_hu_1519216ad54f4539.webp 320w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step0-setup_hu_f0640173b2f7c82f.webp 480w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step0-setup_hu_1c783460b75b48e2.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step0-setup_hu_1519216ad54f4539.webp"
width="760"
height="275"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 그림에서 파란색이 우리가 알고 싶은 복잡한 분포 $f(x)$ (두 봉우리), 빨간색이 우리가 sampling에 쓸 proposal 분포 $h(x)$ (정규분포).&lt;/p&gt;
&lt;h2 id="알고리즘--acceptance-rejection-반복"&gt;알고리즘 — Acceptance-Rejection 반복&lt;/h2&gt;
&lt;h3 id="step-1-reject--첫-시도가-실패하는-경우"&gt;Step 1. Reject — 첫 시도가 실패하는 경우&lt;/h3&gt;
&lt;p&gt;정규분포를 따르는 $h(x)$ 에서 한 data point를 뽑았는데 우연히 이 위치가 뽑혔다고 가정하자.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Sampled point where f(x) &amp;lt; h(x): reject"
srcset="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step1-reject_hu_764706206b79ad5f.webp 320w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step1-reject_hu_24dd43d88b20fccd.webp 480w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step1-reject_hu_82d2c0555e086f6.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step1-reject_hu_764706206b79ad5f.webp"
width="760"
height="251"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이때 $f(x) &lt; h(x)$ (&amp;ldquo;하트가 음수&amp;rdquo;) 이면 해당 data point는 &lt;strong&gt;reject&lt;/strong&gt; 하고, 같은 정규분포에서 data를 다시 추출한다.&lt;/p&gt;
&lt;h3 id="step-2-accept"&gt;Step 2. Accept&lt;/h3&gt;
&lt;p&gt;새로 추출한 data point에서 $f(x) &gt; h(x)$ 이므로 &lt;strong&gt;accept&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Sampled point where f(x) &amp;gt; h(x): accept"
srcset="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step2-accept-prep_hu_1c053be3b3c1788c.webp 320w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step2-accept-prep_hu_e7a0f5fc326b7264.webp 480w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step2-accept-prep_hu_eaf74a7241167b2e.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step2-accept-prep_hu_1c053be3b3c1788c.webp"
width="760"
height="267"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="step-3-proposal-이동"&gt;Step 3. Proposal 이동&lt;/h3&gt;
&lt;p&gt;Accept하면 해당 data point를 중심으로 정규분포 $h(x)$ 를 다시 가정한다 (현재 위치로 proposal을 옮긴다).&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Move h(x) to the accepted point"
srcset="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step3-shift_hu_2f47627e2795e2a3.webp 320w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step3-shift_hu_97207ce6cd76a957.webp 480w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step3-shift_hu_a2437b4e8a3581cf.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step3-shift_hu_2f47627e2795e2a3.webp"
width="760"
height="223"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="step-4-반복--random-walk"&gt;Step 4. 반복 — Random Walk&lt;/h3&gt;
&lt;p&gt;새로 가정한 정규분포에서 위와 같이 data point를 다시 무작위로 뽑는다.&lt;/p&gt;
&lt;p&gt;그런데 $f(x) &gt; h(x)$ 이면 해당 data를 accept하고 다시 그 지점으로 이동해 새 정규분포를 가정한다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Walk along the chain, accumulating accepted points"
srcset="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step4-walk_hu_d4414c27f959774f.webp 320w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step4-walk_hu_604ec4fc25bc7e49.webp 480w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step4-walk_hu_99a80589654ba2e9.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step4-walk_hu_d4414c27f959774f.webp"
width="760"
height="215"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="step-5-다른-봉우리로-이동"&gt;Step 5. 다른 봉우리로 이동&lt;/h3&gt;
&lt;p&gt;이런 식으로 acceptance-rejection을 반복하면서 accept된 data point들을 차곡차곡 모아 놓는다. 그러다 보면, 처음에 있던 오른쪽 봉우리뿐 아니라 &lt;strong&gt;왼쪽 봉우리에서도 data point가 추출&lt;/strong&gt;될 수 있다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Chain crosses to the other mode of f(x)"
srcset="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step5-cross-mode_hu_71f61bdf36d68c8f.webp 320w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step5-cross-mode_hu_c2454a80e4a86f3b.webp 480w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step5-cross-mode_hu_3c1b9ac206db94c2.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step5-cross-mode_hu_71f61bdf36d68c8f.webp"
width="760"
height="201"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="step-6-양쪽-봉우리-모두-탐험"&gt;Step 6. 양쪽 봉우리 모두 탐험&lt;/h3&gt;
&lt;p&gt;왼쪽 봉우리에서도 같은 acceptance-rejection을 반복한다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Both modes get sampled over time"
srcset="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step6-many-samples_hu_1dd7bb6d2bb5aed6.webp 320w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step6-many-samples_hu_92f60f7f4363119.webp 480w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step6-many-samples_hu_d5679dab51ef6ca3.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step6-many-samples_hu_1dd7bb6d2bb5aed6.webp"
width="760"
height="213"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="결과"&gt;결과&lt;/h2&gt;
&lt;p&gt;이런 식으로 알고리즘을 충분히 반복한 후 추출된 data point들의 히스토그램을 그리면 다음과 같은 모양을 띈다 — &lt;strong&gt;원래 $f(x)$ 의 분포와 흡사&lt;/strong&gt;하다.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Histogram of accepted samples approximates f(x)"
srcset="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step7-histogram_hu_ac42b481c77ba57a.webp 320w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step7-histogram_hu_798fda3cd4801473.webp 480w, https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step7-histogram_hu_2f2c110255f9341b.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://chaeniverse.github.io/blog/mcmc-metropolis-hastings/step7-histogram_hu_ac42b481c77ba57a.webp"
width="760"
height="314"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 data point들의 평균을 구하면 $f(x)$ 의 표본 평균과 표본 분산을 얻을 수 있다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="보충-정확한-metropolis-hastings-채택-확률"&gt;보충: 정확한 Metropolis-Hastings 채택 확률&lt;/h2&gt;
&lt;p&gt;위 설명은 직관 중심이다. 실제 Metropolis-Hastings 알고리즘에서 &lt;strong&gt;새 점 $x'$ 을 채택할 확률&lt;/strong&gt;은 다음과 같다.&lt;/p&gt;
$$\alpha(x' \mid x) \;=\; \min\!\left\{1,\; \frac{f(x')\, q(x \mid x')}{f(x)\, q(x' \mid x)}\right\}$$&lt;p&gt;여기서&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$f(\cdot)$ : 목표 분포 (target)&lt;/li&gt;
&lt;li&gt;$q(x' \mid x)$ : 현재 위치 $x$ 에서 다음 후보 $x'$ 을 제안하는 proposal density&lt;/li&gt;
&lt;li&gt;proposal이 대칭이면 ($q(x'\mid x) = q(x \mid x')$, 예: 평균이 현재 점에 있는 정규분포) &lt;strong&gt;Metropolis&lt;/strong&gt; 알고리즘이 되어 비율이 $f(x')/f(x)$ 로 단순해진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;즉, &amp;ldquo;$f$ 가 큰 곳으로 이동하면 무조건 accept, $f$ 가 작은 곳으로 이동하면 비율만큼의 확률로 accept&amp;rdquo;. 위 직관 설명의 &amp;ldquo;f &amp;gt; h → accept, f &amp;lt; h → reject&amp;quot;는 이 채택 확률의 단순한 시각적 비유로 보면 된다.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Competing Risk Analysis</title><link>https://chaeniverse.github.io/blog/competing-risk-analysis/</link><pubDate>Fri, 15 Mar 2024 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/competing-risk-analysis/</guid><description>&lt;h2 id="competing-risk란"&gt;Competing Risk란&lt;/h2&gt;
&lt;p&gt;생존분석에서 &lt;strong&gt;관심 event 외에 다른 event가 있어 두 event가 서로의 발생 확률에 영향을 주는&lt;/strong&gt; 상황. 그래서 한 event가 다른 event의 변동을 일으킨다 → &amp;ldquo;경쟁 위험&amp;rdquo;.&lt;/p&gt;
&lt;h3 id="직관-예시"&gt;직관 예시&lt;/h3&gt;
&lt;p&gt;술이 위암(A)의 원인이라고 하자. 술 먹는 사람은 위암 위험이 ↑.&lt;/p&gt;
&lt;p&gt;근데 술이 간암(A&amp;rsquo;)의 원인도 된다면? → 술 먹은 사람 중 어떤 이는 간암이 먼저 생기고, 어떤 이는 위암이 생긴다.&lt;/p&gt;
&lt;p&gt;간암 생긴 사람은 &lt;strong&gt;사망이라는 event가 먼저 발생&lt;/strong&gt; → 그 사람의 위암은 더 이상 관찰되지 않는다. 결과적으로 위암은 작게 측정되는 (감소하는) 방향으로 작동한다.&lt;/p&gt;
&lt;p&gt;이렇게 하나의 원인에 대해 다른 event가 경쟁적으로 작동해, &lt;strong&gt;A&amp;rsquo;(간암) event 때문에 A(위암) event가 변동되는&lt;/strong&gt; 게 competing risk이다.&lt;/p&gt;
&lt;h3 id="mgus--mm-코호트-예시"&gt;MGUS / MM 코호트 예시&lt;/h3&gt;
&lt;p&gt;MGUS 코호트에서 outcome이 (MM 발생, 사망, censored) 라고 하자.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;관심 event: MM 발생 (event = 1)&lt;/li&gt;
&lt;li&gt;Competing risk: 사망 (사망으로 인해 MM outcome으로 갈 확률이 줄어드는 거니까)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="두-가지-처리-방법"&gt;두 가지 처리 방법&lt;/h2&gt;
&lt;h3 id="cause-specific-model"&gt;Cause-Specific Model&lt;/h3&gt;
&lt;p&gt;다른 event를 &lt;strong&gt;censored&lt;/strong&gt; 로 처리하고 관심 event에 대해 standard Cox 회귀를 적용. 진정한 인과적 효과 (cause-specific hazard) 를 본다.&lt;/p&gt;
&lt;h3 id="fine-gray-sub-distribution-model"&gt;Fine-Gray Sub-Distribution Model&lt;/h3&gt;
&lt;p&gt;다른 event 발생 시 &lt;strong&gt;추적 기간을 연구 종료일까지로 두고&lt;/strong&gt; sub-distribution hazard를 모델링. → &lt;strong&gt;Cumulative incidence plot (CIF)&lt;/strong&gt; 와 1:1 대응.&lt;/p&gt;
&lt;h2 id="어느-걸-쓰나"&gt;어느 걸 쓰나&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;인과적 효과&lt;/strong&gt;를 보고 싶다 → cause-specific model이 더 적합&lt;/li&gt;
&lt;li&gt;그러나 &lt;strong&gt;실무에서는 Fine-Gray가 압도적으로 많이 쓰인다&lt;/strong&gt; — cumulative incidence plot과 직관적으로 매칭되기 때문&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="참고"&gt;참고&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;
&lt;/em&gt; (Austin, Statistics in Medicine)&lt;/li&gt;
&lt;li&gt;출처:
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>MCMC (Gibbs Sampling)</title><link>https://chaeniverse.github.io/blog/mcmc-gibbs-sampling/</link><pubDate>Mon, 18 Dec 2023 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/mcmc-gibbs-sampling/</guid><description>&lt;h2 id="bayes-theorem-기초"&gt;Bayes&amp;rsquo; Theorem 기초&lt;/h2&gt;
$$P(a|b) = \frac{P(a \cap b)}{P(b)}$$$$P(b|a) = \frac{P(a \cap b)}{P(a)}$$$$P(a \cap b) = P(a)P(b|a)$$$$P(a|b) = \frac{P(a)P(b|a)}{P(b)} \quad (\text{where } P(b) \text{ is constant})$$$$P(a|b) \propto P(a)P(b|a) \quad (\text{using } \pi \text{ instead of } P)$$$$\pi(a|b) \propto \pi(a)\pi(b|a) \quad (\text{*이 식 알아두면 유용하다})$$&lt;h2 id="when-to-use-gibbs-sampling"&gt;When to Use Gibbs Sampling&lt;/h2&gt;
&lt;p&gt;그럼 이 Gibbs sampling이라는 게 언제 사용하는 건지 알아보자.&lt;/p&gt;
$$y_i|\mu,\sigma^2 \sim N(\mu,\sigma^2), \quad i=1,\dots,n$$&lt;p&gt;위의 분포에서 $\mu, \sigma^2$ 는 unknown parameter이고,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;frequentist 관점에서는 $\mu, \sigma^2$ 를 MLE로 고정시킨다.&lt;/li&gt;
&lt;li&gt;반면 베이지안들은 이 unknown parameter에 분포를 걸어놓고 생각한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이때 사용하는 게 Gibbs sampling이다.&lt;/p&gt;
&lt;h2 id="posterior-distribution"&gt;Posterior Distribution&lt;/h2&gt;
&lt;p&gt;이 unknown parameter의 분포를 구하기 위해서는 다음과 같은 과정이 필요하다.&lt;/p&gt;
$$y_i|\mu,\sigma^2 \sim N(\mu,\sigma^2), \quad i=1,\dots,n$$$$P(\mu,\sigma^2|y_1,\dots,y_n) \propto P(y_1,\dots,y_n|\mu,\sigma^2)P(\mu,\sigma^2)$$$$P(\mu,\sigma^2|y_1,\dots,y_n) \propto P(y_1,\dots,y_n|\mu,\sigma^2)P(\mu)P(\sigma^2) \quad (\mu \perp \sigma^2)$$$$\propto P(y_1,\dots,y_n|\mu,\sigma^2)P(\mu) \quad (P(\sigma^2) \text{ known이므로 constant 취급})$$&lt;p&gt;이때 $P(\mu,\sigma^2|y_1,\dots,y_n)$ 는 posterior, $P(y_1,\dots,y_n|\mu,\sigma^2)$ 는 likelihood, $P(\mu)$ 는 prior 가 된다.&lt;/p&gt;
&lt;p&gt;여기서 보통 $P(\mu) \sim N(\mu_0, \sigma^2_0)$, $P(\sigma^2) \sim IG(a,b)$ 로 둔다. $\mu_0, \sigma^2_0, a, b$ 는 hyperparameter이고 내가 정하는 것이므로 prior라고 한다.&lt;/p&gt;
&lt;h2 id="의-조건부-분포-유도"&gt;$\mu$ 의 조건부 분포 유도&lt;/h2&gt;
$$P(y_1,\dots,y_n|\mu,\sigma^2)P(\mu)$$$$= \left(\frac{1}{\sqrt{2\pi\sigma^2}}\right)^n\prod_{i=1}^{n}\exp\left(-\frac{1}{2\sigma^2}(y_i-\mu)^2\right) \times \frac{1}{\sqrt{2\pi\sigma^2_0}}\exp\left(-\frac{1}{2\sigma^2_0}(\mu-\mu_0)^2\right)$$&lt;p&gt;여기서 $\mu$ 만 변수이므로, $\mu$ 에 대한 거 아니면 모두 날아간다.&lt;/p&gt;
$$= \exp\left(-\frac{1}{2\sigma^2}\sum (y_i-\mu)^2-\frac{1}{2\sigma^2_0}(\mu-\mu_0)^2\right)$$$$= \exp\left(-\frac{1}{2\sigma^2}\left(\sum y^2_i-2n\bar{y}\mu+n\mu^2\right)-\frac{1}{2\sigma^2_0}(\mu-\mu_0)^2\right)$$$$= \exp\left(-\frac{1}{2}\left(\frac{\sum y_i^2-2n\bar{y}\mu+n\mu^2}{\sigma^2}+\frac{\mu^2-2\mu\mu_0+\mu^2_0}{\sigma_0^2}\right)\right)$$$$= \exp\left(-\frac{1}{2}\cdot\frac{\sigma^2_0n\mu^2+\sigma^2\mu^2-2\sigma^2_0n\bar{y}\mu-2\sigma^2\mu_0\mu}{\sigma^2\sigma^2_0}\right)$$&lt;p&gt;(이걸 $N(\circ,\square)$ 꼴로 만들어야 한다.)&lt;/p&gt;
$$= \exp\left(-\frac{1}{2}\cdot\frac{1}{\sigma^2\sigma^2_0}(\sigma^2_0n\mu^2+\sigma^2\mu^2-2(\sigma^2_0n\bar{y}+\sigma^2\mu_0)\mu)\right)$$$$= \exp\left(-\frac{1}{2}\cdot\frac{1}{\sigma^2\sigma^2_0}((\sigma^2_0n+\sigma^2)\mu^2-2(\sigma^2_0n\bar{y}+\sigma^2\mu_0)\mu)\right)$$$$= \exp\left(-\frac{1}{2}\cdot\frac{\sigma^2_0n+\sigma^2}{\sigma^2\sigma^2_0}\left(\mu^2-2\left(\frac{\sigma^2_0n\bar{y}+\sigma^2\mu_0}{\sigma^2_0n+\sigma^2}\right)\mu\right)\right)$$&lt;p&gt;따라서&lt;/p&gt;
$$\mathbf{E}(\mu|\sigma^2,\vec{y}) = \frac{\sigma^2_0n\bar{y}+\sigma^2\mu_0}{\sigma^2_0n+\sigma^2} = \frac{\dfrac{n\bar{y}}{\sigma^2}+\dfrac{\mu_0}{\sigma^2_0}}{\dfrac{n}{\sigma^2}+\dfrac{1}{\sigma^2_0}}$$$$\mathrm{Var}(\mu|\sigma^2,\vec{y}) = \frac{\sigma^2\sigma^2_0}{\sigma^2_0n+\sigma^2} = \frac{1}{\dfrac{n}{\sigma^2}+\dfrac{1}{\sigma^2_0}}$$&lt;p&gt;따라서&lt;/p&gt;
$$\pi(\mu|\sigma^2,y) \sim N\left(\frac{\dfrac{n\bar{y}}{\sigma^2}+\dfrac{\mu_0}{\sigma^2_0}}{\dfrac{n}{\sigma^2}+\dfrac{1}{\sigma^2_0}},\ \frac{1}{\dfrac{n}{\sigma^2}+\dfrac{1}{\sigma^2_0}}\right)$$&lt;h2 id="의-조건부-분포-유도-1"&gt;$\sigma^2$ 의 조건부 분포 유도&lt;/h2&gt;
&lt;p&gt;마찬가지로, $\sigma^2$ 에 대한 posterior를 계산한다.&lt;/p&gt;
$$P(\sigma^2|\mu,y_1,\dots,y_n) \propto P(y_1,\dots,y_n|\mu,\sigma^2)P(\mu)P(\sigma^2) \quad (\mu \perp \sigma^2)$$$$\propto P(y_1,\dots,y_n|\mu,\sigma^2)P(\sigma^2) \quad (P(\mu) \text{ known} \to \text{상수 취급})$$&lt;p&gt;$P(\sigma^2) \sim IG(a,b)$ 이므로 다음과 같이 쓸 수 있다.&lt;/p&gt;
$$P(y_1,\dots,y_n|\mu,\sigma^2)P(\sigma^2) = \left(\frac{1}{\sqrt{2\pi\sigma^2}}\right)^n\prod_{i=1}^{n}\exp\left(-\frac{1}{2\sigma^2}(y_i-\mu)^2\right) \times (\sigma^2)^{-(a+1)}\exp\left(-\frac{b}{\sigma^2}\right)$$&lt;p&gt;(여기서 $\sigma^2$ 만 변수이므로, $\sigma^2$ 에 대한 거 아니면 모두 날아간다.)&lt;/p&gt;
$$= (2\pi\sigma^2)^{-\frac{n}{2}}\cdot (\sigma^2)^{-(a+1)}\cdot\exp\left(-\frac{1}{2\sigma^2}\sum(y_i-\mu)^2-\frac{b}{\sigma^2}\right)$$$$= (2\pi)^{-\frac{n}{2}}\cdot(\sigma^2)^{-\frac{n}{2}}\cdot(\sigma^2)^{-(a+1)}\cdot\exp\left(-\frac{1}{\sigma^2}\left(\frac{\sum(y_i-\mu)^2}{2}+b\right)\right)$$&lt;p&gt;(이걸 $IG(\circ,\square)$ 꼴로 만든다.)&lt;/p&gt;
$$= (\sigma^2)^{-(a+\frac{n}{2}+1)}\cdot\exp\left(-\frac{\dfrac{\sum(y_i-\mu)^2}{2}+b}{\sigma^2}\right)$$&lt;p&gt;따라서&lt;/p&gt;
$$\pi(\sigma^2|\mu,\vec{y}) \sim IG\left(a+\frac{n}{2},\ b+\frac{\sum(y_i-\mu)^2}{2}\right)$$&lt;h2 id="사후-분포-정리"&gt;사후 분포 정리&lt;/h2&gt;
&lt;p&gt;이런 식으로 $\mu, \sigma^2$ 에 대한 posterior를 구하면 아래와 같다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
$$\pi(\mu|\sigma^2,\vec{y})\sim N\left(\frac{\dfrac{n\bar{y}}{\sigma^2}+\dfrac{\mu_0}{\sigma^2_0}}{\dfrac{n}{\sigma^2}+\dfrac{1}{\sigma^2_0}},\ \frac{1}{\dfrac{n}{\sigma^2}+\dfrac{1}{\sigma^2_0}}\right)$$&lt;p&gt;($\sigma^2$ 은 모르니까 처음에는 1을 넣어준다.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
$$\pi(\sigma^2|\mu,\vec{y})\sim IG\left(a+\frac{n}{2},\ b+\frac{\sum(y_i-\mu)^2}{2}\right)$$&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;여기서 $\mu_0, \sigma^2_0, a, b$ 는 hyperparameter다.&lt;/p&gt;
&lt;h2 id="gibbs-sampling-알고리즘"&gt;Gibbs Sampling 알고리즘&lt;/h2&gt;
&lt;p&gt;이제 1에서 $\mu$ 하나 뽑는다 ($\to \mu^{(1)}$ 추출).&lt;/p&gt;
&lt;p&gt;그리고 나서, 2에 $\mu^{(1)}$ 을 넣어 $\sigma^2$ 을 뽑는다 ($\to \sigma^{2(1)}$).&lt;/p&gt;
&lt;p&gt;그 다음에, 1에 $\sigma^{2(1)}$ 을 넣어 $\mu^{(2)}$ 를 뽑는다.&lt;/p&gt;
&lt;p&gt;다시 2에 $\mu^{(2)}$ 를 넣고 $\sigma^{2(2)}$ 을 뽑는다.&lt;/p&gt;
&lt;p&gt;…&lt;/p&gt;
&lt;p&gt;이런 식으로 총 2만 번 sampling한다.&lt;/p&gt;
&lt;p&gt;초기값의 영향을 받을 수 있기 때문에 그 중 앞의 만 개는 버리고, 뒤의 만 개를 갖고 근사화된 분포를 구한다. 그러면 원래 joint distribution과 비슷한 분포를 얻게 된다.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Newton-Raphson Method &amp; Gradient Method</title><link>https://chaeniverse.github.io/blog/newton-raphson-gradient/</link><pubDate>Fri, 27 Jan 2023 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/newton-raphson-gradient/</guid><description>&lt;p&gt;곡선의 접선을 그리고, 그 접선이 알려주는 방향으로 한 걸음씩 옮겨가며 해 (또는 극점) 에 가까워지는 두 가지 반복적인 방법을 정리한다. 같은 예제 $y = x^2$ 로 비교한다.&lt;/p&gt;
&lt;h2 id="newton-raphson-method"&gt;Newton-Raphson Method&lt;/h2&gt;
&lt;p&gt;방정식 $f(x) = 0$ 의 해를 구하는 방법. 현재 위치 $x_n$ 에서 곡선의 &lt;strong&gt;접선&lt;/strong&gt;을 그리고, 그 접선이 $x$ 축과 만나는 점을 다음 위치 $x_{n+1}$ 로 삼는다.&lt;/p&gt;
&lt;p&gt;접선의 식:&lt;/p&gt;
$$y = f(x_n) + f'(x_n)(x - x_n)$$&lt;p&gt;이 직선이 $y=0$ 이 되는 $x$ 를 풀면&lt;/p&gt;
$$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$$&lt;h3 id="예제"&gt;예제: $y = x^2$&lt;/h3&gt;
&lt;p&gt;$f(x) = x^2$, $f'(x) = 2x$ 이므로&lt;/p&gt;
$$x_{n+1} = x_n - \frac{x_n^2}{2x_n} = x_n - \frac{x_n}{2} = \frac{x_n}{2}$$&lt;p&gt;$x_0 = 8$ 부터 시작하면 $x_1 = 4, x_2 = 2, x_3 = 1, \dots$ 매 step마다 절반으로 줄어들며 해 $x^* = 0$ 에 접근한다. (그림에서 $x_0 \to x_1 \to x_2 \to \dots \to x^*$)&lt;/p&gt;
&lt;h2 id="gradient-method"&gt;Gradient Method&lt;/h2&gt;
&lt;p&gt;함수 $f(x)$ 의 &lt;strong&gt;극점(보통 최솟값)&lt;/strong&gt; 을 찾는 방법. 현재 위치 $x_n$ 에서 그래디언트(도함수)의 반대 방향으로 step size $\alpha$ 만큼 이동한다.&lt;/p&gt;
$$x_{n+1} = x_n - \alpha \cdot f'(x_n)$$&lt;p&gt;여기서 $\alpha$ 는 한 번에 너무 크게 이동하는 것을 방지하기 위한 &lt;strong&gt;하이퍼파라미터&lt;/strong&gt; (learning rate / step size). 이 $\alpha$ 를 어떻게 적응적으로 조절하느냐가 &lt;strong&gt;AdaGrad, Adam&lt;/strong&gt; 같은 옵티마이저 변종의 핵심.&lt;/p&gt;
&lt;h3 id="예제-1"&gt;예제: $y = x^2$&lt;/h3&gt;
&lt;p&gt;$f'(x) = 2x$, $\alpha = 0.1$ 이라고 하자. $x^{(1)} = 5$ 부터 시작하면&lt;/p&gt;
$$x^{(2)} = 5 - 0.1 \cdot 2 \cdot 5 = 5 - 1 = 4$$$$x^{(3)} = 4 - 0.1 \cdot 2 \cdot 4 = 4 - 0.8 = 3.2$$$$\vdots$$&lt;p&gt;일반화하면&lt;/p&gt;
$$x^{(i+1)} = x^{(i)} - \alpha \cdot f'(x^{(i)})$$&lt;p&gt;매 step마다 $x$ 가 $0.8$ 배씩 (= $1 - 2\alpha$) 줄어들며 $x^* = 0$ 에 접근한다.&lt;/p&gt;
&lt;h2 id="두-방법-비교"&gt;두 방법 비교&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Newton-Raphson&lt;/th&gt;
&lt;th&gt;Gradient Method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;목적&lt;/td&gt;
&lt;td&gt;$f(x) = 0$ (해 찾기)&lt;/td&gt;
&lt;td&gt;$\min f(x)$ (극점 찾기)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;업데이트&lt;/td&gt;
&lt;td&gt;$x_{n+1} = x_n - f(x_n)/f'(x_n)$&lt;/td&gt;
&lt;td&gt;$x_{n+1} = x_n - \alpha \cdot f'(x_n)$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;step size&lt;/td&gt;
&lt;td&gt;자동 (도함수 비)&lt;/td&gt;
&lt;td&gt;수동 (하이퍼파라미터 $\alpha$)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;필요 정보&lt;/td&gt;
&lt;td&gt;$f, f'$&lt;/td&gt;
&lt;td&gt;$f'$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;수렴 속도&lt;/td&gt;
&lt;td&gt;보통 빠름 (이차 수렴)&lt;/td&gt;
&lt;td&gt;$\alpha$에 의존 (보통 일차)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;참고: 최적화 맥락에서 Newton&amp;rsquo;s method (&amp;ldquo;Newton&amp;rsquo;s optimization&amp;rdquo;) 는 $f'(x) = 0$ 의 해를 Newton-Raphson으로 찾는 것이라 $x_{n+1} = x_n - f'(x_n)/f''(x_n)$ 형태가 된다. 이때는 2차 도함수 $f''$ 가 필요하다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Importance Sampling</title><link>https://chaeniverse.github.io/blog/importance-sampling/</link><pubDate>Tue, 17 Jan 2023 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/importance-sampling/</guid><description>&lt;h2 id="monte-carlo"&gt;Monte Carlo&lt;/h2&gt;
&lt;p&gt;기댓값을 계산하는 방법. $X \sim f(x)$ 일 때 $g(X)$ 의 기댓값은 다음 세 가지 형태로 동치다.&lt;/p&gt;
$$\underbrace{E[g(X)]}_{\text{①}} \;=\; \underbrace{\int g(x) f(x)\,dx}_{\text{②}} \;\approx\; \underbrace{\frac{1}{n}\sum_{i=1}^{n} g(x_i)}_{\text{③}}$$&lt;p&gt;①, ②는 정의상 같고, ③은 $f$ 에서 뽑은 샘플 $\{x_i\}$ 의 평균으로 ②를 근사한 것 (대수의 법칙).&lt;/p&gt;
&lt;h3 id="예제-1-단순-mc"&gt;예제 1: 단순 MC&lt;/h3&gt;
&lt;p&gt;$g(x) = e^{-2x}$, $X \sim \mathrm{Unif}(0,1)$ 일 때 $E[g(X)]$ 을 구하라.&lt;/p&gt;
&lt;p&gt;이때 $f(x) = 1$ (Unif(0,1) 의 밀도)이므로&lt;/p&gt;
$$E[g(X)] = \int_0^1 e^{-2x}\,dx \;\approx\; \frac{1}{N}\sum_{i=1}^{N} e^{-2 x_i}, \qquad x_i \sim \mathrm{Unif}(0,1)$$&lt;p&gt;균등 분포에서 $N$ 개를 뽑아 $g$ 에 넣고 평균을 내면 끝.&lt;/p&gt;
&lt;h2 id="importance-sampling"&gt;Importance Sampling&lt;/h2&gt;
&lt;p&gt;문제는 다음 두 경우다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;$f(x)$ 에서 샘플링이 어렵다.&lt;/strong&gt; 닫힌 형태로 sampling이 안 되는 분포.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;$g(x) \cdot f(x)$ 가 $f$ 의 꼬리/희소 영역에 몰려 있다.&lt;/strong&gt; $f$ 에서 뽑은 대부분의 샘플이 $g \cdot f$ 가 큰 영역을 못 맞춰서 분산이 매우 커진다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이럴 때는 다른 분포 $\phi(x)$ (&amp;ldquo;proposal&amp;rdquo; 또는 &amp;ldquo;importance distribution&amp;rdquo;)에서 샘플을 뽑고 가중치로 보정한다. 핵심 항등식:&lt;/p&gt;
$$E_f[g(X)] = \int g(x) f(x)\,dx = \int g(x) \cdot \frac{f(x)}{\phi(x)} \cdot \phi(x)\,dx = E_\phi\!\left[g(X) \cdot \frac{f(X)}{\phi(X)}\right]$$&lt;p&gt;→ $\phi$ 에서 샘플 $\{x_i\}$ 을 뽑고&lt;/p&gt;
$$E_f[g(X)] \;\approx\; \frac{1}{N}\sum_{i=1}^{N} g(x_i) \cdot \underbrace{\frac{f(x_i)}{\phi(x_i)}}_{\text{weight}}$$&lt;p&gt;여기서 $f(x)/\phi(x)$ 가 &lt;strong&gt;importance weight&lt;/strong&gt;. (이 가중치 때문에 &amp;ldquo;importance&amp;rdquo; sampling이라는 이름이 붙은 것)&lt;/p&gt;
&lt;h2 id="예제-2"&gt;예제 2: $\int (x-1)(x-2)\,dx$&lt;/h2&gt;
&lt;p&gt;이 식은 따로 정해진 $f(x)$ 가 없다 (단순 적분). $\phi(x) \sim \mathrm{Exp}(1)$, 즉 $\phi(x) = e^{-x}$ ($x&gt;0$) 를 proposal로 쓰자.&lt;/p&gt;
$$\int (x-1)(x-2)\,dx = \int \underbrace{\frac{(x-1)(x-2)}{e^{-x}}}_{\text{new } g(x)} \cdot \underbrace{e^{-x}}_{\text{new } f(x)}\,dx$$&lt;p&gt;→ $X \sim \mathrm{Exp}(1)$ 에서 $N$ 개를 뽑아 새 $g$ 에 넣고 평균:&lt;/p&gt;
$$\widehat{E[g(X)]} = \frac{1}{N}\sum_{i=1}^{N} \frac{(x_i-1)(x_i-2)}{e^{-x_i}}, \qquad x_i \sim \mathrm{Exp}(1)$$&lt;h2 id="예제-3--with--proposal"&gt;예제 3: $\int e^{-|x|}\,dx$ with $N(0,1)$ proposal&lt;/h2&gt;
&lt;p&gt;$\phi(x) \sim N(0,1)$, 즉 $\phi(x) = \dfrac{1}{\sqrt{2\pi}} e^{-x^2/2}$ 를 쓰자.&lt;/p&gt;
$$\int e^{-|x|}\,dx = \int \underbrace{\frac{e^{-|x|}}{\frac{1}{\sqrt{2\pi}} e^{-x^2/2}}}_{\text{new } g(x)} \cdot \underbrace{\frac{1}{\sqrt{2\pi}} e^{-x^2/2}}_{\text{new } f(x)}\,dx$$&lt;p&gt;→ $X \sim N(0,1)$ 에서 $N$ 개 sampling 후 새 $g$ 에 넣어 평균을 구하면 된다.&lt;/p&gt;
&lt;h2 id="왜--을-proposal로-골랐나"&gt;왜 $N(0,1)$ 을 proposal로 골랐나&lt;/h2&gt;
&lt;p&gt;원래의 $g(x) = e^{-|x|}$ 는 0 근처에 봉우리가 있는 양옆 대칭 함수다. $\phi(x) \sim N(0,1)$ 도 비슷한 모양 — 0 근처에 봉우리, 양쪽으로 빠르게 감소.&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;proposal $\phi(x)$ 를 $|g(x) f(x)|$ 와 모양이 비슷하게 잡으면 분산이 작아져 효율이 좋다.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;만약 $\phi$ 가 $|g \cdot f|$ 가 큰 영역을 거의 안 덮으면, 거의 모든 샘플의 weight $f(x)/\phi(x)$ 가 0 근처가 되고, 가끔 한 샘플의 weight가 매우 커져서 추정량의 분산이 폭발한다.&lt;/p&gt;
&lt;h2 id="한-줄-요약"&gt;한 줄 요약&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;샘플링은 $\phi$ 에서, 평균은 weight $f/\phi$ 로 보정.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Proposal $\phi$ 의 모양을 신경써서 고를수록 추정량의 분산이 작아진다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>가능도비 검정 (Likelihood Ratio Test)</title><link>https://chaeniverse.github.io/blog/likelihood-ratio-test/</link><pubDate>Tue, 17 Jan 2023 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/likelihood-ratio-test/</guid><description>&lt;h2 id="lr-검정-likelihood-ratio-test"&gt;LR 검정 (Likelihood Ratio Test)&lt;/h2&gt;
&lt;p&gt;간단히 말하면, &lt;strong&gt;자료가 귀무가설보다 대립가설의 영역에서 나왔을 가능성&lt;/strong&gt;을 비교하는 검정이다.&lt;/p&gt;
&lt;p&gt;검정 통계량은&lt;/p&gt;
$$\lambda \;=\; \frac{L(\hat{\Omega}_0)}{L(\hat{\Omega})} \;=\; \frac{\displaystyle \max_{\theta \in \Omega_0} L(\theta)}{\displaystyle \max_{\theta \in \Omega} L(\theta)}$$&lt;p&gt;즉 &lt;strong&gt;(H₀ 하에서 가능도함수의 max) ÷ (전체 모수공간에서 가능도함수의 max)&lt;/strong&gt; 이다.&lt;/p&gt;
&lt;p&gt;분자가 분모의 일부이므로 항상 $0 &lt; \lambda \le 1$ 이고, 이를 다시 쓰면&lt;/p&gt;
$$\lambda \;=\; \frac{L(\hat{\Omega}_0)}{\max\{L(\hat{\Omega}_0),\, L(\hat{\Omega}_1)\}} \;=\; \frac{1}{\max\Big\{1,\; \dfrac{L(\hat{\Omega}_1)}{L(\hat{\Omega}_0)}\Big\}}$$&lt;h2 id="기각역의-의미"&gt;기각역의 의미&lt;/h2&gt;
&lt;p&gt;LRT의 기각역은 $\lambda \le \lambda_0$ 형태인데, 위 식을 뒤집으면 결국&lt;/p&gt;
$$\frac{L(\hat{\Omega}_1)}{L(\hat{\Omega}_0)} \;\ge\; c$$&lt;p&gt;인 영역이다. 이 영역에서는 자료가 H₀ 보다 H₁ 에서 나왔을 가능성이 더 높다는 뜻이므로, &lt;strong&gt;H₀를 기각하는 게 타당하다&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="예제-정규모형의-평균-검정"&gt;예제: 정규모형의 평균 검정&lt;/h2&gt;
&lt;p&gt;$X_1, \dots, X_n \sim N(\mu, \sigma^2)$ 일 때,&lt;/p&gt;
$$H_0:\ \mu = 0,\ \sigma^2 &gt; 0 \quad \text{vs.} \quad H_1:\ \mu \neq 0,\ \sigma^2 &gt; 0$$&lt;p&gt;에 대한 크기 $\alpha$ 의 LRT를 유도해보자.&lt;/p&gt;
&lt;h3 id="1-mle-계산"&gt;1) MLE 계산&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;전체 모수공간&lt;/strong&gt; $\Omega$ 에서 MLE는&lt;/p&gt;
$$\hat{\mu} = \bar{x}, \qquad \hat{\sigma}^2 = \frac{1}{n}\sum_{i=1}^n (x_i - \bar{x})^2$$&lt;p&gt;따라서&lt;/p&gt;
$$L(\hat{\Omega}) = (2\pi\hat{\sigma}^2)^{-n/2} \exp(-n/2)$$&lt;p&gt;&lt;strong&gt;Under $H_0$&lt;/strong&gt; 에서는 $\mu = 0$ 으로 강제되므로&lt;/p&gt;
$$\hat{\mu}_0 = 0, \qquad \hat{\sigma}^2_0 = \frac{1}{n}\sum_{i=1}^n x_i^2$$&lt;p&gt;따라서&lt;/p&gt;
$$L(\hat{\Omega}_0) = (2\pi\hat{\sigma}^2_0)^{-n/2} \exp(-n/2)$$&lt;h3 id="2--단순화"&gt;2) $\lambda$ 단순화&lt;/h3&gt;
$$\lambda = \frac{L(\hat{\Omega}_0)}{L(\hat{\Omega})}
= \frac{(2\pi\hat{\sigma}^2_0)^{-n/2}\,\exp(-n/2)}{(2\pi\hat{\sigma}^2)^{-n/2}\,\exp(-n/2)}
= \left(\frac{\hat{\sigma}^2_0}{\hat{\sigma}^2}\right)^{-n/2}$$&lt;p&gt;기각 조건 $\lambda \le \lambda_0$ ($0 &lt; \lambda_0 &lt; 1$)는&lt;/p&gt;
$$\left(\frac{\hat{\sigma}^2_0}{\hat{\sigma}^2}\right)^{-n/2} \le \lambda_0
\quad\Longleftrightarrow\quad \frac{\hat{\sigma}^2_0}{\hat{\sigma}^2} \ge k$$&lt;h3 id="3--와--의-관계"&gt;3) $\hat{\sigma}^2_0$ 와 $\hat{\sigma}^2$ 의 관계&lt;/h3&gt;
&lt;p&gt;$\sum x_i^2 = \sum (x_i - \bar{x})^2 + n\bar{x}^2$ 항등식을 쓰면&lt;/p&gt;
$$n\hat{\sigma}^2_0 = \sum x_i^2 = \sum(x_i - \bar{x})^2 + n\bar{x}^2 = n\hat{\sigma}^2 + n\bar{x}^2$$&lt;p&gt;따라서&lt;/p&gt;
$$\hat{\sigma}^2_0 = \hat{\sigma}^2 + \bar{x}^2$$&lt;h3 id="4-t-통계량-형태로-변환"&gt;4) t-통계량 형태로 변환&lt;/h3&gt;
&lt;p&gt;$\hat{\sigma}^2_0 / \hat{\sigma}^2 \ge k$ 에 대입하면&lt;/p&gt;
$$\frac{\hat{\sigma}^2 + \bar{x}^2}{\hat{\sigma}^2} = 1 + \frac{\bar{x}^2}{\hat{\sigma}^2} \;\ge\; k
\quad\Longleftrightarrow\quad \frac{\bar{x}^2}{\hat{\sigma}^2} \;\ge\; k - 1
\quad\Longleftrightarrow\quad \frac{|\bar{x}|}{\hat{\sigma}} \;\ge\; k_2$$&lt;p&gt;이제 표본분산 $s^2 = \dfrac{1}{n-1}\sum (x_i - \bar{x})^2$ 와의 관계를 쓰면&lt;/p&gt;
$$n\hat{\sigma}^2 = (n-1)s^2 \quad\Longrightarrow\quad \hat{\sigma} = s\sqrt{\frac{n-1}{n}}$$&lt;p&gt;이를 대입해 정리하면 결국&lt;/p&gt;
$$\left|\frac{\bar{x}}{s/\sqrt{n}}\right| \;\ge\; c$$&lt;p&gt;즉 t-통계량의 절댓값이 어떤 임계값 $c$ 이상인 영역이 기각역이다.&lt;/p&gt;
&lt;h3 id="5-크기--조건으로--결정"&gt;5) 크기 $\alpha$ 조건으로 $c$ 결정&lt;/h3&gt;
$$\alpha = \max_{\Omega_0} P\!\left(\left|\frac{\bar{x}}{s/\sqrt{n}}\right| \ge c\right)
= P\!\left(\left|\frac{\bar{x}}{s/\sqrt{n}}\right| \ge c \;\Big|\; \mu = 0\right)
= P\big(|t| \ge c\big), \quad t \sim t(n-1)$$&lt;p&gt;이로부터&lt;/p&gt;
$$c = t_{\alpha/2}(n-1)$$&lt;h3 id="6-결론"&gt;6) 결론&lt;/h3&gt;
&lt;p&gt;크기 $\alpha$ LRT의 검정 기각역은&lt;/p&gt;
$$C = \left\{(x_1, \dots, x_n) \;\Big|\; \left|\frac{\bar{x}}{s/\sqrt{n}}\right| \ge t_{\alpha/2}(n-1)\right\}$$&lt;p&gt;→ 익숙한 &lt;strong&gt;단일표본 양측 t-검정&lt;/strong&gt;과 정확히 같다. 즉 정규모형 평균에 대한 LRT는 t-검정으로 자연스럽게 환원된다.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Inverse Sampling</title><link>https://chaeniverse.github.io/blog/inverse-sampling/</link><pubDate>Wed, 11 Jan 2023 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/inverse-sampling/</guid><description>&lt;h2 id="inverse-sampling"&gt;Inverse Sampling&lt;/h2&gt;
&lt;p&gt;분포 $f(x)$ 에서 직접 샘플링하기 어려울 때 쓰는 기법. CDF의 역함수 $F^{-1}$ 과 균등 분포만 있으면 어떤 분포든 (이론적으로는) 뽑을 수 있다.&lt;/p&gt;
&lt;h2 id="알고리즘"&gt;알고리즘&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;$f(x)$ 의 CDF $F(x) = \displaystyle\int_{-\infty}^{x} f(t)\,dt$ 를 구한다.&lt;/li&gt;
&lt;li&gt;$F$ 의 역함수 $F^{-1}$ 을 구한다.&lt;/li&gt;
&lt;li&gt;균등 분포에서 $u \sim \mathrm{Unif}(0,1)$ 을 뽑는다.&lt;/li&gt;
&lt;li&gt;$x = F^{-1}(u)$ 로 변환하면 $x \sim f(x)$ 이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;샘플링한 $u$ 들을 $F^{-1}$ 에 넣은 후 히스토그램으로 그리면 $f(x)$ 의 분포에 근사한다.&lt;/p&gt;
&lt;h2 id="왜-동작하나-간단-증명"&gt;왜 동작하나 (간단 증명)&lt;/h2&gt;
&lt;p&gt;$U \sim \mathrm{Unif}(0,1)$ 이라 하자. $X = F^{-1}(U)$ 의 CDF를 계산하면&lt;/p&gt;
$$P(X \le x) = P(F^{-1}(U) \le x) = P(U \le F(x)) = F(x)$$&lt;p&gt;마지막 등호는 $U$ 가 $[0,1]$ 균등 분포이기 때문 ($P(U \le t) = t$). 즉 $X$ 의 CDF가 $F$ 와 같으므로 $X \sim f$. $\blacksquare$&lt;/p&gt;
&lt;h2 id="기하학적-직관"&gt;기하학적 직관&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;$f(x)$ 가 한쪽으로 치우친 분포라고 하자 (예: $0$ 근처에 mass가 몰린 감소하는 밀도).&lt;/li&gt;
&lt;li&gt;$F^{-1}$ 은 $u$-축의 균등한 구간을 $x$-축의 &lt;strong&gt;불균등한 구간&lt;/strong&gt;으로 매핑한다.
&lt;ul&gt;
&lt;li&gt;$f(x)$ 가 큰 영역 → $F$ 가 가파르게 증가 → $F^{-1}$ 은 완만 → 좁은 $x$ 구간이 넓은 $u$ 구간에 대응&lt;/li&gt;
&lt;li&gt;$f(x)$ 가 작은 영역 → $F$ 가 느리게 증가 → $F^{-1}$ 은 가파름 → 넓은 $x$ 구간이 좁은 $u$ 구간에 대응&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;따라서 균등 분포 $u$ 를 뽑아 $F^{-1}$ 에 넣으면, &lt;strong&gt;밀도가 높은 $x$ 영역에는 많은 샘플이, 낮은 영역에는 적은 샘플이&lt;/strong&gt; 떨어진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;예: $u$ 를 10개 뽑아 $F^{-1}$ 에 넣으면, 결과 히스토그램이 원본 $f(x)$ 와 닮아간다.&lt;/p&gt;
&lt;h2 id="한계"&gt;한계&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;$F^{-1}$ 을 닫힌 형태로 구할 수 있어야 깔끔하게 쓸 수 있다 (지수, 균등, 로지스틱 등).&lt;/li&gt;
&lt;li&gt;닫힌 형태 $F^{-1}$ 이 없거나 다변량으로 확장하기 어려울 때는 &lt;strong&gt;Rejection sampling&lt;/strong&gt;, &lt;strong&gt;MCMC&lt;/strong&gt; (Gibbs, Metropolis-Hastings) 등 다른 기법을 쓴다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Permutation Test</title><link>https://chaeniverse.github.io/blog/permutation-test/</link><pubDate>Thu, 03 Nov 2022 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/permutation-test/</guid><description>&lt;h2 id="permutation-test"&gt;Permutation Test&lt;/h2&gt;
&lt;p&gt;Permutation test는 &lt;strong&gt;비모수(nonparametric) 가설 검정&lt;/strong&gt; 방법이다. 표본 크기가 작거나 데이터가 정규분포를 따르지 않을 때 사용한다. 특히 표본 수가 제한적인 genomic 데이터 분석 등에서 유용하다.&lt;/p&gt;
&lt;h2 id="핵심-아이디어"&gt;핵심 아이디어&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;가정.&lt;/strong&gt; 두 표본이 &lt;strong&gt;같은 모집단 분포&lt;/strong&gt;에서 왔다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;논리.&lt;/strong&gt; 만약 이 가정이 맞다면, 데이터를 무작위로 섞어도 분포는 같아야 한다. 즉, 라벨(어느 그룹 소속인지)은 사실상 의미가 없다.&lt;/p&gt;
&lt;p&gt;→ 그래서 &lt;strong&gt;라벨을 섞어서 검정 통계량을 다시 계산&lt;/strong&gt;해도, 원래 관측한 값과 비슷한 분포가 나와야 한다. 이 분포로부터 멀리 떨어져 있다면 가정이 틀렸다고(=두 그룹이 다른 분포에서 왔다고) 결론낼 수 있다.&lt;/p&gt;
&lt;h2 id="절차"&gt;절차&lt;/h2&gt;
&lt;p&gt;두 그룹의 평균 차 (test statistic) 가 $T_{\text{obs}} = 9.33$ 으로 관측되었다고 하자. 표본이 작고 비정규라 모수 검정은 못 쓰는 상황이다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;두 그룹 데이터를 합친 뒤 &lt;strong&gt;무작위로 섞는다 (약 1,000회 반복)&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;각 permutation마다 평균 차 $T^{(b)}$ 를 계산한다 ($b = 1, \dots, B$).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;$\{T^{(b)}\}$ 의 히스토그램을 그린다 — 이게 귀무가설 하의 경험적 분포다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;관측값보다 더 극단적인 permutation 개수를 센다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;p-value 계산:&lt;/p&gt;
$$p = \frac{\#\{b : T^{(b)} \ge T_{\text{obs}}\}}{B}$$&lt;p&gt;(단측 검정의 경우. 양측이면 절댓값 기준으로 비교)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="해석"&gt;해석&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;관측값 $T_{\text{obs}}$ 가 permutation 분포의 &lt;strong&gt;꼬리 끝&lt;/strong&gt;에 있으면 → 두 그룹이 다른 분포에서 왔다는 강력한 증거.&lt;/li&gt;
&lt;li&gt;관측값이 분포의 &lt;strong&gt;중앙 근처&lt;/strong&gt;에 있으면 → 두 그룹이 같은 모집단에서 왔다고 봐도 무방.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;더 작은지&amp;quot;를 검정하는 단측 검정이라면 부등호 방향만 뒤집어 카운트.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="왜-좋은가"&gt;왜 좋은가&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;모수 가정 (정규성, 등분산 등) 없이 동작한다.&lt;/li&gt;
&lt;li&gt;표본 수가 작아서 점근 이론을 못 쓰는 상황에서도 유효하다.&lt;/li&gt;
&lt;li&gt;검정 통계량을 자유롭게 정의할 수 있다 (평균 차, 중앙값 차, 상관 계수 등 무엇이든).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;대신 계산량이 크다 — $B$ 를 충분히 크게 해야 p-value의 정밀도이 나온다 (예: $B=1{,}000$ 이면 p-value 정밀도은 0.001).&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;p&gt;참고:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Rao–Blackwell Theorem</title><link>https://chaeniverse.github.io/blog/rao-blackwell-theorem/</link><pubDate>Mon, 31 Oct 2022 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/rao-blackwell-theorem/</guid><description>&lt;h2 id="raoblackwell-theorem"&gt;Rao–Blackwell Theorem&lt;/h2&gt;
&lt;p&gt;$g(\theta)$ 를 모수의 함수, 그리고&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$S$ : sufficient statistic&lt;/li&gt;
&lt;li&gt;$T$ : $g(\theta)$ 의 unbiased estimator (u.e.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;라 하자. 이때&lt;/p&gt;
$$f(S) \;=\; E(T(X) \mid S) \;=\; E(T \mid S)$$&lt;p&gt;는 $g(\theta)$ 에 의존하지 않는 &lt;strong&gt;통계량&lt;/strong&gt;이며, $f(S)$ 도 역시 $g(\theta)$ 의 비편향추정량이다.&lt;/p&gt;
&lt;p&gt;(여기서 $f(S)$ 의 정의가 $\theta$ 에 의존하지 않는다 — $S$ 가 sufficient이기 때문에 $T \mid S$ 의 분포가 $\theta$ 와 무관해서, 조건부 기댓값도 $\theta$ 와 무관하다.)&lt;/p&gt;
&lt;p&gt;또한 모든 $\theta$ 에 대하여 다음이 성립한다.&lt;/p&gt;
$$\mathrm{Var}(f(S)) \;\le\; \mathrm{Var}(T(X)) \tag{1}$$&lt;p&gt;따라서 $f(S)$ 는 &lt;strong&gt;MVUE 가 될 후보&lt;/strong&gt;가 된다.&lt;/p&gt;
&lt;p&gt;이제 (1)을 증명하자.&lt;/p&gt;
&lt;h2 id="증명"&gt;증명&lt;/h2&gt;
&lt;p&gt;먼저 $f(S)$ 가 비편향임을 확인:&lt;/p&gt;
$$E(f(S)) = E\big(E(T(X) \mid S)\big) = E(T(X)) = g(\theta) \quad \text{(이중기댓값 정리)}$$&lt;p&gt;이제 $\mathrm{Var}(T(X))$ 를 전개한다. $E(f(S)) = g(\theta)$ 이고 $E(T(X)) = g(\theta)$ 이므로&lt;/p&gt;
$$\mathrm{Var}(T(X)) = E\big[T(X) - E(f(S))\big]^2$$&lt;p&gt;$T(X)$ 와 $E(f(S))$ 사이에 $f(S)$ 를 더하고 빼서 분리한다 ($+f(S) - f(S)$):&lt;/p&gt;
$$= E\big[(T(X) - f(S)) + (f(S) - E(f(S)))\big]^2$$&lt;p&gt;제곱을 전개하면&lt;/p&gt;
$$= \underbrace{E\big[T(X) - f(S)\big]^2}_{\text{(I)}} \;+\; 2\underbrace{E\big[(T(X) - f(S))(f(S) - E(f(S)))\big]}_{(\star)} \;+\; \underbrace{E\big[f(S) - E(f(S))\big]^2}_{=\,\mathrm{Var}(f(S))}$$&lt;h3 id="핵심-교차항"&gt;핵심: 교차항 $(\star) = 0$&lt;/h3&gt;
$$(\star) = E\big[(T(X) - f(S))(f(S) - E(f(S)))\big]
= E\Big[\,E\big[(T(X) - f(S))(f(S) - E(f(S))) \,\big|\, S\big]\,\Big]$$&lt;p&gt;조건부 안에서 $f(S)$ 와 $E(f(S))$ 는 $S$ 에 대해 상수처럼 다룰 수 있으므로 (전자는 $S$ 의 함수, 후자는 그냥 상수)&lt;/p&gt;
$$= E\Big[\,(f(S) - E(f(S))) \cdot E\big[T(X) - f(S) \,\big|\, S\big]\,\Big]$$&lt;p&gt;내부 조건부 기댓값을 분리하면&lt;/p&gt;
$$E\big[T(X) - f(S) \,\big|\, S\big] = E(T(X) \mid S) - E(f(S) \mid S) = f(S) - f(S) = 0$$&lt;p&gt;(첫 항은 $f(S)$ 의 정의 자체이고, 둘째 항은 $f(S)$ 가 $S$ 의 함수라 $E(f(S) \mid S) = f(S)$.)&lt;/p&gt;
&lt;p&gt;따라서 $(\star) = 0$.&lt;/p&gt;
&lt;h3 id="결론"&gt;결론&lt;/h3&gt;
$$\mathrm{Var}(T(X)) = E[T(X) - f(S)]^2 + \mathrm{Var}(f(S)) \;\ge\; \mathrm{Var}(f(S))$$&lt;p&gt;$E[T(X) - f(S)]^2 \ge 0$ 이므로&lt;/p&gt;
$$\mathrm{Var}(f(S)) \le \mathrm{Var}(T(X)) \qquad \blacksquare$$&lt;h2 id="한-줄-요약"&gt;한 줄 요약&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;충분통계량으로 조건부 기댓값을 취하면, 비편향성을 유지하면서 분산이 감소한다.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;이 때문에 MVUE를 찾을 때는 어떤 비편향추정량을 가지고 시작하든 sufficient statistic으로 Rao–Blackwell화 (Rao–Blackwellize)하는 것이 유리하다. 단, 이렇게 얻은 $f(S)$ 가 &lt;strong&gt;유일한 MVUE&lt;/strong&gt;라고 결론지으려면 $S$ 의 &lt;strong&gt;완비성 (completeness)&lt;/strong&gt; 이 추가로 필요하며, 이것이 Lehmann–Scheffé 정리로 이어진다.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>