82강에서 최소제곱을 기하로 풀었습니다. 잔차를 열공간에 직교시키는 정사영이었고, 확률은 한 번도 나오지 않았습니다.
그래서 계수가 얼마나 믿을 만한지 말할 수 없었습니다. 계수가 로 나왔을 때 그것이 진짜 효과인지 잡음인지 판정할 도구가 없었습니다.
잡음에 분포를 놓는 순간 06단원의 도구가 전부 들어옵니다.
| 필요한 것 | 어디서 오는가 |
|---|---|
| 계수의 분포 | 140강 다변량 정규, 문제 1 |
| 잔차분산과 자유도 | 144강 심화 1 코크런 분해 |
| 계수 하나의 검정 | 145강 분포 |
| 여러 계수의 검정 | 145강 분포 |
| 정규화 | 150강 문제 3 |
| 다중 비교 | 152강 문제 5 |
이 강의는 06단원의 결산입니다. 148강의 좋은 추정량, 149강의 최대우도, 150강의 정규화, 151강의 구간, 152강의 검정이 회귀라는 하나의 모형에서 동시에 쓰입니다.
문제. , 설명변수 개에 절편을 붙여 만 번 회귀를 돌립니다.
(1) 계수의 평균을 참값과 견주세요.
(2) 표준편차를 이론과 견주세요.
(3) 공분산행렬 전체를 확인하세요.
생각의 실마리. 이고 가 정규이므로, 는 정규 벡터의 선형변환입니다. 140강에서 그것이 다시 다변량 정규임을 보았습니다.
풀이. (1)(2) 검산 결과입니다. 입니다.
| 계수 | 참값 | 추정 평균 | 추정 표준편차 | 이론 표준편차 |
|---|---|---|---|---|
(3) **공분산행렬 전체와 의 최대 차이가 **입니다.
이 문제에서 배우는 것: 계수의 정확한 분포.
최소제곱 계수의 분포. 가 고정이고 이면
불편성에는 정규성이 필요 없습니다. 는 만 있으면 나오며, 132강의 선형성입니다.
공분산에는 등분산과 무상관이 필요합니다. 가 깨지면 이 식이 틀립니다.
정규성은 분포 전체를 말할 때만 필요합니다.
| 가정 | 무엇을 위해 |
|---|---|
| \mathbb{E}[\boldsymbol\varepsilon]=\mathbf | 불편성 |
| 공분산 공식 | |
| 정규성 | 정확한 분포와 분포 |
| 가 완전계수 | 역행렬의 존재 |
가우스-마르코프 정리. 앞의 두 가정만으로도 최소제곱은 선형 불편추정량 중 분산이 가장 작습니다.
정규성 없이도 최적이라는 강한 결론이며, 148강의 기준으로 말하면 선형이라는 제약 안에서의 효율입니다. 149강 심화 2에서 본 대로 정규 잡음이면 그것이 최대우도추정이기도 합니다.
바로 확인 1.
확인 1-1. 최소제곱 계수의 분포를 쓰세요.
답. 입니다.
확인 1-2. 불편성에 필요한 가정을 쓰세요.
답. 잡음의 평균이 이면 됩니다.
확인 1-3. 가우스-마르코프 정리를 쓰세요.
답. 선형 불편추정량 중 최소분산이며 정규성이 필요 없습니다.
문제. 잔차로 을 추정합니다.
(1) 자유도를 세고 의 불편성을 확인하세요.
(2) 의 분포를 확인하세요.
(3) 계수의 통계량을 만들어 검증하세요.
생각의 실마리. 144강 문제 4에서 평균 하나를 추정하느라 자유도를 하나 잃었습니다. 회귀에서는 계수를 개 추정하므로 그만큼 잃습니다.
풀이. (1)(2)(3) 검산 결과입니다. , 이므로 자유도가 입니다.
| 항목 | 수치 | 이론 |
|---|---|---|
| 평균 | ||
| 평균 | ||
| 분산 | ||
| 통계량과 의 최대 거리 | ||
| 분위수 구간의 포함률 | ||
| 정규 분위수를 쓸 때의 포함률 |
**평균 이고 분산 **이므로 입니다.
이 문제에서 배우는 것: 회귀의 자유도와 검정.
잔차분산과 그 분포.
144강 심화 1의 코크런 분해가 그대로입니다. 을 열공간 차원과 그 직교여공간 차원으로 쪼개면, 앞쪽이 이고 뒤쪽이 RSS이며 직교하므로 독립입니다.
계수의 검정.
분자가 정규이고 분모가 독립인 카이제곱의 제곱근이므로 145강 문제 2의 구조와 정확히 같습니다.
| 관계 | 회귀에서 |
|---|---|
| 144강의 와 S^ | 와 s^ |
| 자유도 | 자유도 |
| (\hat{\beta}_{j}-\beta_{j})/\text |
설명변수를 늘리면 자유도가 줄어듭니다. 임계값이 커지고 의 추정도 불안정해지므로, 변수를 넣는 데는 대가가 있습니다.
정규 분위수를 쓰면 포함률이 로 떨어집니다. 145강 문제 2와 같은 이야기이며, 가 커질수록 차이가 벌어집니다.
바로 확인 2.
확인 2-1. 잔차분산의 자유도를 쓰세요.
답. 입니다.
확인 2-2. 의 분포를 쓰세요.
답. 입니다.
확인 2-3. 계수의 통계량의 분포를 쓰세요.
답. 입니다.
문제. 아무 관계 없는 잡음 변수 개를 모형에 추가합니다.
(1) 부분 통계량의 분포를 확인하세요.
(2) 결정계수와 조정 결정계수를 견주세요.
(3) 이 무엇인지 확인하세요.
생각의 실마리. 계수 하나면 로 됩니다. 여러 개를 동시에 검정하려면 152강 문제 5의 다중 비교를 피해야 하며, 하나의 통계량으로 묶는 것이 입니다.
풀이. (1) 검산 결과입니다.
| 항목 | 값 |
|---|---|
| 와 의 최대 거리 | |
| 의 평균 | (이론 ) |
| 기각률 |
(2) 결정계수를 견줍니다.
| 변수 | 결정계수 평균 | 조정 결정계수 평균 |
|---|---|---|
| 넣기 전 | ||
| 넣은 뒤 |
| 항목 | 비율 |
|---|---|
| 결정계수가 올라간 비율 | |
| 조정 결정계수가 올라간 비율 | |
| 인 비율 |
결정계수는 올라갑니다. 잡음이어도 잔차제곱합이 반드시 줄기 때문이며, 벌점이 전혀 없습니다.
뒤의 두 비율이 정확히 같습니다. 조정 결정계수는 일 때만 올라가며, 이것은 우연이 아니라 대수적 항등식입니다.
그런데 나 올라갑니다. 잡음의 가 평균 으로 을 조금 넘으므로, 조정 결정계수도 잡음을 완전히 걸러 내지 못합니다.
(3) **과 의 최대 거리가 **입니다.
이 문제에서 배우는 것: 검정과 결정계수.
부분 검정. 계수 개가 모두 이라는 가설을 검정합니다.
분자와 분모가 독립인 카이제곱이므로 145강 문제 4의 정의 그대로입니다. 코크런 정리가 그 독립성을 줍니다.
| 검정 | 대상 | 분포 |
|---|---|---|
| 검정 | 계수 하나 | t_ |
| 부분 | 계수 개 | F_ |
| 전체 | 절편 뺀 전부 | F_ |
| 관계 | t^{2}=F_ |
결정계수와 조정 결정계수.
은 모형 선택에 쓸 수 없습니다. 변수를 넣을수록 반드시 커지므로 가장 복잡한 모형이 언제나 이깁니다.
조정 결정계수도 충분하지 않습니다. 문턱이 인데 그것은 매우 낮은 기준이며, 212강의 교차검증이나 정보기준이 필요합니다.
바로 확인 3.
확인 3-1. 부분 통계량과 그 분포를 쓰세요.
답. 이며 입니다.
확인 3-2. 잡음 변수를 넣을 때 이 어떻게 되는지 쓰세요.
답. 반드시 올라갑니다.
확인 3-3. 조정 결정계수가 올라가는 조건을 쓰세요.
답. 일 때입니다.
문제. 설명변수 두 개의 상관을 바꿔 가며 봅니다.
(1) 계수의 표준편차가 어떻게 변하는지 재세요.
(2) 분산 팽창 인자와 견주세요.
(3) 계수의 부호가 뒤집히는 비율을 재세요.
생각의 실마리. 이 계수의 공분산을 정합니다. 두 열이 거의 같은 방향이면 가 특이에 가까워지고 역행렬이 폭발합니다.
풀이. (1)(2)(3) , 참 계수가 둘 다 입니다.
| 상관 | 계수 표준편차 | 대비 배수 | VIF 이론 | 부호가 뒤집힌 비율 |
|---|---|---|---|---|
배수가 VIF의 제곱근입니다. , , 으로 넷째 열과 셋째 열이 맞습니다.
**에서 참값이 인데 계수가 음수로 나오는 경우가 **입니다. 부호조차 믿을 수 없습니다.
이 문제에서 배우는 것: 다중공선성.
분산 팽창 인자. 번째 변수를 나머지로 회귀했을 때의 결정계수를 이라 하면
**두 변수만 있으면 **이므로 VIF가 입니다.
| 증상 | 내용 |
|---|---|
| 계수의 표준오차가 커집니다 | VIF의 제곱근만큼 |
| 부호가 뒤집힙니다 | 표본마다 다른 답 |
| 개별 는 유의하지 않은데 전체 는 유의합니다 | 전형적 신호 |
| 자료를 조금 바꾸면 계수가 크게 변합니다 | 불안정 |
| 예측은 멀쩡합니다 | 적합값은 안정적 |
마지막 줄이 중요합니다. 다중공선성은 개별 계수의 해석만 무너뜨리고 예측은 건드리지 않습니다. 목적이 예측이면 문제가 아닐 수 있습니다.
대처법.
| 방법 | 내용 |
|---|---|
| 변수를 뺍니다 | 중복된 것을 하나만 남깁니다 |
| 릿지 회귀 | 150강 문제 3, 가 안정시킵니다 |
| 주성분회귀 | 89강의 직교 방향으로 바꿉니다 |
| 자료를 더 모읍니다 | 이 늘면 완화됩니다 |
| 해석을 포기합니다 | 예측만 쓴다면 그대로 둡니다 |
둘째 줄이 150강과 직접 이어집니다. 은 이면 언제나 역행렬이 있으며, 148강 심화 4의 스타인 축소가 여기서 실용적 이유를 얻습니다.
바로 확인 4.
확인 4-1. 분산 팽창 인자의 정의를 쓰세요.
답. 이며 은 그 변수를 나머지로 회귀한 결정계수입니다.
확인 4-2. 표준오차가 커지는 배수를 쓰세요.
답. VIF의 제곱근입니다.
확인 4-3. 다중공선성이 건드리지 않는 것을 쓰세요.
답. 예측과 적합값입니다.
문제. 교란변수가 있는 자료를 만듭니다. 의 참 효과는 입니다.
(1) 단순회귀의 기울기를 구하세요.
(2) 교란변수를 넣은 다중회귀와 견주세요.
(3) 집단을 무시하면 방향이 뒤집히는 예를 만드세요.
생각의 실마리. 이고 인데 는 없습니다. 를 빼면 와 가 상관되어 보입니다.
풀이. (1)(2) 검산 결과입니다. 입니다.
| 항목 | 값 |
|---|---|
| 단순회귀 의 기울기 | (참 효과 ) |
| 다중회귀 의 기울기 | |
| 생략변수 편향의 이론값 |
단순회귀가 을 냅니다. 참 효과가 정확히 인데 강한 효과가 있는 것처럼 보이며, 전부 의 몫입니다.
이론값과 소수점 다섯 자리까지 맞습니다.
(3) 집단을 무시하는 경우입니다.
| 항목 | 값 |
|---|---|
| 전체를 한 줄로 적합한 기울기 | |
| 집단별 기울기 | , , |
전체로 보면 양의 관계인데 집단 안에서는 모두 음의 관계입니다. 참 기울기가 인데 전체 회귀는 를 냅니다.
이 문제에서 배우는 것: 계수는 조건부 관계입니다.
생략변수 편향. 참 모형이 인데 를 빼고 회귀하면
이며 는 에 를 회귀한 계수입니다.
편향이 두 조건에서만 사라집니다. 가 에 영향이 없거나() 가 와 무관해야() 합니다.
| 상황 | 계수의 뜻 |
|---|---|
| 무작위 배정 실험 | 인과 효과 |
| 교란변수를 모두 통제 | 인과 효과 |
| 관측 자료, 일부만 통제 | 조건부 상관 |
| 매개변수를 통제 | 직접 효과만 남습니다 |
| 충돌변수를 통제 | 없던 상관이 생깁니다 |
다섯째 줄이 뜻밖입니다. 통제하면 언제나 나아지는 것이 아니며, 공통 결과인 변수를 통제하면 오히려 가짜 상관이 생깁니다.
심슨의 역설. 집단을 무시하면 관계의 방향이 뒤집힐 수 있습니다.
138강 문제 4에서 상관계수가 같아도 모양이 다를 수 있다고 했습니다. 여기서는 한 걸음 더 나아가 부호까지 뒤집힙니다.
"어떤 변수를 넣을지"가 통계 문제가 아닙니다. 자료만 보아서는 가 교란변수인지 매개변수인지 충돌변수인지 알 수 없으며, 도메인 지식과 인과 구조가 정해야 합니다. 177강 관측 데이터의 함정이 이 문제를 본격적으로 다룹니다.
바로 확인 5.
확인 5-1. 생략변수 편향의 식을 쓰세요.
답. 이며 는 에 를 회귀한 계수입니다.
확인 5-2. 편향이 사라지는 두 조건을 쓰세요.
답. 가 에 영향이 없거나 와 무관해야 합니다.
확인 5-3. 심슨의 역설을 쓰세요.
답. 집단을 무시하면 관계의 방향이 뒤집힐 수 있습니다.
| 개념 | 식 |
|---|---|
| 최소제곱 해 | \hat{\boldsymbol\beta}=(X^{\top}X)^{-1}X^{\top}\mathbf |
| 계수의 분포 | |
| 잔차분산 | |
| 잔차의 분포 | \text{RSS}/\sigma^{2}\sim\chi^{2}_ |
| 계수의 | (\hat{\beta}_{j}-\beta_{j})/\text{se}\sim t_ |
| 부분 | |
| 관계 | t^{2}=F_ |
| 결정계수 | 1-\text{RSS}/\text |
| 조정 결정계수 | |
| 분산 팽창 인자 | |
| 생략변수 편향 | \beta_{Z}\delta_ |
| 가정 | 무엇을 위해 |
|---|---|
| \mathbb{E}[\boldsymbol\varepsilon]=\mathbf | 불편성 |
| 공분산 공식, 가우스-마르코프 | |
| 정규성 | 정확한 와 |
| 가 완전계수 | 해의 유일성 |
| 교란변수 없음 | 인과 해석 |
| 다중공선성 | 표준편차 배수 | VIF |
|---|---|---|
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 자유도를 로 씁니다 | 입니다 |
| 으로 모형을 고릅니다 | 잡음을 넣어도 반드시 올라갑니다 |
| 조정 을 믿습니다 | 문턱이 로 낮습니다 |
| 개별 가 유의하지 않으면 뺍니다 | 다중공선성일 수 있습니다 |
| 계수를 인과로 읽습니다 | 교란변수가 없어야 합니다 |
| 변수를 많이 통제할수록 낫다고 봅니다 | 충돌변수는 가짜 상관을 만듭니다 |
| 집단을 무시하고 전체만 봅니다 | 심슨의 역설이 있습니다 |
문제 6. 최소제곱 계수의 분포를 쓰세요.
답. 입니다.
문제 7. 불편성과 공분산 공식에 각각 필요한 가정을 쓰세요.
답. 잡음의 평균이 인 것과 공분산이 인 것입니다.
문제 8. 가우스-마르코프 정리를 쓰세요.
답. 선형 불편추정량 중 최소분산이며 정규성이 필요 없습니다.
문제 9. 잔차분산의 자유도와 그 이유를 쓰세요.
답. 이며 계수를 개 추정하기 때문입니다.
문제 10. 계수의 통계량의 분포를 쓰세요.
답. 입니다.
문제 11. 부분 통계량과 그 분포를 쓰세요.
답. 이며 입니다.
문제 12. 이 무엇인지 쓰세요.
답. 입니다.
문제 13. 잡음 변수를 넣을 때 두 결정계수가 어떻게 되는지 쓰세요.
답. 은 반드시 올라가고 조정 은 일 때만 올라갑니다.
문제 14. 검산에서 조정 이 올라간 비율을 쓰세요.
답. 이며 인 비율과 같습니다.
문제 15. 분산 팽창 인자와 표준오차의 관계를 쓰세요.
답. 표준오차가 VIF의 제곱근만큼 커집니다.
문제 16. 다중공선성이 건드리지 않는 것을 쓰세요.
답. 예측과 적합값입니다.
문제 17. 생략변수 편향의 식과 사라지는 조건을 쓰세요.
답. 이며 둘 중 하나가 이면 사라집니다.
문제 18. 심슨의 역설을 쓰고 검산의 수치를 쓰세요.
답. 집단을 무시하면 방향이 뒤집히며 전체 , 집단별 약 이었습니다.
심화 1. 회귀의 가정이 깨질 때를 정리하세요.
| 깨지는 가정 | 증상 | 대처 |
|---|---|---|
| 등분산 | 잔차가 부채꼴로 퍼집니다 | 가중최소제곱, 로버스트 표준오차 |
| 무상관 | 시계열 잔차에 패턴 | 일반화최소제곱, 군집 표준오차 |
| 선형성 | 잔차에 곡선 패턴 | 변환, 다항, 스플라인 |
| 정규성 | 잔차 분위수 그림이 휩니다 | 큰 이면 대개 괜찮습니다 |
| 이상치 없음 | 지렛대가 큰 점이 지배 | 로버스트 회귀, 진단 |
첫째 줄과 둘째 줄이 표준오차를 망칩니다. 계수 자체는 여전히 불편인데 149강 문제 5의 샌드위치 분산이 필요합니다.
넷째 줄이 가장 덜 위험합니다. 143강의 중심극한정리가 를 정규로 만들어 주므로, 이 크면 정규성 위배는 대개 문제가 되지 않습니다.
다섯째 줄이 조용합니다. 지렛대 가 큰 점 하나가 계수를 통째로 끌고 갈 수 있으며, 쿡 거리로 진단합니다.
심화 2. 예측 구간과 신뢰구간의 차이를 정리하세요.
| 구간 | 무엇의 구간 | 폭 |
|---|---|---|
| 평균반응의 신뢰구간 | 좁습니다 | |
| 예측구간 | 새 관측 Y_ | 넓습니다 |
차이가 입니다. 새 관측에는 잡음 이 하나 더 붙기 때문이며, 에서도 예측구간의 폭은 으로 가지 않습니다.
실무에서 자주 혼동됩니다. 개별 예측의 불확실성을 물었는데 평균반응의 구간을 보여 주면 훨씬 낙관적인 그림이 됩니다.
외삽이 위험합니다. 이 자료 범위를 벗어나면 이 커지지만, 모형 자체가 틀렸을 가능성은 구간에 전혀 반영되지 않습니다.
심화 3. 회귀 진단을 정리하세요.
| 도구 | 무엇을 보는가 |
|---|---|
| 잔차 대 적합값 그림 | 선형성, 등분산 |
| 잔차 분위수 그림 | 정규성 |
| 지렛대 h_ | 설계공간에서 외딴 점 |
| 표준화 잔차 | 크게 벗어난 반응 |
| 쿡 거리 | 계수에 미치는 영향 |
| VIF | 다중공선성 |
| 더빈-왓슨 | 잔차의 자기상관 |
****이므로 평균 지렛대가 입니다. 그 두세 배를 넘으면 살펴봅니다.
쿡 거리가 셋째와 넷째를 합칩니다. 지렛대가 커도 잔차가 작으면 영향이 없고, 잔차가 커도 지렛대가 작으면 영향이 제한적입니다. 둘이 함께 커야 위험합니다.
그림 몇 장이 검정 열 개보다 낫습니다. 잔차 그림은 어떤 종류의 위배인지까지 알려 주지만, 검정은 예 또는 아니오만 줍니다.
심화 4. 일반화선형모형으로 넓히세요.
| 모형 | 반응의 분포 | 연결함수 | 관련 강의 |
|---|---|---|---|
| 선형회귀 | 정규 | 항등 | 153강 |
| 로지스틱 회귀 | 베르누이 | 로짓 | 205강 |
| 포아송 회귀 | 포아송 | 로그 | 167강 |
| 감마 회귀 | 감마 | 역수 | 131강 |
| 다항 로지스틱 | 다항 | 소프트맥스 | 249강 |
150강 심화 1의 지수족이 뼈대입니다. 반응이 지수족이면 우도가 볼록해지고, 149강 심화 1의 반복 가중 최소제곱으로 풀립니다.
닫힌 해가 사라집니다. 정규 이외에는 같은 공식이 없고 반복법이 필요합니다.
추론은 점근으로 옮겨 갑니다. 와 대신 149강의 점근 정규성과 145강 심화 6의 윌크스 정리를 씁니다.
심화 5. 회귀에서 흔히 저지르는 실수를 정리하세요.
| 실수 | 결과 |
|---|---|
| 단계적 선택으로 변수를 고릅니다 | 값과 구간이 전부 무효 |
| 같은 자료로 고르고 검정합니다 | 152강의 다중 비교 |
| 유의한 계수만 보고합니다 | 선택적 보고 |
| 표준화 없이 계수를 비교합니다 | 단위가 다릅니다 |
| 상호작용을 빼고 주효과만 봅니다 | 집단별 차이를 놓칩니다 |
| 범주형을 수치로 넣습니다 | 없는 순서를 만듭니다 |
| 결측을 목록별로 지웁니다 | 표본이 편향됩니다 |
첫째 줄이 가장 심각합니다. 변수를 자료로 고른 뒤 그 모형의 값을 보고하면, 151강 문제 5와 152강 문제 5의 문제가 동시에 발생합니다. 선택 후 추론이라는 별도의 이론이 필요합니다.
넷째 줄의 대처가 표준화 계수입니다. 각 변수를 표준편차로 나눠 넣으면 **" 표준편차 변화당 효과"**로 비교할 수 있습니다.
다섯째 줄이 심슨의 역설과 이어집니다. 집단마다 기울기가 다르면 상호작용 항이 필요하며, 없으면 평균적인 기울기 하나로 뭉개집니다.
심화 6. 기계학습에서 회귀가 쓰이는 자리를 정리하세요.
| 자리 | 무엇이 이어지는가 | 관련 강의 |
|---|---|---|
| 릿지, 라소 | 정규화된 최소제곱 | 211강 |
| 로지스틱 회귀 | 분류의 기준선 | 205강 |
| 신경망의 마지막 층 | 선형 회귀층 | 239강 |
| 특징 중요도 | 계수와 표준오차 | 216강 |
| 잔차 연결 | 잔차를 학습합니다 | 245강 |
| 부스팅 | 잔차에 약한 학습기를 얹습니다 | 220강 |
| 인과 추론 | 조건부 기댓값의 추정 | 177강 |
| 편향-분산 분해 | 회귀에서 정확히 계산됩니다 | 210강 |
셋째 줄이 자주 잊힙니다. 깊은 신경망도 마지막은 선형층이며, 앞의 층들이 만든 특징에 대한 회귀입니다. 이 강의의 이론이 그 층에는 그대로 적용됩니다.
여덟째 줄이 210강의 출발점입니다. 회귀에서는 편향과 분산을 해석적으로 쓸 수 있으므로, 모형 복잡도가 어떻게 두 항을 반대로 움직이는지를 정확히 볼 수 있습니다.
넷째 줄이 문제 4의 경고를 받습니다. 계수 크기로 특징 중요도를 말하려면 표준화와 다중공선성 확인이 먼저입니다. VIF가 인 변수의 계수는 부호도 믿을 수 없습니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 설계행렬 | 절편 열을 포함합니다 | |
| \hat | 베타 햇 | 최소제곱 계수입니다 |
| RSS | 잔차제곱합 | residual sum of squares |
| TSS | 총제곱합 | total sum of squares |
| s^ | 잔차분산 | 입니다 |
| 잔차 자유도 | 잔차가 사는 차원입니다 | |
| 모자행렬 | 입니다 | |
| h_ | 지렛대 | 설계공간에서의 외딴 정도입니다 |
| 쿡 거리 | Cook's distance | 계수에 미치는 영향입니다 |
| VIF | variance inflation factor | 입니다 |
| 가우스-마르코프 | Gauss-Markov | 최소분산 선형 불편추정량입니다 |
| 생략변수 편향 | omitted variable bias | 교란변수를 빼서 생깁니다 |
| 심슨의 역설 | Simpson's paradox | 집단을 무시하면 방향이 뒤집힙니다 |
| 충돌변수 | collider | 통제하면 가짜 상관이 생깁니다 |
| 예측구간 | prediction interval | 새 관측의 구간입니다 |
여기서 06단원 추론이 끝납니다. 148강에서 좋은 추정량의 기준을 세우고, 149강에서 만드는 규칙을 얻고, 150강에서 사전 지식을 넣고, 151강에서 불확실성을 붙이고, 152강에서 결정을 내리고, 153강에서 그 전부를 하나의 모형에 적용했습니다.
다음은 154강부터 시작하는 07단원 확률과정입니다. 지금까지 관측은 모두 독립이었습니다.
시간이 들어오면 독립이 깨집니다. 154강이 마르코프 연쇄를 세우고, 155강이 정상분포를 구하며, 156강이 연속시간과 확산으로 넓히고, 157강이 그 위에서 표본을 뽑는 MCMC를 다룹니다. 147강 문제 4에서 고차원 기각법이 무너진 자리를 07단원이 메웁니다.
import numpy as np
rng = np.random.default_rng(20260821)
def gamma_half(k):
if k % 2 == 0:
r = 1.0
for j in range(1, k // 2):
r *= j
return r
r = np.sqrt(np.pi)
for j in range((k - 1) // 2):
r *= (0.5 + j)
return r
def t_cdf(x, k, N=400000, L=200.0):
g = (np.arange(N) + 0.5) * (2 * L / N) - L
c = gamma_half(k + 1) / (np.sqrt(k * np.pi) * gamma_half(k))
d = c * (1 + g * g / k) ** (-(k + 1) / 2.0)
cum = (np.cumsum(d) - 0.5 * d) * (2 * L / N)
cum = cum + (1 - cum[-1]) / 2
return np.interp(x, g, cum), g, cum
def f_cdf(f, k1, k2, N=400000):
a, b = k1 / 2.0, k2 / 2.0
w = (np.arange(N) + 0.5) / N
B = gamma_half(k1) * gamma_half(k2) / gamma_half(k1 + k2)
d = 2 * w ** (2 * a - 1) * (1 - w * w) ** (b - 1) / B
c = (np.cumsum(d) - 0.5 * d) / N
return np.interp(np.sqrt(k1 * f / (k1 * f + k2)), w, c)
def ksdist(z, grid, F):
zs = np.sort(z)
Fn = np.searchsorted(zs, grid, side="right") / len(z)
return float(np.max(np.abs(Fn - F)))
# --- 문제 1: 최소제곱 계수의 분포 ---------------------------------------
print(" n = 40, 설명변수 3 개에 절편을 붙여 20 만 번 회귀를 돌립니다")
n1, p1, M = 40, 3, 200000
Xd = np.column_stack([np.ones(n1), rng.normal(0, 1, size=(n1, p1))])
beta = np.array([2.0, 1.5, -0.8, 0.4])
sg = 1.2
XtXi = np.linalg.inv(Xd.T @ Xd)
H = XtXi @ Xd.T
E = rng.normal(0, sg, size=(M, n1))
B = (H @ E.T).T + beta
print(" 계수 참값 추정 평균 추정 표준편차 이론 표준편차")
for j in range(4):
print(" %9d %10.4f %12.6f %14.6f %14.6f"
% (j, beta[j], float(B[:, j].mean()), float(B[:, j].std()),
sg * np.sqrt(XtXi[j, j])))
C = np.cov(B.T)
print(" 공분산행렬 수치와 sigma^2 (X^T X)^-1 의 최대 차이 %.6f"
% float(np.max(np.abs(C - sg * sg * XtXi))))
print(" 최소제곱 추정량은 불편이고 공분산이 sigma^2 (X^T X)^-1 입니다")
print(" 잡음이 정규이면 계수도 정규입니다. 선형변환이기 때문입니다")
# --- 문제 2: 분산 추정과 계수 검정 --------------------------------------
print(" 잔차로 sigma^2 을 추정하고 계수의 t 통계량을 만듭니다")
df = n1 - p1 - 1
P = Xd @ H
R = E - (P @ E.T).T
rss = (R * R).sum(1)
s2 = rss / df
print(" 자유도 n - p - 1 = %d" % df)
print(" s^2 평균 %.6f (참 %.6f), RSS/sigma^2 평균 %.4f (이론 %d), 분산 %.4f (이론 %d)"
% (float(s2.mean()), sg * sg, float((rss / sg ** 2).mean()), df,
float((rss / sg ** 2).var()), 2 * df))
tj = (B[:, 1] - beta[1]) / np.sqrt(s2 * XtXi[1, 1])
gr = np.linspace(-6, 6, 4001)
Fc, gg, cc = t_cdf(gr, df)
print(" 계수 1 의 t 통계량과 t(%d) 의 최대 거리 %.6f" % (df, ksdist(tj, gr, Fc)))
tq975 = float(np.interp(0.975, cc, gg))
cov = float((np.abs(tj) <= tq975).mean())
print(" t 분위수 %.6f 로 만든 구간의 포함률 %.6f" % (tq975, cov))
print(" 정규 분위수 1.959964 를 쓰면 포함률 %.6f 로 떨어집니다"
% float((np.abs(tj) <= 1.959964).mean()))
print(" 계수의 t 통계량은 자유도 n - p - 1 인 t 분포를 정확히 따릅니다")
print(" 설명변수를 늘릴수록 자유도가 줄어 임계값이 커집니다")
# --- 문제 3: 여러 계수를 한꺼번에 ---------------------------------------
print(" 잡음 변수만 넣은 모형에서 F 통계량과 결정계수를 봅니다")
n3, M3 = 40, 100000
q = 3
X0 = np.column_stack([np.ones(n3), rng.normal(0, 1, size=(n3, 1))])
Fs, r2s, ar2s, r2b, ar2b = [], [], [], [], []
for _ in range(2000):
Xf = np.column_stack([X0, rng.normal(0, 1, size=(n3, q))])
y = X0 @ np.array([1.0, 0.5]) + rng.normal(0, 1.0, n3)
yb = y - y.mean()
b0 = np.linalg.lstsq(X0, y, rcond=None)[0]
b1 = np.linalg.lstsq(Xf, y, rcond=None)[0]
r0 = float(((y - X0 @ b0) ** 2).sum())
r1 = float(((y - Xf @ b1) ** 2).sum())
d1 = n3 - Xf.shape[1]
Fs.append(((r0 - r1) / q) / (r1 / d1))
tss = float((yb * yb).sum())
r2s.append(1 - r1 / tss)
ar2s.append(1 - (r1 / d1) / (tss / (n3 - 1)))
r2b.append(1 - r0 / tss)
ar2b.append(1 - (r0 / (n3 - 2)) / (tss / (n3 - 1)))
Fs = np.array(Fs)
grF = np.linspace(1e-4, 12, 4001)
print(" 추가한 3 개는 전부 잡음입니다. F 통계량이 F(%d, %d) 인지 봅니다" % (q, n3 - 5))
print(" 최대 거리 %.6f, 평균 %.6f (이론 %.6f), 5%% 기각률 %.6f"
% (ksdist(Fs, grF, f_cdf(grF, q, n3 - 5)), float(Fs.mean()),
(n3 - 5) / (n3 - 7.0),
float((Fs > float(np.interp(0.95, f_cdf(grF, q, n3 - 5), grF))).mean())))
r2s = np.array(r2s)
ar2s = np.array(ar2s)
r2b = np.array(r2b)
ar2b = np.array(ar2b)
print(" 변수 결정계수 평균 조정 결정계수 평균")
print(" 넣기 전 %12.6f %14.6f" % (float(r2b.mean()), float(ar2b.mean())))
print(" 넣은 뒤 %12.6f %14.6f" % (float(r2s.mean()), float(ar2s.mean())))
print(" 결정계수가 올라간 비율 %.6f, 조정 결정계수가 올라간 비율 %.6f"
% (float((r2s > r2b).mean()), float((ar2s > ar2b).mean())))
print(" F > 1 인 비율 %.6f" % float((Fs > 1.0).mean()))
print(" 잡음을 넣어도 결정계수는 언제나 올라갑니다. 벌점이 없기 때문입니다")
print(" 조정 결정계수는 F > 1 일 때만 올라갑니다. 두 비율이 같습니다")
print(" 잡음의 F 는 평균이 1 을 조금 넘으므로 반쯤은 올라갑니다. 만능이 아닙니다")
print(" t 의 제곱이 자유도 (1, n-p-1) 인 F 인지 확인합니다")
t2 = tj * tj
grF2 = np.linspace(1e-4, 30, 4001)
print(" t^2 과 F(1, %d) 의 최대 거리 %.6f" % (df, ksdist(t2, grF2, f_cdf(grF2, 1, df))))
print(" 계수 하나면 t, 여럿이면 F 이며 둘은 같은 것의 두 얼굴입니다")
# --- 문제 4: 설명변수가 상관되면 ----------------------------------------
print(" 설명변수 두 개의 상관을 바꿔 가며 계수의 흔들림을 봅니다")
n4, M4 = 50, 100000
print(" 상관 rho 계수1 표준편차 상관 0 대비 배수 VIF 이론 부호가 뒤집힌 비율")
base = None
for rho in [0.0, 0.9, 0.99, 0.999]:
z1 = rng.normal(0, 1, size=(M4, n4))
z2 = rho * z1 + np.sqrt(1 - rho * rho) * rng.normal(0, 1, size=(M4, n4))
b1e = []
for i in range(0, M4, 20000):
a, b = z1[i:i + 20000], z2[i:i + 20000]
yy = 0.5 * a + 0.5 * b + rng.normal(0, 1.0, size=a.shape)
saa = (a * a).sum(1) - a.sum(1) ** 2 / n4
sbb = (b * b).sum(1) - b.sum(1) ** 2 / n4
sab = (a * b).sum(1) - a.sum(1) * b.sum(1) / n4
say = (a * yy).sum(1) - a.sum(1) * yy.sum(1) / n4
sby = (b * yy).sum(1) - b.sum(1) * yy.sum(1) / n4
det = saa * sbb - sab * sab
b1e.append((sbb * say - sab * sby) / det)
b1e = np.concatenate(b1e)
sd = float(b1e.std())
if base is None:
base = sd
print(" %13.3f %14.6f %16.4f %12.4f %20.6f"
% (rho, sd, sd / base, 1 / (1 - rho * rho), float((b1e < 0).mean())))
print(" 분산 팽창 인자가 1/(1-rho^2) 이고 표준편차는 그 제곱근으로 커집니다")
print(" rho = 0.999 이면 참값이 0.5 인데도 계수가 음수로 나오는 일이 잦습니다")
print(" 예측은 멀쩡한데 개별 계수의 해석만 무너집니다")
# --- 문제 5: 계수를 인과로 읽을 수 있는가 -------------------------------
print(" 교란변수가 있는 자료를 만듭니다. X 의 참 효과는 0 입니다")
n5, M5 = 200, 20000
zc = rng.normal(0, 1, size=(M5, n5))
xc = zc + rng.normal(0, 0.5, size=(M5, n5))
yc = 0.0 * xc + 2.0 * zc + rng.normal(0, 0.5, size=(M5, n5))
def slope(a, b, n):
saa = (a * a).sum(1) - a.sum(1) ** 2 / n
sab = (a * b).sum(1) - a.sum(1) * b.sum(1) / n
return sab / saa
s_simple = slope(xc, yc, n5)
sxx = (xc * xc).sum(1) - xc.sum(1) ** 2 / n5
szz = (zc * zc).sum(1) - zc.sum(1) ** 2 / n5
sxz = (xc * zc).sum(1) - xc.sum(1) * zc.sum(1) / n5
sxy = (xc * yc).sum(1) - xc.sum(1) * yc.sum(1) / n5
szy = (zc * yc).sum(1) - zc.sum(1) * yc.sum(1) / n5
det = sxx * szz - sxz * sxz
s_multi = (szz * sxy - sxz * szy) / det
print(" 단순회귀 Y ~ X 의 기울기 평균 %.6f (참 효과 0)" % float(s_simple.mean()))
print(" 다중회귀 Y ~ X + Z 의 기울기 평균 %.6f" % float(s_multi.mean()))
print(" 생략변수 편향의 이론값 %.6f (Z 의 효과 2 곱하기 X 에 대한 Z 의 회귀계수)"
% (2.0 * float((sxz / sxx).mean())))
print(" Z 를 빼면 X 가 강한 효과를 가진 것처럼 보입니다. 전부 Z 의 몫입니다")
print(" 집단을 무시하면 방향이 뒤집히는 경우도 만들어 봅니다")
gcol = rng.integers(0, 3, size=n5) # 집단은 열마다 정해지고 모든 반복에서 같습니다
g = np.broadcast_to(gcol, (M5, n5))
xs = g * 3.0 + rng.normal(0, 0.6, size=(M5, n5))
ys = -1.0 * xs + g * 5.0 + rng.normal(0, 0.6, size=(M5, n5))
print(" 전체를 한 줄로 적합한 기울기 평균 %.6f" % float(slope(xs, ys, n5).mean()))
inn = []
for gg2 in range(3):
mask = gcol == gg2
inn.append(float(slope(xs[:, mask], ys[:, mask], int(mask.sum())).mean()))
print(" 집단별 기울기 평균 %.6f, %.6f, %.6f (참 기울기 -1)" % (inn[0], inn[1], inn[2]))
print(" 전체로 보면 양의 관계인데 집단 안에서는 모두 음의 관계입니다")
print(" 이것이 심슨의 역설입니다. 회귀계수는 넣은 변수에 대한 조건부 관계입니다")
print(" 계수를 인과로 읽으려면 무엇을 넣고 무엇을 뺐는지가 정당해야 합니다")
# n = 40, 설명변수 3 개에 절편을 붙여 20 만 번 회귀를 돌립니다
# 계수 참값 추정 평균 추정 표준편차 이론 표준편차
# 0 2.0000 2.000280 0.196831 0.196994
# 1 1.5000 1.499685 0.180070 0.180238
# 2 -0.8000 -0.799715 0.187869 0.187921
# 3 0.4000 0.400211 0.200502 0.200747
# 공분산행렬 수치와 sigma^2 (X^T X)^-1 의 최대 차이 0.000208
# 최소제곱 추정량은 불편이고 공분산이 sigma^2 (X^T X)^-1 입니다
# 잡음이 정규이면 계수도 정규입니다. 선형변환이기 때문입니다
# 잔차로 sigma^2 을 추정하고 계수의 t 통계량을 만듭니다
# 자유도 n - p - 1 = 36
# s^2 평균 1.439612 (참 1.440000), RSS/sigma^2 평균 35.9903 (이론 36), 분산 71.7362 (이론 72)
# 계수 1 의 t 통계량과 t(36) 의 최대 거리 0.001397
# t 분위수 2.028094 로 만든 구간의 포함률 0.950375
# 정규 분위수 1.959964 를 쓰면 포함률 0.942825 로 떨어집니다
# 계수의 t 통계량은 자유도 n - p - 1 인 t 분포를 정확히 따릅니다
# 설명변수를 늘릴수록 자유도가 줄어 임계값이 커집니다
# 잡음 변수만 넣은 모형에서 F 통계량과 결정계수를 봅니다
# 추가한 3 개는 전부 잡음입니다. F 통계량이 F(3, 35) 인지 봅니다
# 최대 거리 0.011079, 평균 1.059421 (이론 1.060606), 5% 기각률 0.047000
# 변수 결정계수 평균 조정 결정계수 평균
# 넣기 전 0.273651 0.254537
# 넣은 뒤 0.330905 0.254437
# 결정계수가 올라간 비율 1.000000, 조정 결정계수가 올라간 비율 0.401000
# F > 1 인 비율 0.401000
# 잡음을 넣어도 결정계수는 언제나 올라갑니다. 벌점이 없기 때문입니다
# 조정 결정계수는 F > 1 일 때만 올라갑니다. 두 비율이 같습니다
# 잡음의 F 는 평균이 1 을 조금 넘으므로 반쯤은 올라갑니다. 만능이 아닙니다
# t 의 제곱이 자유도 (1, n-p-1) 인 F 인지 확인합니다
# t^2 과 F(1, 36) 의 최대 거리 0.001053
# 계수 하나면 t, 여럿이면 F 이며 둘은 같은 것의 두 얼굴입니다
# 설명변수 두 개의 상관을 바꿔 가며 계수의 흔들림을 봅니다
# 상관 rho 계수1 표준편차 상관 0 대비 배수 VIF 이론 부호가 뒤집힌 비율
# 0.000 0.147712 1.0000 1.0000 0.000490
# 0.900 0.338121 2.2891 5.2632 0.069870
# 0.990 1.045222 7.0761 50.2513 0.313120
# 0.999 3.289336 22.2686 500.2501 0.441340
# 분산 팽창 인자가 1/(1-rho^2) 이고 표준편차는 그 제곱근으로 커집니다
# rho = 0.999 이면 참값이 0.5 인데도 계수가 음수로 나오는 일이 잦습니다
# 예측은 멀쩡한데 개별 계수의 해석만 무너집니다
# 교란변수가 있는 자료를 만듭니다. X 의 참 효과는 0 입니다
# 단순회귀 Y ~ X 의 기울기 평균 1.600482 (참 효과 0)
# 다중회귀 Y ~ X + Z 의 기울기 평균 -0.000281
# 생략변수 편향의 이론값 1.600524 (Z 의 효과 2 곱하기 X 에 대한 Z 의 회귀계수)
# Z 를 빼면 X 가 강한 효과를 가진 것처럼 보입니다. 전부 Z 의 몫입니다
# 집단을 무시하면 방향이 뒤집히는 경우도 만들어 봅니다
# 전체를 한 줄로 적합한 기울기 평균 0.573953
# 집단별 기울기 평균 -0.998799, -1.002411, -0.999851 (참 기울기 -1)
# 전체로 보면 양의 관계인데 집단 안에서는 모두 음의 관계입니다
# 이것이 심슨의 역설입니다. 회귀계수는 넣은 변수에 대한 조건부 관계입니다
# 계수를 인과로 읽으려면 무엇을 넣고 무엇을 뺐는지가 정당해야 합니다