2# Two-Way Fixed Effects (TWFE) 완전 가이드
작성일: 2025년 12월
주제: 패널 데이터 분석의 핵심 방법론
난이도: 중급-고급
Two-way Fixed Effects (TWFE, 양방향 고정효과)는 패널 데이터 분석에서 관측되지 않는 이질성(unobserved heterogeneity)을 통제하기 위한 방법론입니다.
문제점:
$$Y = \beta_1 \cdot X + \varepsilon$$
해결책:
$$Y = \beta_1 \cdot X + \gamma_i + \delta_t + \varepsilon$$
$$Y_{it} = \beta_0 + \beta_1 \cdot X_{it} + \gamma_i + \delta_t + \varepsilon_{it}$$
변수 설명:
| 변수 | 의미 | 예시 (F1 분석) |
|---|---|---|
| $Y_{it}$ | 종속변수 | 팀 i의 t년도 PointsShare |
| $X_{it}$ | 독립변수 | 팀 i의 t년도 DFV 사용 여부 |
| $\gamma_i$ | 개체 고정효과 | 팀 i의 시간불변 특성 |
| $\delta_t$ | 시간 고정효과 | t년도의 공통 환경 |
| $\varepsilon_{it}$ | 오차항 | 설명되지 않는 랜덤 변동 |
| $\beta_1$ | 인과효과 | DFV 도입의 효과 |
$$\text{PointsShare}{it} = \beta_0 + \beta_1 \cdot \text{DFV_Adopt}{it} + \gamma_i + \delta_t + \varepsilon_{it}$$
구체적 예시 (3개 팀, 3년):
$$\begin{align}
\text{PointsShare}{\text{Ferrari},1967} &= \beta_0 + \beta_1 \cdot \text{DFV}{\text{Ferrari},1967} + \gamma_{\text{Ferrari}} + \delta_{1967} + \varepsilon_{\text{Ferrari},1967} \
\text{PointsShare}{\text{Ferrari},1968} &= \beta_0 + \beta_1 \cdot \text{DFV}{\text{Ferrari},1968} + \gamma_{\text{Ferrari}} + \delta_{1968} + \varepsilon_{\text{Ferrari},1968} \
\text{PointsShare}{\text{Lotus},1967} &= \beta_0 + \beta_1 \cdot \text{DFV}{\text{Lotus},1967} + \gamma_{\text{Lotus}} + \delta_{1967} + \varepsilon_{\text{Lotus},1967} \
&\vdots
\end{align}$$
"팀별로 다르지만 시간에 따라 변하지 않는 모든 특성"
| 팀 특성 | 설명 |
|---|---|
| 브랜드 가치 | Ferrari의 명성과 역사 |
| 조직 문화 | Lotus의 혁신적 엔지니어링 접근 |
| 지리적 위치 | 영국 vs 이탈리아 (인프라, 인재풀) |
| 창립자 철학 | Enzo Ferrari vs Colin Chapman |
| 팀 DNA | 보수적 vs 공격적 전략 |
$$\begin{align}
\gamma_{\text{Ferrari}} &= \text{Ferrari의 평균적인 성과 수준} \
\gamma_{\text{Lotus}} &= \text{Lotus의 평균적인 성과 수준} \
\gamma_{\text{Lotus}} - \gamma_{\text{Ferrari}} &= \text{두 팀의 시간불변 성과 격차}
\end{align}$$
"연도별로 다르지만 모든 팀에 공통적으로 영향을 미치는 요인"
| 연도 | 공통 환경 변화 |
|---|---|
| 1967 | 3.0L 엔진 규정 도입 |
| 1968 | 윙(wing) 공력 장치 허용 |
| 1970 | 포인트 체계 변경 |
| 1973 | 오일 쇼크 → 경제 환경 악화 |
| 1975 | 안전 규정 강화 |
$$\begin{align}
\delta_{1967} &= \text{1967년의 평균 성과 환경} \
\delta_{1968} &= \text{1968년의 평균 성과 환경} \
\delta_{1968} - \delta_{1967} &= \text{1967년과 1968년 사이의 전반적 환경 변화}
\end{align}$$
# Python (Statsmodels)
model = smf.ols('PointsShare ~ DFV_Adopt + C(Constructor) + C(Year)',
data=panel).fit()
# R (fixest)
model <- feols(PointsShare ~ DFV_Adopt | Constructor + Year,
data=panel)
$$\begin{align}
\text{PointsShare}{it} = &\beta_0 + \beta_1 \cdot \text{DFV_Adopt}{it} \
&+ \gamma_2 \cdot \mathbb{1}(\text{팀}=\text{Lotus}) + \gamma_3 \cdot \mathbb{1}(\text{팀}=\text{McLaren}) + \cdots + \gamma_n \cdot \mathbb{1}(\text{팀}=\text{Team}n) \
&+ \delta_2 \cdot \mathbb{1}(\text{연도}=1968) + \delta_3 \cdot \mathbb{1}(\text{연도}=1969) + \cdots + \delta_T \cdot \mathbb{1}(\text{연도}=\text{Year}_T) \
&+ \varepsilon{it}
\end{align}$$
Indicator 함수:
- $\mathbb{1}(\text{팀}=\text{Lotus}) = 1$ if 팀이 Lotus, else 0
- $\mathbb{1}(\text{연도}=1968) = 1$ if 연도가 1968, else 0
해석:
$$\begin{align}
\gamma_2 &= \text{Lotus와 Ferrari의 평균 성과 차이} \
\delta_2 &= \text{1968년과 1958년의 평균 성과 차이}
\end{align}$$
$$\begin{align}
\overline{\text{PointsShare}}i &= \frac{1}{T} \sum{t} \text{PointsShare}{it} \quad \text{(팀 i의 전체 기간 평균)} \
\overline{X}_i &= \frac{1}{T} \sum{t} X_{it} \quad \text{(팀 i의 X 평균)}
\end{align}$$
$$\text{PointsShare}{it} - \overline{\text{PointsShare}}_i = \beta_1 \cdot (X{it} - \overline{X}i) + (\delta_t - \overline{\delta}) + \varepsilon{it}$$
Ferrari: Year 1967 1968 1969 1970
Points 10 15 20 25 평균 = 17.5
Lotus: Year 1967 1968 1969 1970
Points 30 35 40 45 평균 = 37.5
관측:
- Lotus가 Ferrari보다 평균 20점 더 높음
- 이 차이는 팀 역량 차이인가, DFV 효과인가?
Ferrari: Demeaned -7.5 -2.5 2.5 7.5 평균 = 0
Lotus: Demeaned -7.5 -2.5 2.5 7.5 평균 = 0
변환 효과:
- 팀 간 수준 차이(20점) 제거
- 각 팀 내에서의 변화 패턴만 남음
- 두 팀의 시간 추세가 동일하면 효과 식별 불가
$$\text{PointsShare} = \beta_1 \cdot \text{DFV_Adopt} + \varepsilon$$
문제:
- 팀 역량, 예산, 드라이버 실력 등 누락
- 강한 팀 → DFV 도입 확률 높음 + 원래 성과 좋음
- $\beta_1$이 과대추정됨 (upward bias)
결과:
$$E[\hat{\beta}_1] \neq \beta_1 \quad \text{(편향된 추정치)}$$
$$\text{PointsShare} = \beta_1 \cdot \text{DFV_Adopt} + \gamma_i + \delta_t + \varepsilon$$
효과:
- $\gamma_i$가 팀 역량, 예산, 조직 문화 등을 자동 통제
- $\delta_t$가 연도별 규정 변화, 경제 환경 등을 자동 통제
- $\beta_1$이 불편 추정치에 근접
결과:
$$E[\hat{\beta}_1] \approx \beta_1 \quad \text{(일치 추정치, 강한 가정 하)}$$
목표:
$$\beta_1 = \text{DFV 도입의 순수한 인과효과}$$
필요 가정: Parallel Trends (평행 추세)
만약 DFV를 도입하지 않았다면, 모든 팀의 성과 추세가 평행했을 것
팀 역량, 브랜드, 위치 등
공통 시간 효과 ($\delta_t$)
규정 변화, 경제 환경, 기술 진보
남은 변동으로 효과 식별
장점:
구현 간단
python
# 더미 변수 추가만으로 구현
model = ols('Y ~ X + C(entity) + C(time)', data).fit()
표준 소프트웨어 사용 가능
Stata: xtreg, reghdfe
해석 직관적
"팀별, 연도별 특성을 통제한 후,
DFV 도입이 성과를 β₁만큼 변화시킴"
$$\text{DFV_Persist}_{it} = \text{누적 DFV 사용 연수}$$
Ferrari: 0 0 0 0 1 2 3 4 5 6 (1970년 도입)
Lotus: 0 1 2 3 4 5 6 7 8 9 (1967년 도입)
특징:
- 시간에 따라 천천히 증가
- 팀 내 변동이 있지만 매우 작음
- 대부분의 변동이 팀 간 차이에서 발생
Step 1: 평균 계산
$$\begin{align}
\overline{\text{DFV_Persist}}{\text{Ferrari}} &= 2.1 \
\overline{\text{DFV_Persist}}{\text{Lotus}} &= 4.5
\end{align}$$
Step 2: Demeaning
Ferrari: -2.1, -2.1, -2.1, -2.1, -1.1, -0.1, 0.9, 1.9, 2.9, 3.9
Lotus: -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5
문제:
- $\gamma_i$가 대부분의 변동(between variation)을 흡수
- 남은 within variation이 매우 작음
- DFV_Persist의 효과를 과소추정
$$\begin{align}
\text{Version 1 (Pooled OLS):} \quad \beta &= 4.90^{***} \quad (p < 0.01) \
\text{Version 2 (TWFE):} \quad \beta &= 0.01 \quad (p = 0.45)
\end{align}$$
이유: TWFE가 학습 효과의 대부분을 팀 FE로 흡수
가정:
$$\text{TWFE assumes: } \beta_1 = \text{모든 } i, t \text{에 대해 동일}$$
현실:
$$\beta_{1,it} = \text{팀 } i, \text{ 시점 } t \text{에 따라 다를 수 있음}$$
예시:
- Early adopter (Lotus): $\beta_1 = 10$
- Late adopter (Ferrari): $\beta_1 = 3$
- 1967년 효과: $\beta_1 = 8$
- 1975년 효과: $\beta_1 = 2$
Goodman-Bacon (2021):
- TWFE는 heterogeneous treatment effects 하에서 편향
- "Forbidden comparisons" 문제
- Already-treated vs newly-treated 비교가 문제
Sun & Abraham (2021):
- Event study with heterogeneous effects
- Interaction-weighted estimator 제안
결론:
- Treatment timing이 다른 경우 (staggered adoption)
- TWFE 계수의 해석이 복잡해짐
F1 DFV 분석 예시:
표본 크기: 95 관측치
팀 수: 23개 → 22개 더미 변수
연도 수: 18개 → 17개 더미 변수
총 파라미터: 1 (절편) + 1 (DFV) + 22 + 17 = 41개
실질 자유도: 95 - 41 = 54
결과:
- 표준오차 증가 → 신뢰구간 확대
- 검정력(power) 감소 → 효과 감지 어려움
- 과적합(overfitting) 위험 → 표본외 예측력 저하
비유:
95명의 학생 성적을 설명하는데,
41개의 설명변수 사용
→ 남은 정보가 54개에 불과
$$\text{INTEGRATED}_i = \text{팀 } i \text{가 통합형인지 여부}$$
Ferrari: 항상 1 (1950-1975 모두 1)
Lotus: 항상 0 (1950-1975 모두 0)
TWFE 모형:
$$Y = \beta_1 \cdot \text{DFV} + \beta_2 \cdot \text{INTEGRATED} + \gamma_i + \delta_t + \varepsilon$$
문제:
- INTEGRATED = 팀 더미의 선형결합
- 완전 공선성(perfect multicollinearity)
- $\beta_2$ 추정 불가능
결과:
Version 2 분석에서 H2 검증 실패
"INTEGRATED × DFV" 상호작용도 추정 어려움
RE allows time-invariant variables
상호작용만 추정
$$Y = \beta_1 \cdot \text{DFV} + \beta_3 \cdot (\text{DFV} \times \text{INTEGRATED}) + \gamma_i + \delta_t + \varepsilon$$
Between estimator
팀 평균값으로 회귀 (cross-sectional)
모형:
# Pooled OLS / Simple FE
POINTS ~ DFV_PERSISTENCE + Year_norm
결과:
$$\begin{align}
\beta &= 4.900^{***} \
p &= 0.0034 \
R^2 &= 0.220
\end{align}$$
해석:
- DFV 1년 추가 사용 → 4.9 points 증가
- 매우 유의미한 학습 효과
모형:
# Two-way Fixed Effects
PointsShare ~ DFV_Persist + C(Constructor) + C(Year)
결과:
$$\begin{align}
\beta &= 0.010 \
p &= 0.449 \text{ (비유의)} \
R^2 &= 0.701
\end{align}$$
해석:
- DFV 지속성 효과가 사라짐
- $R^2$는 높아졌으나 관심 변수 비유의
Version 1: POINTS (0 ~ 100+)
- 높은 변동성
- 효과 크기 감지 용이
Version 2: PointsShare (0 ~ 1)
- 낮은 변동성
- 효과 크기 축소
예시:
Ferrari: POINTS = 30 → PointsShare = 0.15
Lotus: POINTS = 60 → PointsShare = 0.30
차이: 30 points vs 0.15 share
V1: 일부 모델만 FE
대부분 between variation 사용
→ 팀 간 차이 포착
V2: 모든 모델 TWFE
오직 within variation만 사용
→ 팀 간 차이 제거
흡수되는 변동:
| 변동 | 설명 | TWFE 처리 |
|---|---|---|
| Between (팀 간) | Lotus(강함) vs 약한 팀 | 제거됨 |
| Between (연도 간) | 1967 vs 1975 | 제거됨 |
| Within (팀 내 시간) | 각 팀의 연도별 변화 | 사용됨 |
DFV_Persist = 천천히 증가하는 변수
→ 대부분의 변동이 between
→ TWFE가 이를 γᵢ로 흡수
→ 효과 과소추정
시각화:
Total Variation in DFV_Persist:
- Between teams: 80% (Lotus 평균=5 vs Ferrari 평균=2)
- Within teams: 20% (각 팀 내 연도별 변화)
TWFE는 20%의 변동만 사용!
Lotus (1967-1975):
Year: 1967 1968 1969 1970 1971 1972 1973 1974 1975
DFV_Persist: 1 2 3 4 5 6 7 8 9
Points: 40 50 60 65 70 75 80 82 85
평균: DFV_Persist = 5, Points = 67.4
McLaren (1968-1975):
Year: 1968 1969 1970 1971 1972 1973 1974 1975
DFV_Persist: 1 2 3 4 5 6 7 8
Points: 30 40 50 55 60 65 68 70
평균: DFV_Persist = 4.5, Points = 54.75
사용 변동:
Between variation:
- Lotus 평균 67.4 vs McLaren 평균 54.75 = 12.65 차이
- DFV_Persist 평균 5 vs 4.5 = 0.5 차이
- 기울기 ≈ 12.65 / 0.5 ≈ 25 (큰 효과!)
결과: β ≈ 4.9*** (유의함)
사용 변동:
Within Lotus:
- DFV_Persist: 1→9 변화 시 Points: 40→85 변화
- Demeaned 후: 작은 변동
Within McLaren:
- DFV_Persist: 1→8 변화 시 Points: 30→70 변화
- Demeaned 후: 작은 변동
두 패턴이 유사하면 효과 식별 어려움
결과: β ≈ 0.01 (비유의)
import pandas as pd
import statsmodels.formula.api as smf
# 데이터 로드
panel = pd.read_csv('panel_data.csv')
# Two-way FE
model = smf.ols('PointsShare ~ DFV_Adopt + C(Constructor) + C(Year)',
data=panel).fit()
# 결과 출력
print(model.summary())
# 계수 추출
beta_dfv = model.params['DFV_Adopt']
se_dfv = model.bse['DFV_Adopt']
pval_dfv = model.pvalues['DFV_Adopt']
print(f"DFV Effect: {beta_dfv:.4f}")
print(f"Std Error: {se_dfv:.4f}")
print(f"P-value: {pval_dfv:.4f}")
from linearmodels.panel import PanelOLS
# 패널 데이터 구조로 변환
panel_indexed = panel.set_index(['Constructor', 'Year'])
# TWFE with clustered SE
model = PanelOLS(panel_indexed['PointsShare'],
panel_indexed[['DFV_Adopt']],
entity_effects=True,
time_effects=True).fit(cov_type='clustered',
cluster_entity=True)
print(model.summary)
장점:
- 클러스터링 표준오차 자동 지원
- 고정효과 처리 최적화
- 패널 데이터 전용 설계
library(fixest)
# Two-way FE with clustered SE
model <- feols(PointsShare ~ DFV_Adopt | Constructor + Year,
data = panel,
cluster = ~Constructor)
# 결과 출력
summary(model)
# 고정효과 추출
fixef(model)
# 시각화
coefplot(model)
장점:
- 매우 빠른 속도 (대규모 데이터)
- 고정효과 자동 처리 (더미 생성 불필요)
- 다양한 표준오차 옵션
- 결과 시각화 내장
library(plm)
# 패널 데이터 선언
pdata <- pdata.frame(panel, index = c("Constructor", "Year"))
# Two-way FE
model <- plm(PointsShare ~ DFV_Adopt,
data = pdata,
model = "within",
effect = "twoways")
# Clustered SE
library(lmtest)
library(sandwich)
coeftest(model, vcov = vcovHC(model, cluster = "group"))
* 패널 데이터 선언
xtset Constructor Year
* Two-way FE with clustered SE
xtreg PointsShare DFV_Adopt i.Year, fe vce(cluster Constructor)
* 또는 reghdfe (고차원 FE)
reghdfe PointsShare DFV_Adopt, absorb(Constructor Year) vce(cluster Constructor)
$$Y_{it} = \beta_0 + \beta_1 \cdot X_{it} + u_i + \varepsilon_{it}$$
가정:
$$\begin{align}
u_i &\sim N(0, \sigma^2_u) \quad \text{(팀 효과가 랜덤)} \
\text{Cov}(u_i, X_{it}) &= 0 \quad \text{(독립성 가정)}
\end{align}$$
시간불변 변수 추정 가능
python
# INTEGRATED 같은 변수도 추정 가능
model = smf.mixedlm('Y ~ X + INTEGRATED', groups='Constructor')
더 효율적 (smaller SE)
강한 가정 필요
$$\text{Cov}(u_i, X) = 0$$
→ 현실적으로 만족하기 어려움
편향 위험
from statsmodels.stats.hausman import Hausman
# FE vs RE 선택
fe_model = PanelOLS(..., entity_effects=True).fit()
re_model = RandomEffects(...).fit()
h_test = Hausman(fe_model.params, re_model.params, ...)
print(h_test.summary())
해석:
- p < 0.05: FE 사용 (RE 가정 기각)
- p > 0.05: RE 사용 가능
$$\Delta Y_{it} = Y_{it} - Y_{i,t-1} = \beta_1 \cdot \Delta X_{it} + \Delta \delta_t + \Delta \varepsilon_{it}$$
$\gamma_i$ 자동 제거
$$\gamma_i - \gamma_i = 0$$
단기 효과 포착
학습 효과 같은 누적 과정 분석 부적합
$$Y_{it} = \sum_{k} \beta_k \cdot \mathbb{1}(t = t^*i + k) + \gamma_i + \delta_t + \varepsilon{it}$$
도입 전: $\beta_{-3}, \beta_{-2}, \beta_{-1}$ → 사전 추세 검정
도입 후: $\beta_0, \beta_1, \beta_2, \ldots$ → 효과의 시간 경로
Parallel trends 검정
$$H_0: \beta_{-3} = \beta_{-2} = \beta_{-1} = 0$$
Heterogeneous effects 허용
library(fixest)
# Event study
model <- feols(PointsShare ~ i(event_time, ref=-1) | Constructor + Year,
data = panel,
cluster = ~Constructor)
# 시각화
iplot(model)
문제: Treatment timing이 다른 경우 (DFV 도입 연도가 팀마다 다름)
- Lotus: 1967년
- McLaren: 1968년
- Ferrari: 1970년 (가정)
TWFE의 문제:
- Already-treated vs newly-treated 비교
- "Forbidden comparisons"
각 treatment 시점별로 별도의 dataset 생성
→ 각각 DiD 추정
→ 결과 통합
library(did)
# Stacked DiD
model <- att_gt(yname = "PointsShare",
tname = "Year",
idname = "Constructor",
gname = "FIRST_DFV_YEAR",
data = panel)
# 평균 효과
agg_effects <- aggte(model, type = "group")
summary(agg_effects)
$i \times t$ 형태 (entity × time)
예: 팀-연도, 기업-분기, 개인-월
DFV_Adopt: $0 \to 1$로 변화
시간에 따라 변하지 않으면 식별 불가
팀 역량, 브랜드 가치 등
최소 권장:
- $i$ (entities) > 20
- $t$ (time periods) > 5
- $i \times t > 100$
DFV_Persist, 누적 경험 등
→ Pooled OLS 또는 RE 고려
$i < 10, t < 3$
→ 자유도 부족
Treatment effect 매우 이질적
팀/시점별 효과 차이 큼
→ Event study, Stacked DiD
시간불변 변수가 핵심
INTEGRATED 효과 추정 필요
→ Random Effects
1. 모형 명세 명확히
"We estimate a two-way fixed effects model
with team and year fixed effects."
2. 표준오차 클러스터링
"Standard errors are clustered at the team level
to account for serial correlation."
3. 결과 테이블
| Variable | (1) Pooled | (2) FE | (3) TWFE |
|---------------|------------|---------|----------|
| DFV_Adopt | 0.05** | 0.03* | 0.02 |
| | (0.02) | (0.02) | (0.03) |
| Team FE | No | Yes | Yes |
| Year FE | No | No | Yes |
| R-squared | 0.15 | 0.45 | 0.70 |
| N | 95 | 95 | 95 |
4. 강건성 검증
- [ ] Pooled OLS와 비교
- [ ] Random Effects와 비교 (Hausman test)
- [ ] Event study로 parallel trends 검정
- [ ] 다양한 표준오차 (robust, clustered)
5. 결과 해석
"The coefficient of 0.02 represents the within-team
effect of DFV adoption over time, controlling for
time-invariant team characteristics and common
year shocks."
| 가설 | 권장 방법 | 이유 |
|---|---|---|
| H1' (채택 효과) | TWFE ✓ | DFV_Adopt은 시간가변, TWFE 적합 |
| H2' (학습 효과) | Pooled/RE ✓ | DFV_Persist는 느린 변화, TWFE 부적합 |
| H3' (역량 증폭) | RE + Interaction | INTEGRATED는 시간불변, RE 필요 |
1단계: 탐색적 분석
# Pooled OLS
model1 = ols('Y ~ X + Year', data).fit()
2단계: 기본 TWFE
# Two-way FE
model2 = ols('Y ~ X + C(Team) + C(Year)', data).fit()
3단계: 강건성 검증
# Event study
feols(Y ~ i(event_time, ref=-1) | Team + Year, data)
# Stacked DiD
att_gt(yname="Y", gname="treatment_year", ...)
4단계: 결과 비교
표 작성: Pooled vs FE vs TWFE vs Event Study
→ 결과의 패턴 파악
→ 가장 credible한 추정치 선택
Data fishing 방지
```
Parallel trends 검정
```
사전 추세가 평행한지 확인
```
Power 계산
```
Sensitivity analysis
```
Subgroup analysis
```
Strong vs Weak teams
```
Robustness checks
```
Appendix에 추가 분석
```
한계점 논의
```
대안 해석 가능성
```
Replication 가능성
```
Version 1 vs Version 2의 극명한 차이:
$$\begin{align}
\text{V1 (Pooled):} \quad \beta &= 4.90^{***} \quad \text{(학습 효과 강함)} \
\text{V2 (TWFE):} \quad \beta &= 0.01 \quad \text{(학습 효과 사라짐)}
\end{align}$$
교훈:
1. 방법론이 결과를 결정할 수 있음
2. 더 엄격한 방법 $\neq$ 항상 더 나은 방법
3. 변수 특성에 맞는 방법론 선택 필수
4. Multiple approaches로 강건성 확인
"TWFE는 만능 해결책이 아닙니다.
연구 질문, 데이터 구조, 변수 특성을 고려하여
가장 적합한 방법론을 선택하세요.
그리고 언제나 결과의 강건성을 다각도로 검증하세요."
Chapter 5: Fixed Effects and Panel Data
Goodman-Bacon, A. (2021). "Difference-in-differences with variation in treatment timing." Journal of Econometrics, 225(2), 254-277.
TWFE의 문제점 분석
Sun, L., & Abraham, S. (2021). "Estimating dynamic treatment effects in event studies with heterogeneous treatment effects." Journal of Econometrics, 225(2), 175-199.
Event study의 개선 방법
Callaway, B., & Sant'Anna, P. H. (2021). "Difference-in-differences with multiple time periods." Journal of Econometrics, 225(2), 200-230.
문서 끝
작성: Claude (Anthropic)
최종 수정: 2025년 12월