02단원이 계수를 정확히 재는 법을 다뤘습니다. 그 계수를 인과로 읽으려면 무엇이 필요한지가 이 단원의 물음입니다.
177강 문제 4에서 가정 셋을 봤고, 185강 문제 5에서 넣을 변수를 못 재면 답할 수 없다는 벽에 닿았습니다. 03단원은 그 벽을 설계로 넘는 길을 다룹니다.
그 전에 언어부터 세웁니다. "효과"라는 말이 무엇을 가리키는지 정확히 적지 않으면, 무엇이 부족한지도 말할 수 없습니다.
| 무엇 | 뜻 |
|---|---|
| 처치를 받았을 때의 값 | |
| 안 받았을 때의 값 | |
| 개인 효과 | 둘의 차이 |
한 사람에게서 둘 중 하나만 볼 수 있습니다. 이것이 인과추론의 근본 문제이며, 개인 효과는 영영 못 봅니다.
문제. 효과를 정의합니다.
(1) 잠재결과 표를 만드세요.
(2) 여러 평균 효과를 구분하세요.
(3) 관측된 차이를 분해하세요.
생각의 실마리. 사람마다 두 개의 값이 있다고 둡니다. 하나는 처치를 받았을 때, 다른 하나는 안 받았을 때입니다. 우리는 실제로 일어난 쪽만 봅니다.
풀이. (1) 여덟 사람의 표입니다.
| 사람 | 개인 효과 | 실제 처치 | 우리가 보는 값 | ||
|---|---|---|---|---|---|
개인 효과가 에서 까지 사람마다 다릅니다. 186강 문제 4의 이질적 효과가 여기서 실체를 갖습니다.
마지막 열이 실제 자료입니다. 나머지 열은 우리가 절대 못 보는 것이며, 이 표는 설명을 위해 신이 아는 값을 적은 것입니다.
(2) 평균은 여럿입니다.
| 무엇 | 값 | 뜻 |
|---|---|---|
| 평균 처치효과 | 모두에게 처치했다면 | |
| 처치받은 사람의 효과 | 받은 사람에게만 | |
| 안 받은 사람의 효과 | 안 받은 사람에게만 | |
| 우리가 보는 차이 | 두 집단의 평균 차이 |
셋이 다 다릅니다. 효과가 사람마다 다르고 처치받은 사람이 특정한 사람들이기 때문입니다.
넷째 줄이 우연히 셋째 줄과 같습니다. 이 자료에서만 그렇고, 일반적으로는 어느 것과도 다릅니다.
(3) 관측된 차이를 분해합니다.
| 무엇 | 값 |
|---|---|
| 관측된 차이 | |
| 처치받은 사람의 효과 | |
| 선택 치우침 | |
| 둘의 합 |
선택 치우침은 처치 안 받았을 때의 값이 두 집단에서 다른 정도입니다.
| 무엇 | 값 |
|---|---|
| 처치받은 사람들의 평균 | |
| 안 받은 사람들의 평균 |
원래부터 낮았던 사람들이 처치를 받았습니다. 그래서 효과가 인데 으로 작아 보입니다.
이 문제에서 배우는 것. 이 분해가 인과추론 전체의 지도입니다. 관측된 차이는 언제나 두 조각이고, 우리가 원하는 것은 앞쪽인데 자료에는 합만 있습니다. 그래서 모든 방법이 뒤쪽을 으로 만들거나 크기를 아는 것을 목표로 하며, 무작위 배정은 앞의 길이고 통제와 도구변수는 뒤의 길입니다. 그리고 이 두 집단에서 같다는 조건이 177강 문제 4의 교환가능성이며, 자료로 확인할 수 없는 이유도 이 표에서 보입니다. 처치받은 사람의 은 빈칸이기 때문입니다.
바로 확인 1.
확인 1-1. 인과추론의 근본 문제를 한 문장으로 쓰세요.
답. 한 사람에게서 두 잠재결과 중 하나만 볼 수 있습니다.
확인 1-2. 검산에서 세 가지 평균 효과를 쓰세요.
답. , , 입니다.
확인 1-3. 관측된 차이의 분해를 식으로 쓰세요.
답. 처치받은 사람의 효과에 선택 치우침을 더한 값입니다.
문제. 무작위 배정을 검사합니다.
(1) 배정 방식별 추정값을 재세요.
(2) 균형이 실제로 맞는지 확인하세요.
(3) 표본 크기와의 관계를 보세요.
생각의 실마리. 무작위 배정이 하는 일은 선택 치우침을 으로 만드는 것뿐입니다. 그런데 그것이 전부입니다.
풀이. (1) 숨은 특성 가 기본값과 효과에 모두 영향을 줍니다. 참 평균 처치효과는 입니다.
| 배정 방식 | 추정값의 평균 | 참값 | 치우침 |
|---|---|---|---|
| 무작위 | |||
| 가 크면 처치 | |||
| 가 작으면 처치 |
무작위 배정만 참값에 닿습니다. 나머지는 양쪽으로 씩 치우칩니다.
를 잰 적도 없고 이름도 모르는데 무작위가 알아서 균형을 맞춥니다. 이것이 무작위 배정의 힘이며, 아직 발견되지 않은 변수까지 균형이 맞습니다.
(2) 균형이 실제로 맞는지 봅니다.
| 배정 방식 | 차이의 평균 | 차이의 표준편차 | 절댓값 평균 |
|---|---|---|---|
| 무작위 | |||
| 가 크면 처치 |
무작위에서는 평균이 이고 한 번마다는 만큼 흔들립니다.
한 번의 실험에서 균형이 완벽할 필요는 없습니다. 평균으로 맞으면 추정량이 불편이 됩니다.
둘째 줄은 평균 자체가 입니다. 흔들림이 오히려 작은데도 언제나 같은 방향으로 어긋납니다.
(3) 표본 크기와의 관계를 봅니다.
| 표본 크기 | 차이의 표준편차 | 추정값의 표준편차 | 이론값 |
|---|---|---|---|
불균형의 크기가 표본의 제곱근에 반비례합니다. 174강의 그 식입니다.
작은 실험에서는 층화 배정으로 균형을 강제하는 편이 낫습니다. 에서 차이가 이면 효과 추정이 크게 흔들립니다.
이 문제에서 배우는 것. "무작위 배정을 했는데 두 집단이 달라 보인다"는 불평이 잘못된 기대에서 나옵니다. 무작위는 평균적으로 균형을 맞추는 것이지 매번 맞추는 것이 아니며, 에서 어긋나는 것이 정상입니다. 그럴 때 할 일은 배정을 다시 하는 것이 아니라 처음부터 층화 배정을 쓰는 것입니다. 중요한 변수 몇 개로 층을 나눠 각 층 안에서 무작위 배정하면, 그 변수들의 균형은 강제되고 나머지는 여전히 무작위로 맞습니다. 173강 문제 4의 층화 표집과 같은 발상입니다.
바로 확인 2.
확인 2-1. 검산에서 세 배정 방식의 치우침을 쓰세요.
답. , , 입니다.
확인 2-2. 무작위 배정이 균형을 맞추는 방식을 쓰세요.
답. 매번이 아니라 평균적으로 맞추며 한 번마다는 흔들립니다.
확인 2-3. 검산에서 표본이 과 일 때 차이의 표준편차를 쓰세요.
답. 와 입니다.
문제. 통제의 한계를 잽니다.
(1) 관측된 변수와 안 된 변수를 나눠 보정하세요.
(2) 층으로 나눠도 같은지 확인하세요.
(3) 통제할 변수를 잘못 고르면 어떻게 되는지 보세요.
생각의 실마리. 무작위 배정을 못 하면 잰 변수로 보정합니다. 그런데 안 잰 변수가 있으면 어떻게 되는지 봅니다.
풀이. (1) 는 관측되고 는 관측되지 않습니다. 참 효과는 입니다.
| 무엇으로 보정 | 추정값 | 참값 | 치우침 |
|---|---|---|---|
| 보정 없음 | |||
| 만 | |||
| 만 | |||
| 와 |
만 통제하면 치우침이 에서 으로 퍼센트만 줄어듭니다.
넷째 줄만 참값에 닿습니다. 그런데 는 관측되지 않으므로 실제로는 쓸 수 없는 줄입니다.
177강 문제 4의 결론 그대로입니다. 관측 안 된 것은 회귀로 못 고칩니다.
(2) 층으로 나눠 봐도 같습니다. 를 네 구간으로 나눠 각 층에서 차이를 구합니다.
| 층 | 사람 수 | 층 안의 차이 | 참값 |
|---|---|---|---|
가중평균은 이고 만 넣은 회귀는 입니다. 네 층 모두 참값 에서 두 배 가까이 멀리 있습니다.
방법을 바꿔도 안 됩니다. 회귀든 층화든 매칭이든 무엇을 쟀느냐가 정합니다.
(3) 통제할 변수를 잘못 고르면 어떻게 되는지 봅니다.
| 무엇을 통제 | 추정값 | 무엇이 문제 |
|---|---|---|
| 와 | 옳습니다 | |
| 와 와 충돌부 | 충돌부를 넣었습니다 | |
| 와 와 중간변수 | 직접효과가 됩니다 |
충돌부를 넣으면 로 무너집니다. 교란을 다 통제했는데도 그렇습니다.
셋째 줄의 참 총효과는 이고 참 직접효과는 입니다. 중간변수를 넣으면 직접효과를 재는 것이며, 그것이 원하는 답일 수도 있습니다.
185강 문제 2와 같습니다. 회귀는 그림을 실행할 뿐입니다.
이 문제에서 배우는 것. "통제 변수를 최대한 많이 넣는다"는 전략이 두 방향으로 실패합니다. 안 잰 교란이 있으면 아무리 많이 넣어도 부족하고, 잘못된 것을 넣으면 오히려 나빠집니다. 그래서 실무의 정직한 태도는 어느 교란을 못 쟀는지 목록으로 적고 177강 문제 4의 민감도 분석을 붙이는 것입니다. "가능한 모든 변수를 통제했습니다"는 문장은 확인 불가능한 주장이고, **"와 는 통제했으나 는 못 쟀으며 가 이만한 강도면 결론이 뒤집힙니다"**가 확인 가능한 진술입니다.
바로 확인 3.
확인 3-1. 검산에서 만 통제했을 때의 치우침 변화를 쓰세요.
답. 에서 로 퍼센트만 줄어듭니다.
확인 3-2. 검산에서 층화 가중평균과 회귀 결과를 쓰세요.
답. 와 로 둘 다 참값에서 멉니다.
확인 3-3. 검산에서 충돌부를 넣었을 때의 추정값을 쓰세요.
답. 이며 교란을 다 통제했는데도 무너집니다.
문제. 두 문제를 가릅니다.
(1) 교란과 선택편향의 차이를 정리하세요.
(2) 무작위 배정 뒤에 자료가 걸러지면 어떻게 되는지 보세요.
(3) 중도 탈락을 재세요.
생각의 실마리. 무작위 배정이 처치를 받는 과정을 고쳤습니다. 자료에 들어오는 과정은 아직 아무것도 안 했습니다.
풀이. (1) 둘을 가릅니다.
| 무엇 | 어디서 생기는가 | 무엇이 다른가 |
|---|---|---|
| 교란 | 처치를 받는 과정에서 | 누가 처치받았는지가 치우침 |
| 선택편향 | 자료에 들어오는 과정에서 | 누가 관측됐는지가 치우침 |
177강 문제 2의 충돌부 조건이 선택편향의 구조입니다.
(2) 처치를 무작위로 주었고 참 효과는 입니다. 자료가 걸러지면 어떻게 되는지 봅니다.
| 자료에 들어오는 조건 | 남는 비율 | 추정값 | 치우침 |
|---|---|---|---|
| 전부 | |||
| 가 큰 사람만 | |||
| 처치받고 큰 사람 또는 대조군 | |||
| 와 의 합이 일정 범위 |
마지막 줄에서 추정값이 입니다. 참 효과가 인데 부호가 뒤집혔습니다.
무작위 배정이 처치 쪽 치우침만 없앱니다. 관측 쪽은 못 막습니다.
자료에 들어오는 조건이 처치와 결과 모두와 이어지면 관계가 만들어집니다. 177강 문제 2의 버크슨 그대로입니다.
(3) 중도 탈락을 봅니다. 실험 도중 나가는 확률이 처치와 결과에 따라 다른 경우입니다.
| 누가 나가는가 | 남는 비율 | 추정값 | 치우침 |
|---|---|---|---|
| 아무나 절반 | |||
| 처치군이 더 많이 나감 | |||
| 결과가 나쁘면 나감 | |||
| 처치군이고 결과 나쁘면 나감 |
처치군이 더 많이 나가는 것만으로는 안 망가집니다. 치우침이 이며, 결과와 무관하게 나가기 때문입니다.
결과에 따라 나가면 망가집니다. 치우침이 가 됩니다.
둘 다에 따라 나가면 방향이 또 바뀝니다. 이며, 어느 쪽으로 갈지 미리 알 수 없습니다.
175강의 가중치가 여기서 쓰이는데 나가는 이유를 알아야 합니다.
이 문제에서 배우는 것. 탈락률이 두 집단에서 같다는 것이 안전의 증거가 아닙니다. 위 표의 넷째 줄에서 남는 비율이 으로 셋째 줄과 같은데 치우침의 방향이 반대입니다. 봐야 할 것은 탈락률이 아니라 탈락한 사람들이 누구인가이며, 그것은 자료에 없습니다. 그래서 임상시험이 탈락자의 기저 특성을 보고하도록 요구하고, 처리 의도 분석으로 탈락자를 원래 배정된 군에 남겨 계산합니다. 그러면 효과가 희석되지만 선택편향은 안 생깁니다.
바로 확인 4.
확인 4-1. 교란과 선택편향이 어디서 생기는지 각각 쓰세요.
답. 처치를 받는 과정과 자료에 들어오는 과정입니다.
확인 4-2. 검산에서 부호가 뒤집힌 조건과 추정값을 쓰세요.
답. 와 의 합이 일정 범위인 경우이며 입니다.
확인 4-3. 검산에서 결과에 따라 탈락할 때의 치우침을 쓰세요.
답. 이며 처치군이 더 많이 나가는 것만으로는 입니다.
문제. 실무의 절차를 세웁니다.
(1) 균형표를 만드세요.
(2) 균형 검정이 왜 나쁜지 보이세요.
(3) 무작위 배정이 못 하는 것을 정리하세요.
생각의 실마리. 배정이 잘 됐는지 확인하고 싶은 것은 자연스럽습니다. 어떻게 확인할지가 문제입니다.
풀이. (1) 무작위 배정 뒤 세 변수의 균형을 봅니다.
| 변수 | 처치군 평균 | 대조군 평균 | 표준화 차이 | 판정 |
|---|---|---|---|---|
| 나이 | 확인 | |||
| 성별 | 좋음 | |||
| 소득 | 좋음 |
표준화 차이가 아래면 균형이 맞다고 봅니다.
나이가 으로 걸렸는데 무작위 배정이었으므로 우연입니다. 표본 이면 표준화 차이의 흔들림이 이라 흔한 일입니다.
(2) 값으로 균형을 검정하면 안 됩니다.
무작위 배정에서 균형 검정을 만 번 하면 이 유의하게 나옵니다.
무작위였다면 귀무가설이 참이므로, 유의하게 나오는 것이 **정확히 **여야 정상입니다. 검정이 하는 일은 정의상 참인 것을 확인하는 일뿐입니다.
변수를 열 개 보면 하나쯤은 반드시 어긋납니다. 182강의 다중비교입니다.
유의한 것을 보고 통제 변수를 고르면 178강 문제 2의 두 단계 절차가 됩니다.
(3) 무작위 배정이 못 하는 것을 정리합니다.
| 무엇 | 무작위가 막아 주는가 |
|---|---|
| 처치를 받는 과정의 치우침 | 막습니다 |
| 자료에 들어오는 과정의 치우침 | 못 막습니다 |
| 중도 탈락 | 못 막습니다 |
| 측정 오차 | 못 막습니다 |
| 처치를 안 지키는 사람 | 못 막습니다 |
| 일반화 가능성 | 못 막습니다 |
첫째 줄만 막습니다. 나머지 다섯은 설계와 운영이 막아야 합니다.
그래서 무작위 실험도 177강 문제 5의 되먹임에서 자유롭지 않습니다.
마지막으로 이 강의의 결론을 정리합니다.
| 무엇을 묻는가 | 어디서 답하는가 |
|---|---|
| 개인 효과 | 영영 못 답합니다 |
| 평균 효과 | 설계가 있으면 답합니다 |
| 교란을 어떻게 | 무작위나 통제 |
| 선택편향을 어떻게 | 설계와 추적 |
| 잰 적 없는 교란 | 192강부터 195강 |
마지막 줄이 03단원의 나머지입니다. 못 잰 것이 있어도 답하는 길을 찾습니다.
이 문제에서 배우는 것. 균형표를 보고할 때 표준화 차이를 쓰는 이유가 표본 크기와 무관하기 때문입니다. 값은 표본이 크면 사소한 차이도 잡아내고 작으면 큰 차이도 놓치는데, 표준화 차이는 차이의 크기 자체를 말합니다. 178강 문제 5의 효과 크기와 같은 발상이며, 여기서는 "실질적으로 균형이 맞는가"를 묻습니다. 그리고 무작위 배정 뒤에는 균형이 안 맞아도 추정량이 여전히 불편이므로, 표를 보는 목적은 배정이 실제로 무작위였는지 의심하는 것입니다. 무작위였다면 안 맞아도 괜찮고, 심하게 안 맞으면 배정 절차 자체를 의심해야 합니다.
바로 확인 5.
확인 5-1. 표준화 차이를 식으로 쓰고 기준을 쓰세요.
답. 평균 차이를 합동 표준편차로 나눈 값이며 아래면 좋다고 봅니다.
확인 5-2. 균형 검정의 값이 왜 쓸모없는지 검산 값과 함께 쓰세요.
답. 무작위였다면 귀무가설이 참이라 정확히 이 유의하게 나옵니다.
확인 5-3. 무작위 배정이 막아 주는 것 하나와 못 막는 것 둘을 쓰세요.
답. 처치 과정의 치우침만 막고 선택편향과 중도 탈락은 못 막습니다.
| 무엇 | 뜻 |
|---|---|
| 잠재결과 | |
| ATE | 모두에게 처치했다면의 효과 |
| ATT | 처치받은 사람의 효과 |
| 선택 치우침 | 두 집단의 차이 |
| 교환가능성 | 선택 치우침이 |
| 무엇이 문제인가 | 무엇이 고치는가 |
|---|---|
| 교란 | 무작위 배정, 통제 |
| 안 잰 교란 | 192~195강의 설계 |
| 선택편향 | 표집 설계 |
| 중도 탈락 | 추적과 처리 의도 분석 |
| 충돌부 통제 | 안 넣으면 됩니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 관측된 차이를 효과로 읽습니다 | 선택 치우침이 섞여 있습니다 |
| 통제 변수를 많이 넣습니다 | 충돌부는 오히려 해칩니다 |
| 무작위면 다 괜찮다고 봅니다 | 처치 과정만 고칩니다 |
| 탈락률이 같으니 안심합니다 | 누가 나갔는지가 정합니다 |
| 값으로 균형을 검정합니다 | 정의상 참인 것을 검정합니다 |
| 균형이 안 맞아 배정을 다시 합니다 | 층화 배정을 처음부터 씁니다 |
문제 6. 인과추론의 근본 문제를 한 문장으로 쓰세요.
답. 한 사람에게서 두 잠재결과 중 하나만 볼 수 있습니다.
문제 7. 검산에서 세 가지 평균 효과를 쓰세요.
답. , , 입니다.
문제 8. 검산에서 관측된 차이의 분해를 값과 함께 쓰세요.
답. 입니다.
문제 9. 검산에서 세 배정 방식의 치우침을 쓰세요.
답. , , 입니다.
문제 10. 무작위 배정이 균형을 맞추는 방식을 쓰세요.
답. 매번이 아니라 평균적으로 맞추며 한 번마다는 흔들립니다.
문제 11. 검산에서 표본이 과 일 때 차이의 표준편차를 쓰세요.
답. 와 입니다.
문제 12. 검산에서 만 통제했을 때의 치우침 변화를 쓰세요.
답. 에서 로 퍼센트만 줄어듭니다.
문제 13. 검산에서 층화 가중평균과 회귀 결과를 쓰세요.
답. 와 로 둘 다 참값에서 멉니다.
문제 14. 검산에서 충돌부를 넣었을 때의 추정값을 쓰세요.
답. 입니다.
문제 15. 교란과 선택편향이 어디서 생기는지 각각 쓰세요.
답. 처치를 받는 과정과 자료에 들어오는 과정입니다.
문제 16. 검산에서 부호가 뒤집힌 조건과 추정값을 쓰세요.
답. 와 의 합이 일정 범위인 경우이며 입니다.
문제 17. 검산에서 결과에 따라 탈락할 때의 치우침을 쓰세요.
답. 입니다.
문제 18. 균형 검정의 값이 왜 쓸모없는지 검산 값과 함께 쓰세요.
답. 무작위였다면 귀무가설이 참이라 정확히 이 유의하게 나옵니다.
심화 1. 세 가정을 잠재결과로 다시 쓰세요.
177강 문제 4의 가정 셋을 이제 정확히 적을 수 있습니다.
| 가정 | 잠재결과로 |
|---|---|
| 교환가능성 | |
| 양수성 | |
| 일관성 | 관측값이 배정된 잠재결과와 같음 |
첫째 줄이 조건부로 적혔습니다. 를 고정하면 처치가 무작위와 같다는 뜻이며, 를 다 쟀다는 가정이 그 안에 숨어 있습니다.
셋째 줄이 가장 조용히 깨집니다. "처치"가 한 가지로 정의되어야 하는데, 실제로는 용량과 시기와 방식이 다릅니다. 그러면 이 하나가 아니라 여럿이 됩니다.
넷째 가정이 하나 더 있습니다. 한 사람의 처치가 다른 사람의 결과에 영향을 안 준다는 것이며, 간섭 없음이라 합니다. 백신이나 추천 시스템에서 이 가정이 자주 깨집니다.
심화 2. 처리 의도 분석을 정리하세요.
배정한 대로 안 따르는 사람이 있으면 두 가지로 셀 수 있습니다.
| 어떻게 세는가 | 무엇을 추정 | 문제 |
|---|---|---|
| 배정된 대로 | 배정의 효과 | 효과가 희석됩니다 |
| 실제 받은 대로 | 아무것도 | 무작위성이 깨집니다 |
둘째 줄이 흔한 실수입니다. 실제로 받은 사람이 특정한 사람들이므로, 무작위 배정의 이점이 사라집니다.
희석되는 정도가 순응률로 정해집니다. 순응률이 퍼센트면 배정의 효과가 절반이며, 195강의 도구변수가 그것을 되돌리는 방법입니다.
정책 결정에는 배정의 효과가 더 유용한 경우도 많습니다. 실제로 정책은 배정만 할 수 있고 순응을 강제할 수 없기 때문입니다.
심화 3. 층화 배정과 블록 배정을 정리하세요.
문제 2에서 작은 실험의 불균형을 봤습니다. 배정 방식으로 줄일 수 있습니다.
| 방법 | 어떻게 |
|---|---|
| 층화 배정 | 중요한 변수로 층을 나눠 층 안에서 무작위 |
| 블록 배정 | 순서대로 짝을 지어 짝 안에서 무작위 |
| 최소화 | 다음 사람을 불균형이 작아지는 쪽으로 |
둘째 줄이 시간에 따라 등록되는 실험에서 유용합니다. 네 명씩 묶어 둘씩 나누면 언제 멈춰도 균형이 맞습니다.
셋째 줄은 무작위가 아니라 결정적입니다. 균형은 가장 잘 맞는데, 순열 검정을 그 절차에 맞게 해야 합니다.
층화하면 분석에서도 층을 넣어야 합니다. 배정에 쓴 구조를 분석에서 무시하면 표준오차가 보수적으로 나옵니다.
심화 4. 그래프로 통제 변수를 고르는 법을 정리하세요.
177강 문제 3의 그림을 규칙으로 만든 것이 뒷문 기준입니다.
| 단계 | 무엇을 하는가 |
|---|---|
| 로 들어오는 화살표로 시작하는 경로를 찾습니다 | |
| 그 경로가 에 닿는지 봅니다 | |
| 그런 경로를 전부 막는 변수 집합을 고릅니다 | |
| 그 과정에서 충돌부를 열지 않는지 확인합니다 |
넷째 줄이 함정입니다. 충돌부를 통제하면 막혀 있던 경로가 열립니다.
의 후손은 절대 넣으면 안 됩니다. 중간변수와 결과의 결과가 여기 해당하며, 문제 3의 둘째와 셋째 줄입니다.
그림이 맞는지는 자료가 안 말해 줍니다. 그래서 이 규칙은 가정을 명시하는 도구이지 확인하는 도구가 아닙니다.
심화 5. 무작위 실험이 어려운 자리를 정리합니다.
| 왜 못 하는가 | 예 |
|---|---|
| 윤리 | 흡연을 배정할 수 없습니다 |
| 비용 | 정책을 무작위로 못 폅니다 |
| 규모 | 이미 일어난 일 |
| 시간 | 결과가 수십 년 뒤 |
| 대상 | 나라나 기업 단위 |
첫째 줄이 관측 연구가 필요한 근본 이유입니다. 해로울 수 있는 처치는 배정할 수 없으므로, 일어난 것을 관찰할 수밖에 없습니다.
셋째와 넷째 줄에서 자연 실험이 쓰입니다. 177강 심화 1에서 본 대로, 바깥 사정이 처치를 정한 자리를 찾습니다.
다섯째 줄이 요즘 활발합니다. 지역이나 매장 단위로 배정하는 군집 무작위 실험이며, 188강 문제 5의 군집 강건 표준오차가 필요합니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 실험 설계 | 무작위 대조시험 | 192강 |
| 관측 자료 | 성향점수 | 193강 |
| 시간 축 | 이중차분 | 194강 |
| 순응 문제 | 도구변수 | 195강 |
넷은 서로 다른 문제를 풉니다. 192강은 무작위가 가능할 때, 193강은 잰 변수로 보정할 때, 194강은 시간 전후를 쓸 때, 195강은 무작위인 다른 것을 지렛대로 쓸 때입니다.
문제 1의 분해가 넷 모두의 목표이며, 뒤쪽 항을 없애거나 그 크기를 아는 것이 전부입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 와이 원 | 처치를 받았을 때의 값입니다 | |
| 와이 제로 | 안 받았을 때의 값입니다 | |
| ATE | 평균 처치효과 | 모두에게 처치했다면의 평균 효과입니다 |
| ATT | 처치군의 처치효과 | 처치받은 사람에게만의 효과입니다 |
| 선택 치우침 | selection bias | 두 집단의 차이입니다 |
| 근본 문제 | fundamental problem | 잠재결과를 하나만 본다는 것입니다 |
| 교환가능성 | exchangeability | 통제 뒤에 처치가 무작위와 같습니다 |
| 간섭 없음 | no interference | 남의 처치가 내 결과에 영향을 안 줍니다 |
| 표준화 차이 | standardized mean difference | 평균 차이를 표준편차로 나눈 값입니다 |
| 층화 배정 | stratified assignment | 층 안에서 무작위 배정합니다 |
| 처리 의도 분석 | intention to treat | 배정된 대로 세는 분석입니다 |
| 뒷문 기준 | backdoor criterion | 통제할 집합을 고르는 규칙입니다 |
다음은 192강 무작위 대조시험입니다. 이 강의에서 무작위 배정이 무엇을 하는지 봤습니다.
문제 2에서 작은 실험의 불균형을 봤고 문제 4에서 탈락이 만드는 문제를 봤습니다. 192강은 배정 방식, 눈가림, 순응, 중간 분석을 다루며, 183강의 표본 크기 계산이 실험 설계 전체로 확장됩니다.
import numpy as np
rng = np.random.default_rng(20260928)
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 sig(z):
return 1.0 / (1.0 + np.exp(-np.clip(z, -500, 500)))
def ols(y, *xs):
A = np.stack([np.ones(len(y))] + list(xs), axis=1)
b, *_ = np.linalg.lstsq(A, y, rcond=None)
return b
# --- 문제 1: 잠재결과라는 언어 ------------------------------------------
print(" 177강 문제 4 에서 인과의 가정 셋을 봤습니다. 이제 언어부터 세웁니다")
N1 = 8
y0 = np.array([10.0, 12.0, 8.0, 15.0, 9.0, 11.0, 13.0, 7.0])
y1 = np.array([13.0, 13.0, 12.0, 16.0, 14.0, 12.0, 14.0, 12.0])
t1 = np.array([1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0])
print(" 사람마다 처치를 받았을 때의 값과 안 받았을 때의 값이 둘 다 있다고 둡니다")
print(" %s %s %s %s %s %s"
% (pw("사람", 8), rw("y(0)", 8), rw("y(1)", 8), rw("개인 효과", 12),
rw("실제 처치", 12), rw("우리가 보는 값", 16)))
for i in range(N1):
obs = y1[i] if t1[i] == 1 else y0[i]
print(" %s %8.0f %8.0f %12.0f %12.0f %16.0f"
% (pw("%d" % (i + 1), 8), y0[i], y1[i], y1[i] - y0[i], t1[i], obs))
print(" 개인 효과는 y(1) - y(0) 인데 둘 중 하나만 볼 수 있습니다")
print(" 이것을 인과추론의 근본 문제라 합니다. 개인 효과는 영영 못 봅니다")
print(" 그래도 평균은 볼 수 있습니다")
ate = float((y1 - y0).mean())
att = float((y1 - y0)[t1 == 1].mean())
atu = float((y1 - y0)[t1 == 0].mean())
obs_diff = float(y1[t1 == 1].mean() - y0[t1 == 0].mean())
print(" %s %s %s" % (pw("무엇", 24), rw("값", 12), rw("뜻", 30)))
for nm, v, msg in [("평균 처치효과", ate, "모두에게 처치했다면"),
("처치받은 사람의 효과", att, "받은 사람에게만"),
("안 받은 사람의 효과", atu, "안 받은 사람에게만"),
("우리가 보는 차이", obs_diff, "두 집단의 평균 차이")]:
print(" %s %12.4f %s" % (pw(nm, 24), v, rw(msg, 30)))
print(" 우리가 보는 차이가 어느 것과도 다릅니다")
print(" 차이를 두 조각으로 나눕니다")
sel = float(y0[t1 == 1].mean() - y0[t1 == 0].mean())
print(" 관측된 차이 = 처치받은 사람의 효과 + 선택 치우침 입니다")
print(" %s %s" % (pw("무엇", 30), rw("값", 12)))
for nm, v in [("관측된 차이", obs_diff),
("처치받은 사람의 효과", att),
("선택 치우침", sel),
("둘의 합", att + sel)]:
print(" %s %12.4f" % (pw(nm, 30), v))
print(" 선택 치우침은 처치 안 받았을 때의 값이 두 집단에서 다른 정도입니다")
print(" %s %s" % (pw("무엇", 30), rw("값", 12)))
print(" %s %12.4f" % (pw("처치받은 사람들의 y(0) 평균", 30), float(y0[t1 == 1].mean())))
print(" %s %12.4f" % (pw("안 받은 사람들의 y(0) 평균", 30), float(y0[t1 == 0].mean())))
print(" 원래부터 낮았던 사람들이 처치를 받았습니다. 그래서 효과가 작아 보입니다")
# --- 문제 2: 무작위 배정이 하는 일 --------------------------------------
print(" 무작위로 배정하면 선택 치우침이 사라집니다")
N2, R2 = 400, 4000
u2 = rng.normal(0, 1, N2)
base = 10.0 + 3.0 * u2
eff = 2.0 + 1.0 * u2
print(" 숨은 특성 u 가 기본값과 효과에 모두 영향을 줍니다")
print(" 참 평균 처치효과는 %.4f 입니다" % float(eff.mean()))
print(" %s %s %s %s" % (pw("배정 방식", 26), rw("추정값의 평균", 16),
rw("참값", 10), rw("치우침", 12)))
res = {}
for nm, kind in [("무작위", "rand"), ("u 가 크면 처치", "conf"),
("u 가 작으면 처치", "conf2")]:
acc = []
for _ in range(R2 // 4):
if kind == "rand":
t = (rng.random(N2) < 0.5).astype(float)
elif kind == "conf":
t = (rng.random(N2) < sig(1.5 * u2)).astype(float)
else:
t = (rng.random(N2) < sig(-1.5 * u2)).astype(float)
y = base + eff * t + rng.normal(0, 1.0, N2)
acc.append(float(y[t == 1].mean() - y[t == 0].mean()))
res[kind] = float(np.mean(acc))
print(" %s %16.4f %10.4f %12.4f"
% (pw(nm, 26), res[kind], float(eff.mean()), res[kind] - float(eff.mean())))
print(" 무작위 배정만 참값에 닿습니다. 나머지는 양쪽으로 크게 치우칩니다")
print(" u 를 잰 적도 없고 이름도 모르는데 무작위가 알아서 균형을 맞춥니다")
print(" 균형이 실제로 맞는지 확인합니다")
print(" 한 번 배정할 때마다 두 집단의 u 평균 차이를 봅니다")
print(" %s %s %s %s" % (pw("배정 방식", 26), rw("u 차이의 평균", 16),
rw("u 차이의 표준편차", 20), rw("절댓값 평균", 14)))
for nm, kind in [("무작위", "rand"), ("u 가 크면 처치", "conf")]:
d = []
for _ in range(2000):
if kind == "rand":
t = (rng.random(N2) < 0.5).astype(float)
else:
t = (rng.random(N2) < sig(1.5 * u2)).astype(float)
d.append(float(u2[t == 1].mean() - u2[t == 0].mean()))
d = np.array(d)
print(" %s %16.4f %20.4f %14.4f"
% (pw(nm, 26), float(d.mean()), float(d.std(ddof=1)), float(np.abs(d).mean())))
print(" 무작위에서는 평균이 0 이고 한 번마다는 흔들립니다")
print(" 한 번의 실험에서 균형이 완벽할 필요는 없습니다. 평균으로 맞으면 됩니다")
print(" 표본이 작으면 한 번의 불균형이 커집니다")
print(" %s %s %s %s" % (pw("표본 크기", 12), rw("u 차이의 표준편차", 20),
rw("추정값의 표준편차", 20), rw("이론값", 14)))
for n in [20, 100, 400, 1600]:
uu = rng.normal(0, 1, n)
bb = 10.0 + 3.0 * uu
ee = 2.0 + 1.0 * uu
d, a2 = [], []
for _ in range(2000):
t = (rng.random(n) < 0.5).astype(float)
if t.sum() < 2 or t.sum() > n - 2:
continue
y = bb + ee * t + rng.normal(0, 1.0, n)
d.append(float(uu[t == 1].mean() - uu[t == 0].mean()))
a2.append(float(y[t == 1].mean() - y[t == 0].mean()))
print(" %s %20.4f %20.4f %14.4f"
% (pw("%d" % n, 12), float(np.std(d, ddof=1)), float(np.std(a2, ddof=1)),
2.0 / np.sqrt(n)))
print(" 불균형의 크기가 표본의 제곱근에 반비례합니다. 174강의 그 식입니다")
print(" 작은 실험에서는 층화 배정으로 균형을 강제하는 편이 낫습니다")
# --- 문제 3: 통제로 푸는 길과 그 한계 -----------------------------------
print(" 잰 변수가 있으면 통제로 풀 수 있습니다")
N3 = 20000
z3 = rng.normal(0, 1, N3)
u3 = rng.normal(0, 1, N3)
t3 = (rng.random(N3) < sig(0.8 * z3 + 1.2 * u3)).astype(float)
y3 = 2.0 * t3 + 1.5 * z3 + 2.0 * u3 + rng.normal(0, 1.0, N3)
print(" z 는 관측되고 u 는 관측되지 않습니다. 참 효과는 2.0 입니다")
print(" %s %s %s %s" % (pw("무엇으로 보정", 24), rw("추정값", 14),
rw("참값", 10), rw("치우침", 12)))
for nm, cols in [("보정 없음", ()), ("z 만", (z3,)), ("u 만", (u3,)), ("z 와 u", (z3, u3))]:
b = ols(y3, t3, *cols)[1]
print(" %s %14.6f %10.1f %12.6f" % (pw(nm, 24), b, 2.0, b - 2.0))
print(" z 만 통제하면 치우침이 2.6414 에서 1.9270 으로 27 퍼센트만 줄어듭니다")
print(" 177강 문제 4 의 결론 그대로입니다. 관측 안 된 것은 회귀로 못 고칩니다")
print(" 층으로 나눠 봐도 같습니다")
print(" z 를 네 구간으로 나눠 각 층에서 차이를 구하고 가중평균합니다")
edg = np.quantile(z3, [0.0, 0.25, 0.5, 0.75, 1.0])
tot, wsum = 0.0, 0.0
print(" %s %s %s %s" % (pw("층", 12), rw("사람 수", 12), rw("층 안의 차이", 16),
rw("참값", 10)))
for k in range(4):
m = (z3 >= edg[k]) & (z3 <= edg[k + 1] if k == 3 else z3 < edg[k + 1])
d = float(y3[m & (t3 == 1)].mean() - y3[m & (t3 == 0)].mean())
print(" %s %12d %16.6f %10.1f" % (pw("%d" % (k + 1), 12), int(m.sum()), d, 2.0))
tot += d * m.sum()
wsum += m.sum()
print(" 가중평균은 %.6f 이고 z 만 넣은 회귀는 3.927037 입니다" % (tot / wsum))
print(" 네 층 모두 참값 2.0 에서 두 배 가까이 멀리 있습니다")
print(" 방법을 바꿔도 안 됩니다. 무엇을 쟀느냐가 정합니다")
print(" 통제할 변수를 고르는 규칙은 자료 밖에 있습니다")
print(" %s %s %s" % (pw("무엇을 통제", 22), rw("추정값", 14), rw("무엇이 문제", 26)))
c3 = 1.0 * t3 + 1.0 * y3 + rng.normal(0, 1.0, N3)
m3 = 1.0 * t3 + rng.normal(0, 1.0, N3)
y3b = 2.0 * t3 + 1.0 * m3 + 1.5 * z3 + 2.0 * u3 + rng.normal(0, 1.0, N3)
for nm, cols, msg, yy in [("z 와 u", (z3, u3), "옳습니다", y3),
("z 와 u 와 충돌부", (z3, u3, c3), "충돌부를 넣었습니다", y3),
("z 와 u 와 중간변수", (z3, u3, m3), "직접효과가 됩니다", y3b)]:
b = ols(yy, t3, *cols)[1]
print(" %s %14.6f %s" % (pw(nm, 22), b, rw(msg, 26)))
print(" 셋째 줄의 참 총효과는 3.0 이고 참 직접효과는 2.0 입니다")
print(" 185강 문제 2 와 같습니다. 회귀는 그림을 실행할 뿐입니다")
# --- 문제 4: 선택편향은 다른 문제입니다 ---------------------------------
print(" 교란과 선택편향은 서로 다른 문제입니다")
print(" %s %s %s" % (pw("무엇", 16), rw("어디서 생기는가", 24), rw("무엇이 다른가", 26)))
for a, b, c in [("교란", "처치를 받는 과정에서", "누가 처치받았는지가 치우침"),
("선택편향", "자료에 들어오는 과정에서", "누가 관측됐는지가 치우침")]:
print(" %s %s %s" % (pw(a, 16), rw(b, 24), rw(c, 26)))
print(" 177강 문제 2 의 충돌부 조건이 선택편향의 구조입니다")
N4 = 200000
t4 = (rng.random(N4) < 0.5).astype(float)
y4 = 2.0 * t4 + rng.normal(0, 2.0, N4)
print(" 무작위 배정이어도 자료가 걸러지면 무너집니다")
print(" 처치를 무작위로 주었고 참 효과는 2.0 입니다")
print(" %s %s %s %s" % (pw("자료에 들어오는 조건", 26), rw("남는 비율", 12),
rw("추정값", 12), rw("치우침", 12)))
cases = [("전부", np.ones(N4, dtype=bool)),
("y 가 큰 사람만", y4 > 2.0),
("처치받고 y 큰 사람 또는 대조군", (t4 == 0) | (y4 > 2.0)),
("t 와 y 의 합이 일정 범위", np.abs(t4 * 3 + y4 - 3.0) < 2.0)]
for nm, m in cases:
if (m & (t4 == 1)).sum() < 10 or (m & (t4 == 0)).sum() < 10:
continue
d = float(y4[m & (t4 == 1)].mean() - y4[m & (t4 == 0)].mean())
print(" %s %12.6f %12.6f %12.6f"
% (pw(nm, 26), float(m.mean()), d, d - 2.0))
print(" 무작위 배정이 처치 쪽 치우침만 없앱니다. 관측 쪽은 못 막습니다")
print(" 자료에 들어오는 조건이 처치와 결과 모두와 이어지면 관계가 만들어집니다")
print(" 중도 탈락이 같은 구조를 만듭니다")
N5 = 200000
t5 = (rng.random(N5) < 0.5).astype(float)
y5 = 2.0 * t5 + rng.normal(0, 2.0, N5)
print(" 실험 도중 나가는 확률이 처치와 결과에 따라 다른 경우입니다")
print(" %s %s %s %s" % (pw("누가 나가는가", 30), rw("남는 비율", 12),
rw("추정값", 12), rw("치우침", 12)))
for nm, pstay in [("아무나 절반", np.full(N5, 0.5)),
("처치군이 더 많이 나감", np.where(t5 == 1, 0.4, 0.8)),
("결과가 나쁘면 나감", sig(0.5 * y5)),
("처치군이고 결과 나쁘면 나감", sig(0.5 * y5 - 1.5 * t5 + 0.75))]:
keep = rng.random(N5) < pstay
d = float(y5[keep & (t5 == 1)].mean() - y5[keep & (t5 == 0)].mean())
print(" %s %12.6f %12.6f %12.6f"
% (pw(nm, 30), float(keep.mean()), d, d - 2.0))
print(" 처치군이 더 많이 나가는 것만으로는 안 망가집니다. 결과와 무관하기 때문입니다")
print(" 결과에 따라 나가면 망가지고 처치와 결과 둘 다에 따라 나가면 더 망가집니다")
print(" 175강의 가중치가 여기서 쓰이는데 나가는 이유를 알아야 합니다")
# --- 문제 5: 무엇을 확인하고 무엇을 보고할 것인가 -----------------------
print(" 균형표로 배정이 잘 됐는지 봅니다")
N6 = 600
xa = rng.normal(50, 10, N6)
xb = rng.random(N6) < 0.4
xc = rng.exponential(2.0, N6)
t6 = (rng.random(N6) < 0.5).astype(float)
print(" 무작위 배정 뒤 세 변수의 균형을 봅니다")
print(" %s %s %s %s %s" % (pw("변수", 12), rw("처치군 평균", 14),
rw("대조군 평균", 14), rw("표준화 차이", 14),
rw("판정", 12)))
for nm, v in [("나이", xa), ("성별", xb.astype(float)), ("소득", xc)]:
a1 = float(v[t6 == 1].mean())
a0 = float(v[t6 == 0].mean())
sp = np.sqrt((v[t6 == 1].var(ddof=1) + v[t6 == 0].var(ddof=1)) / 2.0)
smd = (a1 - a0) / sp
print(" %s %14.4f %14.4f %14.4f %s"
% (pw(nm, 12), a1, a0, smd, rw("좋음" if abs(smd) < 0.1 else "확인", 12)))
print(" 표준화 차이가 0.1 아래면 균형이 맞다고 봅니다")
print(" 나이가 -0.1283 로 걸렸는데 무작위 배정이었으므로 우연입니다")
print(" 표본 600 이면 표준화 차이의 흔들림이 2/sqrt(600) = %.4f 라 흔한 일입니다"
% (2.0 / np.sqrt(600)))
print(" p 값으로 균형을 검정하면 안 됩니다. 무작위였다면 귀무가설이 참이기 때문입니다")
print(" 균형 검정의 p 값은 고르게 퍼집니다")
R6 = 20000
cnt = 0
for _ in range(R6):
t = (rng.random(200) < 0.5).astype(float)
v = rng.normal(0, 1, 200)
sp = np.sqrt((v[t == 1].var(ddof=1) + v[t == 0].var(ddof=1)) / 2.0)
tv = (v[t == 1].mean() - v[t == 0].mean()) / (sp * np.sqrt(2.0 / 100))
if abs(tv) > 1.972:
cnt += 1
print(" 무작위 배정에서 균형 검정을 2 만 번 하면 %.4f 이 유의하게 나옵니다"
% (cnt / R6))
print(" 변수를 열 개 보면 하나쯤은 반드시 어긋납니다. 182강의 다중비교입니다")
print(" 유의한 것을 보고 통제 변수를 고르면 178강 문제 2 의 두 단계 절차가 됩니다")
print(" 무작위 배정이 못 하는 것들을 정리합니다")
print(" %s %s" % (pw("무엇", 26), rw("무작위가 막아 주는가", 24)))
for a, b in [("처치를 받는 과정의 치우침", "막습니다"),
("자료에 들어오는 과정의 치우침", "못 막습니다"),
("중도 탈락", "못 막습니다"),
("측정 오차", "못 막습니다"),
("처치를 안 지키는 사람", "못 막습니다"),
("일반화 가능성", "못 막습니다")]:
print(" %s %s" % (pw(a, 26), rw(b, 24)))
print(" 첫째 줄만 막습니다. 나머지 다섯은 설계와 운영이 막아야 합니다")
print(" 그래서 무작위 실험도 177강 문제 5 의 되먹임에서 자유롭지 않습니다")
print(" 이 강의의 결론을 정리합니다")
print(" %s %s" % (pw("무엇을 묻는가", 24), rw("어디서 답하는가", 26)))
for a, b in [("개인 효과", "영영 못 답합니다"),
("평균 효과", "설계가 있으면 답합니다"),
("교란을 어떻게", "무작위나 통제"),
("선택편향을 어떻게", "설계와 추적"),
("잰 적 없는 교란", "192강부터 195강")]:
print(" %s %s" % (pw(a, 24), rw(b, 26)))
print(" 마지막 줄이 03단원의 나머지입니다. 못 잰 것이 있어도 답하는 길을 찾습니다")
# 177강 문제 4 에서 인과의 가정 셋을 봤습니다. 이제 언어부터 세웁니다
# 사람마다 처치를 받았을 때의 값과 안 받았을 때의 값이 둘 다 있다고 둡니다
# 사람 y(0) y(1) 개인 효과 실제 처치 우리가 보는 값
# 1 10 13 3 1 13
# 2 12 13 1 0 12
# 3 8 12 4 1 12
# 4 15 16 1 0 15
# 5 9 14 5 1 14
# 6 11 12 1 0 11
# 7 13 14 1 1 14
# 8 7 12 5 0 7
# 개인 효과는 y(1) - y(0) 인데 둘 중 하나만 볼 수 있습니다
# 이것을 인과추론의 근본 문제라 합니다. 개인 효과는 영영 못 봅니다
# 그래도 평균은 볼 수 있습니다
# 무엇 값 뜻
# 평균 처치효과 2.6250 모두에게 처치했다면
# 처치받은 사람의 효과 3.2500 받은 사람에게만
# 안 받은 사람의 효과 2.0000 안 받은 사람에게만
# 우리가 보는 차이 2.0000 두 집단의 평균 차이
# 우리가 보는 차이가 어느 것과도 다릅니다
# 차이를 두 조각으로 나눕니다
# 관측된 차이 = 처치받은 사람의 효과 + 선택 치우침 입니다
# 무엇 값
# 관측된 차이 2.0000
# 처치받은 사람의 효과 3.2500
# 선택 치우침 -1.2500
# 둘의 합 2.0000
# 선택 치우침은 처치 안 받았을 때의 값이 두 집단에서 다른 정도입니다
# 무엇 값
# 처치받은 사람들의 y(0) 평균 10.0000
# 안 받은 사람들의 y(0) 평균 11.2500
# 원래부터 낮았던 사람들이 처치를 받았습니다. 그래서 효과가 작아 보입니다
# 무작위로 배정하면 선택 치우침이 사라집니다
# 숨은 특성 u 가 기본값과 효과에 모두 영향을 줍니다
# 참 평균 처치효과는 1.9544 입니다
# 배정 방식 추정값의 평균 참값 치우침
# 무작위 1.9552 1.9544 0.0007
# u 가 크면 처치 5.5793 1.9544 3.6249
# u 가 작으면 처치 -1.6466 1.9544 -3.6010
# 무작위 배정만 참값에 닿습니다. 나머지는 양쪽으로 크게 치우칩니다
# u 를 잰 적도 없고 이름도 모르는데 무작위가 알아서 균형을 맞춥니다
# 균형이 실제로 맞는지 확인합니다
# 한 번 배정할 때마다 두 집단의 u 평균 차이를 봅니다
# 배정 방식 u 차이의 평균 u 차이의 표준편차 절댓값 평균
# 무작위 0.0008 0.0980 0.0788
# u 가 크면 처치 1.0271 0.0600 1.0271
# 무작위에서는 평균이 0 이고 한 번마다는 흔들립니다
# 한 번의 실험에서 균형이 완벽할 필요는 없습니다. 평균으로 맞으면 됩니다
# 표본이 작으면 한 번의 불균형이 커집니다
# 표본 크기 u 차이의 표준편차 추정값의 표준편차 이론값
# 20 0.4834 1.7684 0.4472
# 100 0.1995 0.7235 0.2000
# 400 0.0991 0.3641 0.1000
# 1600 0.0498 0.1819 0.0500
# 불균형의 크기가 표본의 제곱근에 반비례합니다. 174강의 그 식입니다
# 작은 실험에서는 층화 배정으로 균형을 강제하는 편이 낫습니다
# 잰 변수가 있으면 통제로 풀 수 있습니다
# z 는 관측되고 u 는 관측되지 않습니다. 참 효과는 2.0 입니다
# 무엇으로 보정 추정값 참값 치우침
# 보정 없음 4.641354 2.0 2.641354
# z 만 3.927037 2.0 1.927037
# u 만 3.108595 2.0 1.108595
# z 와 u 2.026847 2.0 0.026847
# z 만 통제하면 치우침이 2.6414 에서 1.9270 으로 27 퍼센트만 줄어듭니다
# 177강 문제 4 의 결론 그대로입니다. 관측 안 된 것은 회귀로 못 고칩니다
# 층으로 나눠 봐도 같습니다
# z 를 네 구간으로 나눠 각 층에서 차이를 구하고 가중평균합니다
# 층 사람 수 층 안의 차이 참값
# 1 5000 4.129963 2.0
# 2 5000 3.892301 2.0
# 3 5000 3.987921 2.0
# 4 5000 4.109692 2.0
# 가중평균은 4.029969 이고 z 만 넣은 회귀는 3.927037 입니다
# 네 층 모두 참값 2.0 에서 두 배 가까이 멀리 있습니다
# 방법을 바꿔도 안 됩니다. 무엇을 쟀느냐가 정합니다
# 통제할 변수를 고르는 규칙은 자료 밖에 있습니다
# 무엇을 통제 추정값 무엇이 문제
# z 와 u 2.026847 옳습니다
# z 와 u 와 충돌부 0.514374 충돌부를 넣었습니다
# z 와 u 와 중간변수 1.986462 직접효과가 됩니다
# 셋째 줄의 참 총효과는 3.0 이고 참 직접효과는 2.0 입니다
# 185강 문제 2 와 같습니다. 회귀는 그림을 실행할 뿐입니다
# 교란과 선택편향은 서로 다른 문제입니다
# 무엇 어디서 생기는가 무엇이 다른가
# 교란 처치를 받는 과정에서 누가 처치받았는지가 치우침
# 선택편향 자료에 들어오는 과정에서 누가 관측됐는지가 치우침
# 177강 문제 2 의 충돌부 조건이 선택편향의 구조입니다
# 무작위 배정이어도 자료가 걸러지면 무너집니다
# 처치를 무작위로 주었고 참 효과는 2.0 입니다
# 자료에 들어오는 조건 남는 비율 추정값 치우침
# 전부 1.000000 1.996861 -0.003139
# y 가 큰 사람만 0.327860 0.554621 -1.445379
# 처치받고 y 큰 사람 또는 대조군 0.750470 3.603643 1.603643
# t 와 y 의 합이 일정 범위 0.389515 -1.662590 -3.662590
# 무작위 배정이 처치 쪽 치우침만 없앱니다. 관측 쪽은 못 막습니다
# 자료에 들어오는 조건이 처치와 결과 모두와 이어지면 관계가 만들어집니다
# 중도 탈락이 같은 구조를 만듭니다
# 실험 도중 나가는 확률이 처치와 결과에 따라 다른 경우입니다
# 누가 나가는가 남는 비율 추정값 치우침
# 아무나 절반 0.500105 2.007909 0.007909
# 처치군이 더 많이 나감 0.598895 1.994608 -0.005392
# 결과가 나쁘면 나감 0.598095 1.675859 -0.324141
# 처치군이고 결과 나쁘면 나감 0.600190 2.158494 0.158494
# 처치군이 더 많이 나가는 것만으로는 안 망가집니다. 결과와 무관하기 때문입니다
# 결과에 따라 나가면 망가지고 처치와 결과 둘 다에 따라 나가면 더 망가집니다
# 175강의 가중치가 여기서 쓰이는데 나가는 이유를 알아야 합니다
# 균형표로 배정이 잘 됐는지 봅니다
# 무작위 배정 뒤 세 변수의 균형을 봅니다
# 변수 처치군 평균 대조군 평균 표준화 차이 판정
# 나이 49.2962 50.5700 -0.1283 확인
# 성별 0.3916 0.4055 -0.0284 좋음
# 소득 2.0520 1.9477 0.0496 좋음
# 표준화 차이가 0.1 아래면 균형이 맞다고 봅니다
# 나이가 -0.1283 로 걸렸는데 무작위 배정이었으므로 우연입니다
# 표본 600 이면 표준화 차이의 흔들림이 2/sqrt(600) = 0.0816 라 흔한 일입니다
# p 값으로 균형을 검정하면 안 됩니다. 무작위였다면 귀무가설이 참이기 때문입니다
# 균형 검정의 p 값은 고르게 퍼집니다
# 무작위 배정에서 균형 검정을 2 만 번 하면 0.0486 이 유의하게 나옵니다
# 변수를 열 개 보면 하나쯤은 반드시 어긋납니다. 182강의 다중비교입니다
# 유의한 것을 보고 통제 변수를 고르면 178강 문제 2 의 두 단계 절차가 됩니다
# 무작위 배정이 못 하는 것들을 정리합니다
# 무엇 무작위가 막아 주는가
# 처치를 받는 과정의 치우침 막습니다
# 자료에 들어오는 과정의 치우침 못 막습니다
# 중도 탈락 못 막습니다
# 측정 오차 못 막습니다
# 처치를 안 지키는 사람 못 막습니다
# 일반화 가능성 못 막습니다
# 첫째 줄만 막습니다. 나머지 다섯은 설계와 운영이 막아야 합니다
# 그래서 무작위 실험도 177강 문제 5 의 되먹임에서 자유롭지 않습니다
# 이 강의의 결론을 정리합니다
# 무엇을 묻는가 어디서 답하는가
# 개인 효과 영영 못 답합니다
# 평균 효과 설계가 있으면 답합니다
# 교란을 어떻게 무작위나 통제
# 선택편향을 어떻게 설계와 추적
# 잰 적 없는 교란 192강부터 195강
# 마지막 줄이 03단원의 나머지입니다. 못 잰 것이 있어도 답하는 길을 찾습니다