194강 문제 4에서 시간에 따라 변하는 교란이 남았습니다. 두 번의 뺄셈으로도 지워지지 않는 것입니다.
192강 문제 4를 떠올립니다. 배정은 무작위인데 실제 복용은 사람이 정했고, 그래서 배정의 효과를 순응률로 나눠 순응자의 효과를 얻었습니다.
그 나눗셈이 바로 도구변수입니다. 조건만 갖추면 배정이 아닌 다른 변수로도 같은 일을 할 수 있습니다.
처치와는 이어져 있는데 결과와는 처치를 통해서만 이어진 변수를 찾으면, 안 잰 교란이 있어도 효과를 끄집어냅니다.
대신 대가가 셋입니다. 표준오차가 커지고, 검사할 수 없는 가정을 지고, 모두가 아니라 일부에 대해서만 답합니다.
문제. 지렛대를 씁니다.
(1) 가 처치와 결과를 각각 얼마나 움직이는지 재세요.
(2) 두 움직임을 나눠 보세요.
(3) 다른 방법과 견주세요.
생각의 실마리. 는 동전 던지기이고 는 실제 처치이며 는 관측되지 않습니다. 는 에만 영향을 주고 에는 를 통해서만 닿으며, 참 효과는 입니다.
풀이. (1) 를 바꿔 봅니다.
| 무엇 | 가 | 가 | 차이 |
|---|---|---|---|
| 처치받은 비율 | |||
| 결과 의 평균 |
를 바꾸면 처치 비율이 만큼 움직입니다. 이것이 첫째 조건입니다.
그때 도 만큼 움직입니다. 그 움직임의 원인은 처치뿐입니다. 가 다른 길로 에 닿지 않기 때문입니다.
(2) 두 움직임을 나눕니다.
참값 입니다. 192강 문제 4의 나눗셈과 완전히 같은 식이며, 이름만 도구변수입니다.
뜻은 이렇습니다. 가 처치 비율을 만큼 올렸을 때 가 만큼 올랐으니, 처치 하나당 만큼 올린 셈입니다.
(3) 다른 방법과 견줍니다.
| 무엇으로 | 추정값 | 표준오차 | 참값 | 치우침 |
|---|---|---|---|---|
| 로 그냥 회귀 | ||||
| 로 도구변수 | ||||
| 를 안다면 |
그냥 회귀는 때문에 까지 올라갑니다.
도구변수는 를 한 번도 안 쓰고 에 닿습니다.
대신 표준오차가 배로 커집니다. 이 가 됩니다.
정보를 사서 편향을 판 것입니다. 공짜가 아닙니다.
이 문제에서 배우는 것. 도구변수가 쓰는 것은 자료 전체가 아니라 가 만든 변동뿐입니다. 처치 비율이 에서 로 움직인 그 이 정보의 전부이고, 나머지 변동은 와 얽혀 있어 버립니다. 그래서 표준오차가 네 배가 됩니다. 가 처치를 많이 움직일수록 버리는 것이 적어지므로, 강한 도구가 좋은 도구입니다. 문제 3에서 이 논리를 끝까지 밀어붙입니다.
바로 확인 1.
확인 1-1. 도구변수 추정식을 쓰세요.
답. 의 차이를 의 차이로 나눕니다.
확인 1-2. 검산에서 두 차이와 그 몫을 쓰세요.
답. 와 이며 몫은 입니다.
확인 1-3. 검산에서 회귀와 도구변수의 표준오차 비를 쓰세요.
답. 배입니다.
문제. 나눗셈을 회귀로 바꿉니다.
(1) 두 단계로 계산하세요.
(2) 나눗셈과 같은지 확인하세요.
(3) 표준오차를 검사하세요.
생각의 실마리. 나눗셈은 가 이진일 때만 씁니다. 회귀 두 번으로 바꾸면 연속형 도구도 공변량도 다룰 수 있습니다.
풀이. (1)과 (2) 1단계는 를 에 회귀해 예측값을 얻고, 2단계는 를 그 예측값에 회귀합니다.
| 단계 | 계수 | 무엇을 뜻하는가 |
|---|---|---|
| 1단계의 계수 | 가 를 움직인 양 | |
| 2단계의 예측값 계수 | 도구변수 추정값 |
나눗셈으로 구한 과 같습니다.
1단계 계수 가 문제 1 표의 처치 비율 차이와 같습니다. 가 이진이므로 회귀계수가 곧 두 집단의 차이입니다.
예측값에는 와 얽힌 부분이 없습니다. 만으로 만들었기 때문이며, 그것이 이 방법이 통하는 이유입니다.
(3) 그런데 2단계의 표준오차를 그대로 쓰면 안 됩니다.
| 어떻게 계산 | 표준오차 |
|---|---|
| 2단계를 그냥 회귀로 | |
| 올바른 계산 |
직접 두 번 돌리면 배로 잘못 나옵니다.
2단계 잔차는 예측값이 아니라 실제 로 계산해야 하기 때문입니다. 회귀 함수는 그것을 모르므로 전용 함수를 씁니다.
이 문제에서 배우는 것. 두 단계로 나눠 계산하는 것이 이해에는 좋지만 실행에는 나쁩니다. 계수는 맞게 나오는데 표준오차가 틀리고, 여기서는 배 커지는 쪽이라 안전하지만 설정에 따라 작아지는 쪽으로도 틀립니다. 이 실수가 흔해서 통계 패키지들이 도구변수 전용 함수를 따로 제공하며, "손으로 두 번 돌리지 말라"는 것이 표준 조언입니다. 188강 문제 2의 두 단계 계산에서도 같은 문제가 있었습니다.
바로 확인 2.
확인 2-1. 두 단계를 각각 한 문장으로 쓰세요.
답. 를 에 회귀해 예측값을 얻고, 를 그 예측값에 회귀합니다.
확인 2-2. 검산에서 1단계 계수와 2단계 계수를 쓰세요.
답. 와 입니다.
확인 2-3. 검산에서 두 표준오차를 쓰세요.
답. 와 입니다.
문제. 조건을 확인합니다.
(1) 세 조건을 정리하세요.
(2) 배제 제약이 깨질 때를 재세요.
(3) 연관성이 약할 때를 재세요.
생각의 실마리. 도구변수가 강력한 만큼 조건도 까다롭습니다. 그중 자료로 확인되는 것은 하나뿐입니다.
풀이. (1) 세 조건입니다.
| 조건 | 무슨 뜻인가 | 검사할 수 있는가 |
|---|---|---|
| 연관성 | 가 를 움직인다 | 예 |
| 배제 제약 | 가 에 다른 길로 안 닿는다 | 아니오 |
| 독립성 | 가 교란과 무관하다 | 아니오 |
첫째만 자료로 확인됩니다. 나머지 둘은 논증으로 지켜야 합니다.
(2) 둘째 조건을 깨 봅니다. 가 에 직접 조금 닿게 만듭니다.
| 가 에 직접 주는 크기 | 1단계 계수 | 추정값 | 치우침 | 직접 크기 나누기 1단계 |
|---|---|---|---|---|
첫 줄의 은 표본 오차이고 그것을 빼면 마지막 열과 거의 같습니다.
마지막 열은 직접 경로를 1단계 계수로 나눈 값입니다. 위반이 나눗셈에서 확대돼 들어옵니다.
1단계 계수가 이므로 직접 경로가 배로 부풀어 들어옵니다. 짜리 위반이 의 치우침이 됩니다.
약한 도구일수록 작은 위반이 크게 부풀려집니다.
(3) 첫째 조건을 약하게 해 봅니다. 가 를 움직이는 힘을 줄여 갑니다.
| 의 힘 | 1단계 F | 추정값 가운뎃값 | 추정값의 sd | 회귀 쪽으로 치우침 |
|---|---|---|---|---|
가운뎃값을 쓴 것은 약한 도구의 평균이 존재하지 않기 때문입니다. 1단계 계수가 근처면 나눗셈이 발산합니다.
1단계 F가 에서 으로 내려가는 동안 흩어짐이 에서 가 됩니다.
가운뎃값도 에서 로 밀려 그냥 회귀 값 근처까지 갑니다.
약한 도구는 편향을 못 고치면서 표준오차만 키웁니다. 두 가지를 다 잃는 자리이며, F가 이상이어야 한다는 관례가 여기서 나옵니다.
이 문제에서 배우는 것. 약한 도구의 위험은 두 방향에서 옵니다. 하나는 위 표의 편향이고, 다른 하나는 (2)에서 본 위반의 확대입니다. 두 문제가 같은 분모를 공유하므로 1단계가 약하면 모든 것이 나빠집니다. 그래서 도구변수 논문은 1단계 F를 반드시 싣고, 그 값이 근처면 결과를 신뢰하지 않습니다. 최근에는 이 너무 관대하다는 지적도 있어 더 높은 기준이 제안돼 있습니다. "도구를 찾았다"는 것과 "쓸 만한 도구를 찾았다"는 것이 다릅니다.
바로 확인 3.
확인 3-1. 세 조건 중 자료로 검사되는 것을 쓰세요.
답. 연관성만 검사되고 배제 제약과 독립성은 논증으로 지켜야 합니다.
확인 3-2. 검산에서 직접 경로 일 때의 치우침과 이론값을 쓰세요.
답. 이고 이론값은 입니다.
확인 3-3. 검산에서 의 힘이 일 때의 F와 가운뎃값을 쓰세요.
답. 과 입니다.
문제. 추정 대상을 밝힙니다.
(1) 효과가 사람마다 다를 때 무엇이 나오는지 보세요.
(2) 무엇을 알 수 있고 무엇을 알 수 없는지 가르세요.
(3) 청개구리가 있을 때를 보세요.
생각의 실마리. 192강 문제 4에서 사람이 네 종류였습니다. 가 처치를 안 바꾸는 사람에게서는 아무 정보도 안 나옵니다.
풀이. (1) 사람이 세 종류이고 종류마다 효과가 다릅니다.
| 사람의 종류 | 비율 | 그 사람의 효과 | 가 를 바꾸는가 |
|---|---|---|---|
| 언제나 받는 사람 | 아니오 | ||
| 따르는 사람 | 예 | ||
| 절대 안 받는 사람 | 아니오 |
| 무엇 | 값 |
|---|---|
| 전체 평균 효과 | |
| 따르는 사람의 효과 | |
| 도구변수 추정값 |
전체 평균 이 아니라 따르는 사람의 이 나옵니다.
가 안 바꾸는 사람에게서는 아무 정보도 안 나오기 때문입니다. 언제나 받는 사람은 가 이든 이든 받고, 절대 안 받는 사람은 어느 쪽이든 안 받습니다.
이것을 국소 평균 처치효과라 합니다.
(2) 무엇을 알 수 있는지 가릅니다.
| 무엇을 알 수 있는가 | 어떻게 |
|---|---|
| 따르는 사람의 비율 | 1단계 계수 |
| 따르는 사람의 평균 효과 | 도구변수 추정값 |
| 누가 따르는 사람인가 | 알 수 없습니다 |
| 따르는 사람의 특성 | 간접적으로만 |
1단계 계수 와 실제 비율 이 같습니다.
그런데 누가 따르는 사람인지는 알 수 없습니다. 에서 처치받은 사람이 따르는 사람인지 언제나 받는 사람인지 구분되지 않습니다.
도구를 바꾸면 따르는 사람이 달라지고 답도 달라집니다. 두 논문의 답이 다른 것이 모순이 아닐 수 있습니다.
(3) 청개구리가 있을 때를 봅니다. 배정과 반대로 행동하는 사람입니다.
| 청개구리 비율 | 1단계 계수 | 추정값 | 참 효과 |
|---|---|---|---|
효과가 모두 이면 셋째 줄까지는 답이 유지됩니다.
그런데 1단계 계수가 에서 로 줄어 표준오차가 커집니다.
넷째 줄에서 1단계 계수가 이 되어 나눗셈 자체가 무너집니다. 따르는 사람과 청개구리가 서로를 지운 자리입니다.
효과가 사람마다 다르면 셋째 줄까지도 뜻을 잃습니다. 서로 반대 방향의 사람들이 섞인 평균이 되기 때문입니다.
이 문제에서 배우는 것. 도구변수 논문을 읽을 때 "누구에 대한 답인가"를 먼저 물어야 합니다. 위 표에서 답은 인구의 절반에 대한 것이고, 나머지 절반의 효과는 과 으로 전혀 다릅니다. 정책을 전면 시행하려는 사람에게 필요한 것은 전체 평균 인데 도구변수는 을 줍니다. 191강 문제 1의 ATE와 ATT 구분이 여기서 세 번째 대상으로 늘어난 셈이며, 추정 대상을 밝히지 않은 인과 주장은 불완전합니다.
바로 확인 4.
확인 4-1. 국소 평균 처치효과가 무엇에 대한 효과인지 쓰세요.
답. 도구가 처치를 바꾼 사람들, 곧 따르는 사람들에 대한 효과입니다.
확인 4-2. 검산에서 전체 평균과 도구변수 추정값을 쓰세요.
답. 과 입니다.
확인 4-3. 검산에서 청개구리 비율 일 때의 1단계 계수와 추정값을 쓰세요.
답. 과 입니다.
문제. 실제 도구를 검사합니다.
(1) 자주 쓰이는 도구를 정리하세요.
(2) 공변량을 넣으면 나아지는지 보세요.
(3) 03단원 전체를 정리하세요.
생각의 실마리. 조건을 갖춘 도구는 드물고 논쟁적입니다. 어떤 것이 쓰이는지 봅니다.
풀이. (1) 자주 쓰이는 도구입니다.
| 도구 | 무엇의 효과를 보나 | 무엇이 의심되나 |
|---|---|---|
| 무작위 배정 | 실제 복용의 효과 | 192강 문제 4와 같음 |
| 추첨 당첨 | 프로그램 참여 효과 | 당첨 자체의 심리 효과 |
| 지역까지의 거리 | 시설 이용의 효과 | 거리가 다른 것과 얽힘 |
| 제도 시행 시점 | 제도 적용의 효과 | 시점 선택이 무작위인가 |
| 의사의 성향 | 약 선택의 효과 | 의사가 환자를 고르는가 |
첫째 줄만 배제 제약이 설계로 보장됩니다. 나머지는 모두 논증입니다.
셋째 줄이 흔하면서 위험합니다. 가까이 사는 사람은 소득도 교육도 다르며, 그것들이 에 직접 닿습니다.
(2) 공변량을 넣어 봅니다. 가 와 얽혀 있고 는 에도 영향을 줍니다.
| 무엇을 넣는가 | 추정값 | 표준오차 | 치우침 |
|---|---|---|---|
| 만 | |||
| 와 |
를 넣으면 치우침이 에서 로 사라집니다.
배제 제약이 를 통제한 뒤에만 성립하는 경우가 많으며, 그런 도구를 조건부로 타당하다고 합니다.
셋째 줄의 거리 도구가 여기에 해당합니다. 소득과 교육을 통제하면 거리가 무작위에 가까워진다는 주장이며, 그 주장이 맞는지는 자료가 말해 주지 않습니다.
(3) 보고 항목과 03단원을 정리합니다.
| 무엇을 보고하는가 | 왜 |
|---|---|
| 1단계 계수와 F | 약한 도구인지 판정 |
| 배제 제약의 논거 | 자료로 검사 못 하므로 |
| 따르는 사람의 비율 | 누구에 대한 답인지 |
| 그냥 회귀와의 차이 | 편향의 방향과 크기 |
| 표준오차의 증가 | 정보를 얼마나 샀는지 |
| 공변량 넣고 뺀 결과 | 조건부 타당성 여부 |
| 강 | 무엇을 가정하나 | 무엇을 못 하나 |
|---|---|---|
| 인과의 언어를 세움 | 추정 방법이 없음 | |
| 무작위 배정이 가능함 | 못 하는 자리가 많음 | |
| 잰 변수가 전부임 | 안 잰 것에 무력함 | |
| 추세가 평행함 | 군별 추세 변화에 무력함 | |
| 지렛대가 배제를 만족함 | 따르는 사람만 답함 |
다섯 강이 모두 가정을 하나씩 걸고 그만큼만 답합니다.
가정 없이 인과를 말하는 방법은 없습니다. 그것이 03단원의 결론입니다.
이 문제에서 배우는 것. 방법의 선택은 가정의 선택입니다. 같은 물음에 네 방법을 쓰면 네 개의 다른 가정 아래 네 개의 답이 나오고, 그 답들이 비슷하면 결론이 튼튼합니다. 그것이 여러 방법을 함께 싣는 이유이며, 각각의 실패 방식이 다르므로 우연히 같은 방향으로 틀릴 이유가 없기 때문입니다. 반대로 답이 크게 다르면 어느 가정이 깨졌는지 찾는 것이 다음 일이 됩니다. 191강 문제 5에서 말한 "인과는 자료가 아니라 설계에서 온다"는 문장이 여기서 완성됩니다.
바로 확인 5.
확인 5-1. 조건부로 타당한 도구가 무엇인지 쓰세요.
답. 공변량을 통제한 뒤에만 배제 제약이 성립하는 도구입니다.
확인 5-2. 검산에서 공변량을 넣기 전후의 치우침을 쓰세요.
답. 와 입니다.
확인 5-3. 03단원 다섯 강이 각각 무엇을 가정하는지 쓰세요.
답. 언어, 무작위 배정, 잰 변수가 전부, 평행 추세, 배제 제약입니다.
| 조건 | 뜻 | 깨지면 |
|---|---|---|
| 연관성 | 가 를 움직임 | 약한 도구 편향 |
| 배제 제약 | 다른 길이 없음 | 위반이 확대돼 들어옴 |
| 독립성 | 교란과 무관 | 그냥 회귀와 같아짐 |
| 단조성 | 청개구리 없음 | 나눗셈이 뜻을 잃음 |
| 무엇 | 어떻게 |
|---|---|
| 추정 | 차이를 차이로 나눔 |
| 일반화 | 두 단계 최소제곱 |
| 표준오차 | 전용 함수로 계산 |
| 강도 판정 | 1단계 F가 이상 |
| 추정 대상 | 따르는 사람의 효과 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 두 단계를 손으로 돌립니다 | 표준오차가 틀립니다 |
| 1단계 F를 안 봅니다 | 약한 도구가 편향을 만듭니다 |
| 전체 효과로 읽습니다 | 따르는 사람의 효과입니다 |
| 배제 제약을 검정하려 합니다 | 검사할 수 없습니다 |
| 도구가 많으면 좋다고 봅니다 | 약한 도구가 섞이면 나빠집니다 |
문제 6. 도구변수 추정식을 쓰세요.
답. 의 차이를 의 차이로 나눕니다.
문제 7. 검산에서 두 차이와 그 몫을 쓰세요.
답. 와 이며 몫은 입니다.
문제 8. 검산에서 회귀와 도구변수의 표준오차 비를 쓰세요.
답. 배입니다.
문제 9. 두 단계를 각각 한 문장으로 쓰세요.
답. 를 에 회귀해 예측값을 얻고, 를 그 예측값에 회귀합니다.
문제 10. 검산에서 두 표준오차를 쓰세요.
답. 와 입니다.
문제 11. 세 조건 중 자료로 검사되는 것을 쓰세요.
답. 연관성만 검사됩니다.
문제 12. 검산에서 직접 경로 일 때의 치우침과 이론값을 쓰세요.
답. 이고 이론값은 입니다.
문제 13. 검산에서 의 힘이 일 때의 F와 가운뎃값을 쓰세요.
답. 과 입니다.
문제 14. 국소 평균 처치효과가 무엇에 대한 효과인지 쓰세요.
답. 도구가 처치를 바꾼 사람들에 대한 효과입니다.
문제 15. 검산에서 전체 평균과 도구변수 추정값을 쓰세요.
답. 과 입니다.
문제 16. 검산에서 청개구리 비율 일 때의 1단계 계수를 쓰세요.
답. 입니다.
문제 17. 검산에서 공변량을 넣기 전후의 치우침을 쓰세요.
답. 와 입니다.
문제 18. 03단원 다섯 강이 각각 무엇을 가정하는지 쓰세요.
답. 언어, 무작위 배정, 잰 변수가 전부, 평행 추세, 배제 제약입니다.
심화 1. 도구가 여럿일 때를 정리하세요.
도구가 둘 이상이면 과대식별이라 하며, 두 가지가 가능해집니다.
| 무엇이 가능한가 | 어떻게 |
|---|---|
| 더 효율적인 추정 | 도구들을 합쳐 씀 |
| 과대식별 검정 | 답이 서로 같은지 봄 |
둘째 줄이 배제 제약을 부분적으로 검사합니다. 도구마다 다른 답이 나오면 적어도 하나는 틀렸습니다.
그런데 답이 같아도 증명이 안 됩니다. 모두 같은 방향으로 틀렸을 수 있으며, 실제로 서로 닮은 도구들은 함께 틀립니다.
약한 도구를 많이 넣으면 오히려 나빠집니다. 문제 3의 편향이 도구 개수에 따라 커지므로, 개수가 아니라 강도가 중요합니다.
심화 2. 회귀 불연속을 정리하세요.
| 무엇이 도구인가 | 문턱을 넘었는가 |
|---|---|
| 무엇을 가정하나 | 문턱 근처에서 다른 것은 연속 |
| 무엇을 추정하나 | 문턱 근처 사람의 효과 |
| 왜 그럴듯한가 | 점수 와 은 거의 같음 |
장학금 커트라인, 합격선, 지원 자격 기준이 실제 사례입니다.
문턱 근처만 쓰므로 답하는 대상이 매우 좁습니다. 193강 문제 3의 잘라 내기와 같은 맞바꿈입니다.
점수를 조작할 수 있으면 무너집니다. 커트라인 바로 위에 사람이 몰려 있는지 확인하는 것이 표준 검사입니다.
심화 3. 인과추론이 예측과 어떻게 다른지 정리하세요.
| 무엇이 목표 | 무엇이 좋은 모형 |
|---|---|
| 예측 | 새 자료에서 잘 맞는 것 |
| 인과 | 개입 후를 맞히는 것 |
189강 문제 1의 교차검증이 인과에서는 기준이 못 됩니다. 교란된 모형이 예측은 더 잘합니다.
193강 문제 5의 AUC가 나쁜 신호였던 것이 같은 이야기입니다.
그래서 인과추론에는 자료로 고를 수 없는 선택이 남습니다. 어떤 변수를 넣을지, 어떤 도구를 쓸지가 지식으로 정해집니다.
심화 4. 기계학습과 인과추론이 만나는 자리를 정리하세요.
| 어디에 쓰는가 | 무엇을 얻는가 |
|---|---|
| 성향 점수 추정 | 유연한 함수 형태 |
| 결과 모형 추정 | 이중 강건과 결합 |
| 이질적 효과 찾기 | 누구에게 효과가 큰지 |
| 도구 개수 줄이기 | 약한 도구 문제 완화 |
셋째 줄이 가장 활발합니다. 효과가 사람마다 다르다는 것을 자료에서 찾아내려는 시도입니다.
그런데 교차적합이 필수입니다. 같은 자료로 모형을 고르고 효과를 재면 189강 문제 5의 선택 후 추론이 됩니다.
S9 이후에서 다시 다룹니다.
심화 5. 인과 주장을 읽는 법을 정리하세요.
| 무엇을 묻는가 | 왜 |
|---|---|
| 무엇이 처치이고 언제인가 | 193강 문제 5의 불멸 시간 |
| 대조군이 무엇인가 | 194강 문제 5 |
| 어떤 가정을 걸었나 | 검사할 수 없는 것 |
| 누구에 대한 답인가 | 191강 문제 1과 195강 문제 4 |
| 가정이 깨지면 얼마나 바뀌나 | 193강 문제 4의 민감도 |
다섯 질문 모두 계산 이전의 것입니다. 통계량이 아니라 설계를 묻습니다.
논문의 방법 절이 짧으면 위험 신호입니다. 위 다섯 가지를 적으려면 지면이 필요합니다.
심화 6. 04단원으로 무엇이 이어지는지 정리하세요.
| 무엇이 달라지는가 | 어디서 |
|---|---|
| 시간 순서가 있음 | 196강 |
| 이웃한 값이 닮음 | 197강 |
| 계절이 되풀이됨 | 198강 |
| 예측이 목표가 됨 | 199강 |
194강에서 시점이 둘뿐이었습니다. 시점이 백 개면 이야기가 달라집니다.
독립 가정이 깨지면 173강 이후의 표준오차가 전부 틀립니다. 04단원은 그 자리를 다룹니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 도구 | 처치를 움직이는 지렛대입니다 | |
| 처치 | 실제로 받았는지입니다 | |
| 연관성 | relevance | 가 를 움직입니다 |
| 배제 제약 | exclusion restriction | 가 다른 길로 안 닿습니다 |
| 단조성 | monotonicity | 청개구리가 없습니다 |
| 2SLS | 두 단계 최소제곱 | 회귀를 두 번 합니다 |
| 1단계 F | first-stage F | 도구의 강도입니다 |
| 약한 도구 | weak instrument | F가 작아 추정이 무너집니다 |
| LATE | 국소 평균 처치효과 | 따르는 사람의 효과입니다 |
| 과대식별 | overidentification | 도구가 미지수보다 많습니다 |
| 조건부 타당 | conditionally valid | 공변량을 통제한 뒤 성립합니다 |
| 회귀 불연속 | RD | 문턱을 도구처럼 씁니다 |
다음은 04단원 시계열이고 첫 강은 196강 시계열의 구조입니다. 03단원이 인과를 다뤘습니다.
이 단원의 모든 계산이 관측이 서로 독립이라는 가정 위에 서 있었습니다. 194강에서 시점이 둘뿐이었는데도 표준오차를 고쳐야 했습니다. 시점이 백 개인 자료에서는 173강 이후의 거의 모든 표준오차가 틀립니다. 04단원은 그 구조를 정면으로 다룹니다.
import numpy as np
rng = np.random.default_rng(20261002)
def pw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return str(s) + " " * max(k, 0)
def rw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return " " * max(k, 0) + str(s)
def ols(y, X):
A = np.concatenate([np.ones((len(y), 1)), X], axis=1)
b, *_ = np.linalg.lstsq(A, y, rcond=None)
r = y - A @ b
s2 = float(r @ r) / (len(y) - A.shape[1])
V = s2 * np.linalg.inv(A.T @ A)
return b, np.sqrt(np.diag(V))
def tsls(y, d, z, W=None):
n = len(y)
one = np.ones((n, 1))
Xex = one if W is None else np.concatenate([one, W], axis=1)
Z = np.concatenate([Xex, z], axis=1)
X = np.concatenate([Xex, d[:, None]], axis=1)
Xh = Z @ np.linalg.solve(Z.T @ Z, Z.T @ X)
b = np.linalg.solve(Xh.T @ X, Xh.T @ y)
r = y - X @ b
s2 = float(r @ r) / (n - X.shape[1])
V = s2 * np.linalg.inv(Xh.T @ X)
return b, np.sqrt(np.abs(np.diag(V)))
# --- 문제 1: 지렛대가 되는 변수 -----------------------------------------
print(" 194강 문제 4 에서 시간에 따라 변하는 교란이 남았습니다")
print(" 이번에는 다른 지렛대를 씁니다")
N1 = 5000
u1 = rng.normal(0, 1, N1)
z1 = (rng.random(N1) < 0.5).astype(float)
d1 = (0.9 * z1 + 0.8 * u1 + rng.normal(0, 1.0, N1) > 0.5).astype(float)
y1 = 1.0 + 2.0 * d1 + 2.5 * u1 + rng.normal(0, 1.0, N1)
print(" z 는 동전 던지기이고 d 는 실제 처치이며 u 는 관측되지 않습니다")
print(" z 는 d 에만 영향을 주고 y 에는 d 를 통해서만 닿습니다. 참 효과는 2.0 입니다")
print(" %s %s %s %s" % (pw("무엇", 26), rw("z 가 0", 14), rw("z 가 1", 14),
rw("차이", 14)))
d0 = float(d1[z1 == 0].mean())
dz = float(d1[z1 == 1].mean())
y0 = float(y1[z1 == 0].mean())
yz = float(y1[z1 == 1].mean())
print(" %s %14.6f %14.6f %14.6f" % (pw("처치받은 비율", 26), d0, dz, dz - d0))
print(" %s %14.6f %14.6f %14.6f" % (pw("결과 y 의 평균", 26), y0, yz, yz - y0))
print(" z 를 바꾸면 처치 비율이 %.6f 만큼 움직입니다. 이것이 첫째 조건입니다"
% (dz - d0))
print(" 그때 y 도 %.6f 만큼 움직입니다. 그 움직임의 원인은 처치뿐입니다"
% (yz - y0))
iv = (yz - y0) / (dz - d0)
print(" 두 움직임을 나누면 %.6f 이고 참값 2.0 입니다" % iv)
print(" 192강 문제 4 의 나눗셈과 같은 식입니다. 이름만 도구변수입니다")
print(" 다른 방법과 견줍니다")
b_o, s_o = ols(y1, d1[:, None])
b_t, s_t = tsls(y1, d1, z1[:, None])
print(" %s %s %s %s %s"
% (pw("무엇으로", 22), rw("추정값", 14), rw("표준오차", 12), rw("참값", 10),
rw("치우침", 12)))
for nm, v, s in [("d 로 그냥 회귀", b_o[1], s_o[1]),
("z 로 도구변수", b_t[-1], s_t[-1]),
("u 를 안다면", ols(y1, np.stack([d1, u1], axis=1))[0][1],
ols(y1, np.stack([d1, u1], axis=1))[1][1])]:
print(" %s %14.6f %12.6f %10.1f %12.6f"
% (pw(nm, 22), v, s, 2.0, v - 2.0))
print(" 그냥 회귀는 u 때문에 위로 치우칩니다")
print(" 도구변수는 u 를 한 번도 안 쓰고 참값 근처에 닿습니다")
print(" 대신 표준오차가 %.4f 배로 커집니다" % (s_t[-1] / s_o[1]))
print(" 정보를 사서 편향을 판 것입니다. 공짜가 아닙니다")
# --- 문제 2: 두 단계 최소제곱 ------------------------------------------
print(" 나눗셈을 회귀 두 번으로 바꿉니다")
one = np.ones((N1, 1))
Z1 = np.concatenate([one, z1[:, None]], axis=1)
g1, _ = np.linalg.lstsq(Z1, d1, rcond=None)[0], None
dhat = Z1 @ g1
b2, _ = np.linalg.lstsq(np.stack([np.ones(N1), dhat], axis=1), y1, rcond=None)[0], None
print(" 1 단계는 d 를 z 에 회귀해 예측값을 얻습니다")
print(" 2 단계는 y 를 그 예측값에 회귀합니다")
print(" %s %s %s" % (pw("단계", 24), rw("계수", 14), rw("무엇을 뜻하는가", 22)))
print(" %s %14.6f %s" % (pw("1 단계의 z 계수", 24), g1[1], rw("z 가 d 를 움직인 양", 22)))
print(" %s %14.6f %s" % (pw("2 단계의 예측값 계수", 24), b2[1], rw("도구변수 추정값", 22)))
print(" 나눗셈으로 구한 %.6f 과 같습니다" % iv)
print(" 예측값에는 u 와 얽힌 부분이 없습니다. z 만으로 만들었기 때문입니다")
print(" 1 단계 계수 %.6f 이 문제 1 표의 처치 비율 차이와 같습니다" % g1[1])
print(" 2 단계의 표준오차를 그대로 쓰면 안 됩니다")
res2 = y1 - (b2[0] + b2[1] * dhat)
A2 = np.stack([np.ones(N1), dhat], axis=1)
s2_wrong = float(np.sqrt(float(res2 @ res2) / (N1 - 2)
* np.linalg.inv(A2.T @ A2)[1, 1]))
print(" %s %s" % (pw("어떻게 계산", 30), rw("표준오차", 14)))
for nm, v in [("2 단계를 그냥 회귀로", s2_wrong), ("올바른 계산", s_t[-1])]:
print(" %s %14.6f" % (pw(nm, 30), v))
print(" 2 단계 잔차는 예측값이 아니라 실제 d 로 계산해야 합니다")
print(" 직접 두 번 돌리면 %.4f 배로 잘못 나옵니다. 전용 함수를 씁니다"
% (s2_wrong / s_t[-1]))
# --- 문제 3: 세 가지 조건 ----------------------------------------------
print(" 도구변수가 되려면 세 가지가 필요합니다")
print(" %s %s %s"
% (pw("조건", 20), rw("무슨 뜻인가", 28), rw("검사할 수 있는가", 20)))
for a, b, c in [("연관성", "z 가 d 를 움직인다", "예"),
("배제 제약", "z 가 y 에 다른 길로 안 닿는다", "아니오"),
("독립성", "z 가 교란과 무관하다", "아니오")]:
print(" %s %s %s" % (pw(a, 20), rw(b, 28), rw(c, 20)))
print(" 첫째만 자료로 확인됩니다. 나머지 둘은 논증으로 지켜야 합니다")
print(" 둘째 조건이 깨지면 어떻게 되는지 봅니다")
N3 = 60000
print(" z 가 y 에 직접 조금 닿게 만들어 봅니다")
print(" %s %s %s %s %s"
% (pw("z 가 y 에 직접 주는 크기", 26), rw("1 단계 계수", 14),
rw("추정값", 14), rw("치우침", 12), rw("직접 크기 나누기 1 단계", 24)))
for direct in [0.0, 0.1, 0.3, 0.6]:
uu = rng.normal(0, 1, N3)
zz = (rng.random(N3) < 0.5).astype(float)
dd = (0.9 * zz + 0.8 * uu + rng.normal(0, 1.0, N3) > 0.5).astype(float)
yy = 1.0 + 2.0 * dd + direct * zz + 2.5 * uu + rng.normal(0, 1.0, N3)
bt, _ = tsls(yy, dd, zz[:, None])
gz, _ = ols(dd, zz[:, None])
print(" %s %14.6f %14.6f %12.6f %24.6f"
% (pw("%.1f" % direct, 26), gz[1], bt[-1], bt[-1] - 2.0,
direct / gz[1]))
print(" 첫 줄의 0.0446 은 표본 오차이고 그것을 빼면 마지막 열과 거의 같습니다")
print(" 마지막 열은 직접 경로를 1 단계 계수로 나눈 값입니다")
print(" 1 단계 계수가 0.28 이므로 직접 경로가 3.6 배로 확대돼 들어옵니다")
print(" 약한 도구일수록 작은 위반이 크게 부풀려집니다")
print(" 첫째 조건이 약하면 어떻게 되는지 봅니다")
print(" z 가 d 를 움직이는 힘을 줄여 가며 봅니다")
S = 1000
print(" %s %s %s %s %s"
% (pw("z 의 힘", 10), rw("1 단계 F", 12), rw("추정값 평균", 14),
rw("추정값의 sd", 14), rw("회귀 쪽으로 치우침", 20)))
b_ols_mean = None
for a in [0.9, 0.4, 0.2, 0.05]:
ests, fs = [], []
skipped = 0
for _ in range(S):
n = 800
uu = rng.normal(0, 1, n)
zz = (rng.random(n) < 0.5).astype(float)
dd = (a * zz + 0.8 * uu + rng.normal(0, 1.0, n) > 0.5).astype(float)
yy = 1.0 + 2.0 * dd + 2.5 * uu + rng.normal(0, 1.0, n)
if dd.std() < 1e-9 or zz.std() < 1e-9:
skipped += 1
continue
gz, sg = ols(dd, zz[:, None])
if abs(gz[1]) < 1e-9:
skipped += 1
continue
bt, _ = tsls(yy, dd, zz[:, None])
fs.append((gz[1] / sg[1]) ** 2)
ests.append(bt[-1])
ests = np.array(ests)
keep = np.abs(ests) < 50
print(" %s %12.2f %14.6f %14.6f %20.6f"
% (pw("%.2f" % a, 10), float(np.mean(fs)), float(np.median(ests)),
float(ests[keep].std(ddof=1)), float(np.median(ests)) - 2.0))
print(" 1 단계 계수가 정확히 0 인 반복은 나눗셈이 안 되므로 뺐습니다")
print(" 가장 약한 자리에서 그런 반복이 %d 번 있었습니다" % skipped)
print(" 50 을 넘는 극단값은 빼고 흩어짐을 쟀습니다. 안 빼면 값이 안 정해집니다")
print(" 가운뎃값을 쓴 것도 같은 이유입니다. 약한 도구의 평균은 존재하지 않습니다")
print(" 1 단계 F 가 66.66 에서 1.23 으로 내려가는 동안 흩어짐이 0.74 에서 11.02 가 됩니다")
print(" 가운뎃값도 2.0148 에서 4.6182 로 밀려 그냥 회귀 값 4.2864 근처까지 갑니다")
print(" 약한 도구는 편향을 못 고치면서 표준오차만 키웁니다")
print(" F 가 10 이상이어야 한다는 관례가 여기서 나옵니다")
# --- 문제 4: 무엇을 추정하는가 -----------------------------------------
print(" 효과가 사람마다 다르면 도구변수가 재는 것이 달라집니다")
N4 = 40000
u4 = rng.normal(0, 1, N4)
kind = rng.random(N4)
z4 = (rng.random(N4) < 0.5).astype(float)
al = kind < 0.25
nt = kind > 0.75
co = (~al) & (~nt)
d4 = np.where(al, 1.0, np.where(nt, 0.0, z4))
tau = np.where(al, 5.0, np.where(nt, 1.0, 2.0))
y4 = 1.0 + tau * d4 + 2.0 * u4 + rng.normal(0, 1.0, N4)
print(" 사람이 세 종류이고 종류마다 효과가 다릅니다")
print(" %s %s %s %s"
% (pw("사람의 종류", 22), rw("비율", 12), rw("그 사람의 효과", 18),
rw("z 가 d 를 바꾸는가", 22)))
for nm, m, e, w in [("언제나 받는 사람", al, 5.0, "아니오"),
("따르는 사람", co, 2.0, "예"),
("절대 안 받는 사람", nt, 1.0, "아니오")]:
print(" %s %12.4f %18.1f %s" % (pw(nm, 22), float(m.mean()), e, rw(w, 22)))
bt4, _ = tsls(y4, d4, z4[:, None])
print(" %s %s" % (pw("무엇", 30), rw("값", 14)))
for nm, v in [("전체 평균 효과", float(tau.mean())),
("따르는 사람의 효과", 2.0),
("도구변수 추정값", float(bt4[-1]))]:
print(" %s %14.6f" % (pw(nm, 30), v))
print(" 전체 평균 %.6f 이 아니라 따르는 사람의 2.0 이 나옵니다"
% float(tau.mean()))
print(" z 가 안 바꾸는 사람에게서는 아무 정보도 안 나오기 때문입니다")
print(" 이것을 국소 평균 처치효과라 합니다")
print(" 누가 따르는 사람인지는 알 수 없습니다")
print(" %s %s" % (pw("무엇을 알 수 있는가", 30), rw("어떻게", 24)))
for a, b in [("따르는 사람의 비율", "1 단계 계수"),
("따르는 사람의 평균 효과", "도구변수 추정값"),
("누가 따르는 사람인가", "알 수 없습니다"),
("따르는 사람의 특성", "간접적으로만")]:
print(" %s %s" % (pw(a, 30), rw(b, 24)))
gz4, _ = ols(d4, z4[:, None])
print(" 1 단계 계수 %.6f 과 실제 비율 %.6f 이 같습니다"
% (gz4[1], float(co.mean())))
print(" 도구를 바꾸면 따르는 사람이 달라지고 답도 달라집니다")
print(" 두 논문의 답이 다른 것이 모순이 아닐 수 있습니다")
print(" 청개구리가 있으면 나눗셈이 뜻을 잃습니다")
N5 = 40000
kind5 = rng.random(N5)
z5 = (rng.random(N5) < 0.5).astype(float)
print(" %s %s %s %s"
% (pw("청개구리 비율", 16), rw("1 단계 계수", 16), rw("추정값", 14),
rw("참 효과", 12)))
for df in [0.0, 0.1, 0.2, 0.3]:
u5 = rng.normal(0, 1, N5)
de = kind5 < df
al5 = (kind5 >= df) & (kind5 < df + 0.2)
nt5 = kind5 >= 0.8
co5 = (~de) & (~al5) & (~nt5)
dd = np.where(al5, 1.0, np.where(nt5, 0.0,
np.where(de, 1.0 - z5, z5)))
yy = 1.0 + 2.0 * dd + 2.0 * u5 + rng.normal(0, 1.0, N5)
bt, _ = tsls(yy, dd, z5[:, None])
gz, _ = ols(dd, z5[:, None])
print(" %s %16.6f %14.6f %12.1f"
% (pw("%.1f" % df, 16), gz[1], bt[-1], 2.0))
print(" 효과가 모두 2.0 이면 셋째 줄까지는 답이 유지됩니다")
print(" 그런데 1 단계 계수가 0.5999 에서 0.1985 로 줄어 표준오차가 커집니다")
print(" 넷째 줄에서 1 단계 계수가 0 이 되어 나눗셈 자체가 무너집니다")
print(" 따르는 사람과 청개구리가 서로를 지운 자리입니다")
print(" 효과가 사람마다 다르면 셋째 줄까지도 뜻을 잃습니다")
# --- 문제 5: 실무에서 쓰는 도구 -----------------------------------------
print(" 실제로 쓰이는 도구가 어떤 것인지 봅니다")
print(" %s %s %s"
% (pw("도구", 22), rw("무엇의 효과를 보나", 22), rw("무엇이 의심되나", 26)))
for a, b, c in [("무작위 배정", "실제 복용의 효과", "192강 문제 4 와 같음"),
("추첨 당첨", "프로그램 참여 효과", "당첨 자체의 심리 효과"),
("지역까지의 거리", "시설 이용의 효과", "거리가 다른 것과 얽힘"),
("제도 시행 시점", "제도 적용의 효과", "시점 선택이 무작위인가"),
("의사의 성향", "약 선택의 효과", "의사가 환자를 고르는가")]:
print(" %s %s %s" % (pw(a, 22), rw(b, 22), rw(c, 26)))
print(" 셋째 줄이 흔하면서 위험합니다. 가까이 사는 사람은 다른 것도 다릅니다")
print(" 공변량을 넣으면 나아지는지 봅니다")
N6 = 40000
w6 = rng.normal(0, 1, N6)
u6 = rng.normal(0, 1, N6)
z6 = (rng.random(N6) < 0.5 + 0.2 * (w6 > 0)).astype(float)
d6 = (0.9 * z6 + 0.8 * u6 + 0.5 * w6 + rng.normal(0, 1.0, N6) > 0.5).astype(float)
y6 = 1.0 + 2.0 * d6 + 1.0 * w6 + 2.0 * u6 + rng.normal(0, 1.0, N6)
bt_no, st_no = tsls(y6, d6, z6[:, None])
bt_w, st_w = tsls(y6, d6, z6[:, None], W=w6[:, None])
print(" z 가 w 와 얽혀 있고 w 는 y 에도 영향을 줍니다. 참 효과는 2.0 입니다")
print(" %s %s %s %s"
% (pw("무엇을 넣는가", 24), rw("추정값", 14), rw("표준오차", 12), rw("치우침", 12)))
for nm, v, s in [("z 만", bt_no[-1], st_no[-1]), ("z 와 w", bt_w[-1], st_w[-1])]:
print(" %s %14.6f %12.6f %12.6f" % (pw(nm, 24), v, s, v - 2.0))
print(" w 를 넣으면 치우침이 1.0659 에서 0.0058 로 사라집니다")
print(" 배제 제약이 w 를 통제한 뒤에만 성립하는 경우가 많습니다")
print(" 그런 도구를 조건부로 타당하다고 합니다")
print(" 절차와 보고 항목을 정리합니다")
print(" %s %s" % (pw("무엇을 보고하는가", 26), rw("왜", 30)))
for a, b in [("1 단계 계수와 F", "약한 도구인지 판정"),
("배제 제약의 논거", "자료로 검사 못 하므로"),
("따르는 사람의 비율", "누구에 대한 답인지"),
("그냥 회귀와의 차이", "편향의 방향과 크기"),
("표준오차의 증가", "정보를 얼마나 샀는지"),
("공변량 넣고 뺀 결과", "조건부 타당성 여부")]:
print(" %s %s" % (pw(a, 26), rw(b, 30)))
print(" 03 단원을 여기서 마칩니다")
print(" %s %s %s"
% (pw("강", 10), rw("무엇을 가정하나", 26), rw("무엇을 못 하나", 26)))
for a, b, c in [("191", "인과의 언어를 세움", "추정 방법이 없음"),
("192", "무작위 배정이 가능함", "못 하는 자리가 많음"),
("193", "잰 변수가 전부임", "안 잰 것에 무력함"),
("194", "추세가 평행함", "군별 추세 변화에 무력함"),
("195", "지렛대가 배제를 만족함", "따르는 사람만 답함")]:
print(" %s %s %s" % (pw(a, 10), rw(b, 26), rw(c, 26)))
print(" 다섯 강이 모두 가정을 하나씩 걸고 그만큼만 답합니다")
print(" 가정 없이 인과를 말하는 방법은 없습니다. 그것이 03 단원의 결론입니다")
# 194강 문제 4 에서 시간에 따라 변하는 교란이 남았습니다
# 이번에는 다른 지렛대를 씁니다
# z 는 동전 던지기이고 d 는 실제 처치이며 u 는 관측되지 않습니다
# z 는 d 에만 영향을 주고 y 에는 d 를 통해서만 닿습니다. 참 효과는 2.0 입니다
# 무엇 z 가 0 z 가 1 차이
# 처치받은 비율 0.341396 0.619048 0.277652
# 결과 y 의 평균 1.650893 2.234822 0.583929
# z 를 바꾸면 처치 비율이 0.277652 만큼 움직입니다. 이것이 첫째 조건입니다
# 그때 y 도 0.583929 만큼 움직입니다. 그 움직임의 원인은 처치뿐입니다
# 두 움직임을 나누면 2.103098 이고 참값 2.0 입니다
# 192강 문제 4 의 나눗셈과 같은 식입니다. 이름만 도구변수입니다
# 다른 방법과 견줍니다
# 무엇으로 추정값 표준오차 참값 치우침
# d 로 그냥 회귀 4.286399 0.068207 2.0 2.286399
# z 로 도구변수 2.103098 0.269435 2.0 0.103098
# u 를 안다면 1.989267 0.031930 2.0 -0.010733
# 그냥 회귀는 u 때문에 위로 치우칩니다
# 도구변수는 u 를 한 번도 안 쓰고 참값 근처에 닿습니다
# 대신 표준오차가 3.9503 배로 커집니다
# 정보를 사서 편향을 판 것입니다. 공짜가 아닙니다
# 나눗셈을 회귀 두 번으로 바꿉니다
# 1 단계는 d 를 z 에 회귀해 예측값을 얻습니다
# 2 단계는 y 를 그 예측값에 회귀합니다
# 단계 계수 무엇을 뜻하는가
# 1 단계의 z 계수 0.277652 z 가 d 를 움직인 양
# 2 단계의 예측값 계수 2.103098 도구변수 추정값
# 나눗셈으로 구한 2.103098 과 같습니다
# 예측값에는 u 와 얽힌 부분이 없습니다. z 만으로 만들었기 때문입니다
# 1 단계 계수 0.277652 이 문제 1 표의 처치 비율 차이와 같습니다
# 2 단계의 표준오차를 그대로 쓰면 안 됩니다
# 어떻게 계산 표준오차
# 2 단계를 그냥 회귀로 0.327055
# 올바른 계산 0.269435
# 2 단계 잔차는 예측값이 아니라 실제 d 로 계산해야 합니다
# 직접 두 번 돌리면 1.2139 배로 잘못 나옵니다. 전용 함수를 씁니다
# 도구변수가 되려면 세 가지가 필요합니다
# 조건 무슨 뜻인가 검사할 수 있는가
# 연관성 z 가 d 를 움직인다 예
# 배제 제약 z 가 y 에 다른 길로 안 닿는다 아니오
# 독립성 z 가 교란과 무관하다 아니오
# 첫째만 자료로 확인됩니다. 나머지 둘은 논증으로 지켜야 합니다
# 둘째 조건이 깨지면 어떻게 되는지 봅니다
# z 가 y 에 직접 조금 닿게 만들어 봅니다
# z 가 y 에 직접 주는 크기 1 단계 계수 추정값 치우침 직접 크기 나누기 1 단계
# 0.0 0.280578 2.044558 0.044558 0.000000
# 0.1 0.275640 2.388330 0.388330 0.362791
# 0.3 0.266996 3.035320 1.035320 1.123611
# 0.6 0.275868 4.251064 2.251064 2.174954
# 첫 줄의 0.0446 은 표본 오차이고 그것을 빼면 마지막 열과 거의 같습니다
# 마지막 열은 직접 경로를 1 단계 계수로 나눈 값입니다
# 1 단계 계수가 0.28 이므로 직접 경로가 3.6 배로 확대돼 들어옵니다
# 약한 도구일수록 작은 위반이 크게 부풀려집니다
# 첫째 조건이 약하면 어떻게 되는지 봅니다
# z 가 d 를 움직이는 힘을 줄여 가며 봅니다
# z 의 힘 1 단계 F 추정값 평균 추정값의 sd 회귀 쪽으로 치우침
# 0.90 66.66 2.014639 0.741232 0.014639
# 0.40 13.41 2.078460 2.039644 0.078460
# 0.20 3.96 2.293109 6.620419 0.293109
# 0.05 1.23 4.618222 11.018483 2.618222
# 1 단계 계수가 정확히 0 인 반복은 나눗셈이 안 되므로 뺐습니다
# 가장 약한 자리에서 그런 반복이 2 번 있었습니다
# 50 을 넘는 극단값은 빼고 흩어짐을 쟀습니다. 안 빼면 값이 안 정해집니다
# 가운뎃값을 쓴 것도 같은 이유입니다. 약한 도구의 평균은 존재하지 않습니다
# 1 단계 F 가 66.66 에서 1.23 으로 내려가는 동안 흩어짐이 0.74 에서 11.02 가 됩니다
# 가운뎃값도 2.0148 에서 4.6182 로 밀려 그냥 회귀 값 4.2864 근처까지 갑니다
# 약한 도구는 편향을 못 고치면서 표준오차만 키웁니다
# F 가 10 이상이어야 한다는 관례가 여기서 나옵니다
# 효과가 사람마다 다르면 도구변수가 재는 것이 달라집니다
# 사람이 세 종류이고 종류마다 효과가 다릅니다
# 사람의 종류 비율 그 사람의 효과 z 가 d 를 바꾸는가
# 언제나 받는 사람 0.2492 5.0 아니오
# 따르는 사람 0.4998 2.0 예
# 절대 안 받는 사람 0.2510 1.0 아니오
# 무엇 값
# 전체 평균 효과 2.496400
# 따르는 사람의 효과 2.000000
# 도구변수 추정값 2.015338
# 전체 평균 2.496400 이 아니라 따르는 사람의 2.0 이 나옵니다
# z 가 안 바꾸는 사람에게서는 아무 정보도 안 나오기 때문입니다
# 이것을 국소 평균 처치효과라 합니다
# 누가 따르는 사람인지는 알 수 없습니다
# 무엇을 알 수 있는가 어떻게
# 따르는 사람의 비율 1 단계 계수
# 따르는 사람의 평균 효과 도구변수 추정값
# 누가 따르는 사람인가 알 수 없습니다
# 따르는 사람의 특성 간접적으로만
# 1 단계 계수 0.500062 과 실제 비율 0.499800 이 같습니다
# 도구를 바꾸면 따르는 사람이 달라지고 답도 달라집니다
# 두 논문의 답이 다른 것이 모순이 아닐 수 있습니다
# 청개구리가 있으면 나눗셈이 뜻을 잃습니다
# 청개구리 비율 1 단계 계수 추정값 참 효과
# 0.0 0.599887 2.016977 2.0
# 0.1 0.397948 1.980261 2.0
# 0.2 0.198497 2.095002 2.0
# 0.3 -0.002257 -3.955655 2.0
# 효과가 모두 2.0 이면 셋째 줄까지는 답이 유지됩니다
# 그런데 1 단계 계수가 0.5999 에서 0.1985 로 줄어 표준오차가 커집니다
# 넷째 줄에서 1 단계 계수가 0 이 되어 나눗셈 자체가 무너집니다
# 따르는 사람과 청개구리가 서로를 지운 자리입니다
# 효과가 사람마다 다르면 셋째 줄까지도 뜻을 잃습니다
# 실제로 쓰이는 도구가 어떤 것인지 봅니다
# 도구 무엇의 효과를 보나 무엇이 의심되나
# 무작위 배정 실제 복용의 효과 192강 문제 4 와 같음
# 추첨 당첨 프로그램 참여 효과 당첨 자체의 심리 효과
# 지역까지의 거리 시설 이용의 효과 거리가 다른 것과 얽힘
# 제도 시행 시점 제도 적용의 효과 시점 선택이 무작위인가
# 의사의 성향 약 선택의 효과 의사가 환자를 고르는가
# 셋째 줄이 흔하면서 위험합니다. 가까이 사는 사람은 다른 것도 다릅니다
# 공변량을 넣으면 나아지는지 봅니다
# z 가 w 와 얽혀 있고 w 는 y 에도 영향을 줍니다. 참 효과는 2.0 입니다
# 무엇을 넣는가 추정값 표준오차 치우침
# z 만 3.065914 0.072957 1.065914
# z 와 w 2.005816 0.085725 0.005816
# w 를 넣으면 치우침이 1.0659 에서 0.0058 로 사라집니다
# 배제 제약이 w 를 통제한 뒤에만 성립하는 경우가 많습니다
# 그런 도구를 조건부로 타당하다고 합니다
# 절차와 보고 항목을 정리합니다
# 무엇을 보고하는가 왜
# 1 단계 계수와 F 약한 도구인지 판정
# 배제 제약의 논거 자료로 검사 못 하므로
# 따르는 사람의 비율 누구에 대한 답인지
# 그냥 회귀와의 차이 편향의 방향과 크기
# 표준오차의 증가 정보를 얼마나 샀는지
# 공변량 넣고 뺀 결과 조건부 타당성 여부
# 03 단원을 여기서 마칩니다
# 강 무엇을 가정하나 무엇을 못 하나
# 191 인과의 언어를 세움 추정 방법이 없음
# 192 무작위 배정이 가능함 못 하는 자리가 많음
# 193 잰 변수가 전부임 안 잰 것에 무력함
# 194 추세가 평행함 군별 추세 변화에 무력함
# 195 지렛대가 배제를 만족함 따르는 사람만 답함
# 다섯 강이 모두 가정을 하나씩 걸고 그만큼만 답합니다
# 가정 없이 인과를 말하는 방법은 없습니다. 그것이 03 단원의 결론입니다