184강에서 변수가 하나였습니다. 하나 더 넣습니다.
계산은 거의 같습니다. 바뀌는 것은 계수의 뜻입니다.
| 어느 모형인가 | 의 계수가 무엇인가 |
|---|---|
| 만 | 를 놔둔 채 가 늘 때의 변화 |
| 와 | 를 고정하고 가 늘 때의 변화 |
같은 자료에서 두 값이 크게 다를 수 있습니다. 문제 1에서 과 가 나오는데, 어느 쪽도 계산 실수가 아닙니다.
177강 문제 3이 여기서 실행됩니다. 교란과 충돌부와 중간변수를 그때는 그림으로 봤고, 이제 회귀 한 줄로 다룹니다. 그리고 무엇을 넣을지는 여전히 자료가 안 정합니다.
문제. 변수 하나를 더합니다.
(1) 두 모형의 계수를 견주세요.
(2) 차이가 어디서 오는지 분해하세요.
생각의 실마리. 참 모형이 인데 와 가 서로 얽혀 있으면, 만 넣은 회귀는 의 몫까지 에 얹습니다.
풀이. (1) 와 의 상관이 입니다.
| 모형 | 의 계수 | 표준오차 | R^ |
|---|---|---|---|
| 만 | |||
| 와 |
참 계수가 인데 만 넣으면 이 나옵니다. 두 배입니다.
표준오차가 라 우연으로 설명되지 않습니다. 자료를 더 모아도 에 더 정확히 수렴할 뿐입니다.
(2) 차이가 어디서 오는지 분해합니다. 를 로 회귀한 기울기가 입니다.
| 무엇 | 값 |
|---|---|
| 를 고정한 의 효과 | |
| 의 효과 | |
| 가 늘 때 가 느는 양 | |
| 섞여 들어온 몫 | |
| 둘의 합 | |
| 만 넣었을 때의 계수 |
마지막 두 줄이 정확히 같습니다. 이것이 누락변수 편향 공식이며, 빠진 변수의 효과에 그 변수가 를 따라 움직이는 정도를 곱한 값입니다.
두 항 중 하나만 이면 편향이 없습니다. 빠진 변수가 에 영향이 없거나, 와 무관하면 됩니다. 그래서 무작위 배정이 강력합니다. 를 동전으로 정하면 어떤 변수와도 상관이 이 되어, 빠뜨려도 편향이 안 생깁니다.
이 문제에서 배우는 것. 편향의 방향을 미리 짐작할 수 있다는 것이 이 공식의 실용적 가치입니다. 교육 연수의 임금 효과를 추정할 때 능력을 못 쟀다면, 능력이 임금에 양의 효과()이고 교육과 양의 상관()이므로 계수가 위로 부풀어 있습니다. 그러면 추정값을 상한으로 읽을 수 있고, 그것만으로도 결론이 서는 경우가 있습니다. 177강 문제 4의 민감도 분석이 이 발상을 일반화한 것입니다.
바로 확인 1.
확인 1-1. 누락변수 편향 공식을 쓰세요.
답. 빠진 변수의 효과에 그 변수를 로 회귀한 기울기를 곱한 값입니다.
확인 1-2. 검산에서 두 모형의 계수를 쓰세요.
답. 과 입니다.
확인 1-3. 편향이 이 되는 두 경우를 쓰세요.
답. 빠진 변수가 에 영향이 없거나 와 무관할 때입니다.
문제. 계수의 정확한 뜻을 밝힙니다.
(1) 잔차끼리의 회귀와 같은지 확인하세요.
(2) 어느 쪽을 잔차로 바꿔야 하는지 확인하세요.
(3) 통제 변수에 따라 무엇이 달라지는지 보세요.
생각의 실마리. "를 고정하고"라는 말이 무슨 뜻인지 계산으로 확인합니다. 로 설명되는 몫을 빼고 남은 것이 그 뜻입니다.
풀이. (1) 에서 의 몫을 빼고, 에서도 의 몫을 뺍니다.
남은 것끼리 단순회귀한 기울기가 이고 다중회귀의 계수도 입니다.
이것을 프리슈-워-로벨 정리라 합니다. 다중회귀가 **"다른 변수를 걷어 낸 뒤의 단순회귀"**임을 말해 줍니다.
(2) 어느 쪽을 잔차로 바꿔야 하는지 봅니다.
| 무엇을 회귀하는가 | 기울기 | 맞는가 |
|---|---|---|
| 잔차 대 잔차 | 예 | |
| 원래 대 잔차 | 예 | |
| 잔차 대 원래 | 아니오 |
쪽만 잔차로 바꾸면 됩니다. 를 그대로 둬도 같은 값이 나오는데, 가 와 직교하므로 의 성분이 어차피 걸리지 않기 때문입니다.
반대로 만 바꾸고 를 그대로 두면 로 다른 값입니다. 대칭이 아닙니다.
(3) 통제 변수에 따라 무엇이 달라지는지 봅니다. 177강 문제 3의 세 구조를 회귀로 다시 봅니다.
| 무엇을 넣는가 | 의 계수 | 겨냥한 참값 | 무엇을 재는가 |
|---|---|---|---|
| 만 | 총효과인데 로 교란됨 | ||
| 와 | 총효과 | ||
| 와 | 직접효과인데 로 교란됨 | ||
| 와 과 | 직접효과 | ||
| 와 를 넣음 | 충돌부라 망가짐 |
교란 를 넣어야 겨냥한 값에 닿습니다. 와 이 그 두 줄입니다.
중간변수 을 넣으면 직접효과가 되고 안 넣으면 총효과가 됩니다. 둘 다 옳은 답인데, 다른 물음에 대한 답입니다.
마지막 줄은 충돌부라 겨냥한 값이 없습니다. 는 아무것도 아닙니다.
어느 것이 옳은지는 무엇을 알고 싶은지가 정합니다. 자료는 안 정합니다.
이 문제에서 배우는 것. "모든 변수를 통제했습니다"는 문장이 성립할 수 없습니다. 위 표에서 다섯 모형이 다 다른 답을 주고, 그중 넷은 어떤 물음에는 옳습니다. 그래서 회귀 결과를 읽을 때 어느 변수가 들어갔는지 목록을 먼저 봐야 하며, 목록이 없는 계수는 해석할 수 없습니다. 실무의 보고서가 "여러 요인을 통제한 결과"라고만 적으면 그 계수는 총효과인지 직접효과인지도 알 수 없는 숫자입니다.
바로 확인 2.
확인 2-1. 프리슈-워-로벨 정리를 한 문장으로 쓰세요.
답. 다중회귀의 계수가 다른 변수를 걷어 낸 잔차끼리의 단순회귀와 같습니다.
확인 2-2. 검산에서 만 잔차로 바꿨을 때의 기울기를 쓰세요.
답. 으로 다중회귀 값 와 다릅니다.
확인 2-3. 검산에서 총효과와 직접효과에 닿은 두 모형을 쓰세요.
답. 와 가 이고 와 과 가 입니다.
문제. 계수의 크기를 다룹니다.
(1) 단위가 다른 두 변수의 계수를 견주세요.
(2) 단위를 바꿔 무엇이 변하는지 확인하세요.
(3) 전체 유의성과 개별 유의성을 구분하세요.
생각의 실마리. 계수는 **"가 한 단위 늘 때"**의 변화입니다. 한 단위가 무엇이냐가 변수마다 다르면, 계수를 나란히 놓는 것이 뜻이 없습니다.
풀이. (1) 참 계수가 와 입니다.
| 변수 | 계수 | 표준편차 | 표준화 계수 | |
|---|---|---|---|---|
계수는 대 로 배 차이인데 표준화하면 대 입니다.
표준편차 한 개만큼 움직일 때의 변화로 바꾼 것이며, 그래야 견줄 수 있습니다.
(2) 단위를 바꿔 확인합니다.
| 를 무엇으로 재는가 | 의 계수 | |
|---|---|---|
| 원래 단위 | ||
| 배 단위 | ||
| 배 단위 |
계수는 배씩 바뀌는데 는 소수 넷째 자리까지 그대로입니다.
표준오차도 같은 비율로 바뀌기 때문입니다. 와 값은 단위와 무관하고, 계수의 크기만 단위에 매여 있습니다.
(3) 전체가 유의한지는 로 봅니다.
| 무엇 | 값 | 자유도 | 값 |
|---|---|---|---|
| 전체 | |||
| 의 | |||
| 의 |
전체 는 모든 계수가 인가를 묻고 각 는 그 변수 하나를 묻습니다.
180강 문제 1의 구조 그대로입니다. 개별 를 여럿 보면 다중비교가 되며, 변수가 개면 182강의 문제가 그대로 생깁니다.
이 문제에서 배우는 것. 표준화 계수도 만능이 아닙니다. 표준편차로 나누는 것은 "이 변수가 실제로 얼마나 움직이는가"를 반영하는 것인데, 그 움직임의 범위는 표본이 정합니다. 184강 문제 3에서 이 의 퍼짐에 끌려다닌 것과 같은 문제이며, 다른 표본에서는 표준화 계수의 순서도 바뀔 수 있습니다. 그리고 더미변수는 표준편차가 라 비율에 따라 표준화 계수가 달라지므로 특히 조심해야 합니다. 결국 "어느 변수가 더 중요한가"는 통계가 아니라 의사결정의 물음이며, 그 변수를 실제로 얼마나 바꿀 수 있는지가 답을 정합니다.
바로 확인 3.
확인 3-1. 표준화 계수를 식으로 쓰세요.
답. 계수에 그 변수의 표준편차를 곱하고 의 표준편차로 나눕니다.
확인 3-2. 검산에서 단위를 배로 바꿨을 때 계수와 를 쓰세요.
답. 계수는 이 되고 는 로 그대로입니다.
확인 3-3. 전체 와 개별 가 묻는 것을 각각 쓰세요.
답. 는 모든 계수가 인가를, 는 그 변수 하나를 묻습니다.
문제. 변수를 늘려 봅니다.
(1) 잡음 변수만 넣어 을 재세요.
(2) 조정된 의 벌점을 확인하세요.
(3) 진짜 신호가 있을 때와 견주세요.
생각의 실마리. 변수를 하나 더 넣으면 잔차 제곱합이 절대 늘지 않습니다. 최악이라도 계수를 으로 두면 되므로, 은 반드시 오릅니다.
풀이. (1) 관측 개에 와 아무 관계 없는 잡음 변수를 더해 봅니다.
| 넣은 변수 수 | R^ | 조정된 R^ | 전체 의 값 |
|---|---|---|---|
| 없음 | |||
변수 개를 넣으면 이 입니다. 참 관계가 하나도 없는데 거의 완벽하게 설명합니다.
관측이 개인데 계수가 개라 그렇습니다. 자유도가 만 남으므로 점들을 거의 정확히 지나는 면을 만들 수 있습니다.
조정된 은 근처를 맴돕니다. 잡음만 넣었으므로 벌점이 이득을 정확히 상쇄합니다.
전체 의 값은 유의해지지 않습니다. 자유도가 줄어 검정이 힘을 잃기 때문이며, **이 인데 가 **인 것이 이 상황의 요약입니다.
(2) 벌점을 봅니다.
| 변수 수 | 자유도 | 이 일 때 | |
|---|---|---|---|
변수가 늘수록 벌점이 커집니다. 개면 가 조정 후 으로 음수가 됩니다.
189강에서 이 발상이 AIC와 BIC로 이어집니다.
(3) 진짜 신호가 있으면 다르게 움직입니다. 관측 개에 앞의 세 변수만 진짜이고 나머지 개는 잡음입니다.
| 넣은 변수 | R^ | 조정된 R^ | 오차 sd 추정 |
|---|---|---|---|
| 진짜 개만 | |||
| 개 잡음 개 | |||
| 개 잡음 개 | |||
| 전부 개 |
은 에서 으로 계속 오르는데 조정 은 에서 로 거의 안 움직입니다.
오차 sd 추정도 에서 으로 거의 그대로입니다. 참값이 이므로, 잡음 변수 개가 아무것도 안 보탰다는 뜻입니다.
이 문제에서 배우는 것. 이 오른 것을 개선이라고 보고하면 안 됩니다. 변수를 넣었으니 오른 것이고, 오르지 않는 것이 수학적으로 불가능합니다. 그리고 (1)의 마지막 줄이 과적합의 가장 순수한 형태인데, 훈련 자료에서만 완벽하고 새 자료에서는 아무 예측력이 없습니다. 210강의 편향-분산 분해와 214강의 과적합이 이 현상을 정면으로 다루며, 162강 문제 2에서 본 누출과 함께 모형 평가를 못 믿게 만드는 두 축입니다.
바로 확인 4.
확인 4-1. 변수를 넣으면 이 반드시 오르는 이유를 쓰세요.
답. 계수를 으로 둘 수 있어 잔차 제곱합이 늘 수 없기 때문입니다.
확인 4-2. 검산에서 잡음 개를 넣었을 때 과 값을 쓰세요.
답. 은 인데 값은 입니다.
확인 4-3. 검산에서 진짜 신호가 있을 때 오차 sd 추정의 변화를 쓰세요.
답. 에서 으로 거의 안 움직입니다.
문제. 변수 선택의 기준을 세웁니다.
(1) 변수의 성격별로 넣고 뺄 때를 정리하세요.
(2) 정확도와 치우침에 어떻게 작용하는지 재세요.
(3) 다중회귀가 답하지 않는 것을 정리하세요.
생각의 실마리. 177강 문제 3에서 그림이 통제를 정한다고 했습니다. 그 표를 더 잘게 나눠 봅니다.
풀이. (1) 여섯 가지로 나눕니다.
| 변수의 성격 | 넣으면 | 빼면 |
|---|---|---|
| 와 의 공통 원인 | 치우침이 사라집니다 | 치우칩니다 |
| 중간변수 | 직접효과가 됩니다 | 총효과가 됩니다 |
| 와 의 공통 결과 | 없던 치우침이 생깁니다 | 괜찮습니다 |
| 의 원인이고 와 무관 | 정확도가 오릅니다 | 괜찮습니다 |
| 의 원인이고 와 무관 | 정확도가 내려갑니다 | 괜찮습니다 |
| 의 결과 | 치우침이 생깁니다 | 괜찮습니다 |
177강에서 "원인의 원인"이라 뭉뚱그린 것이 넷째 줄과 다섯째 줄로 갈립니다. 쪽 원인은 도움이 되고 쪽 원인은 손해입니다.
(2) 수치로 잽니다. 참 효과 인 의 계수를 번 추정해 표준편차를 쟀습니다.
| 무엇을 함께 넣는가 | 계수의 평균 | 계수의 표준편차 | 기준 대비 |
|---|---|---|---|
| 아무것도 안 넣음 | |||
| 에만 영향 주는 | |||
| 에만 영향 주는 | |||
| 의 결과인 | |||
| 무관한 |
를 넣으면 표준편차가 배로 줄어듭니다. 의 잡음을 걷어 내 오차분산이 작아지기 때문입니다.
를 넣으면 배로 늡니다. 는 의 원인일 뿐 와 직접 이어져 있지 않으므로, 를 통제하면 의 움직임 중 쓸 수 있는 몫만 깎입니다.
분자를 줄이면 이득이고 분모를 줄이면 손해입니다.
는 표준편차가 아니라 계수 자체를 망칩니다. 평균이 으로 참값 에서 크게 벗어났으며, 의 결과를 통제하면 의 변동을 미리 빼 버리는 셈입니다.
무관한 는 거의 영향이 없습니다. 자유도를 하나 쓸 뿐입니다.
(3) 다중회귀가 답하지 않는 것을 정리합니다.
| 물음 | 이 강의가 답하는가 |
|---|---|
| 다른 변수를 고정하면 어떤가 | 답합니다 |
| 어느 변수가 더 중요한가 | 단위 문제라 못 답합니다 |
| 무엇을 넣어야 하는가 | 그림이 정합니다 |
| 넣을 변수를 못 재면 | 답할 수 없습니다 |
| 를 바꾸면 가 바뀌는가 | 191강에서 |
넷째 줄이 177강 문제 4의 교환가능성입니다. 회귀가 못 넘는 벽입니다.
이 문제에서 배우는 것. 변수를 넣는 것이 언제나 안전한 쪽이라는 통념이 세 번 깨집니다. 충돌부는 없던 치우침을 만들고, 쪽 원인은 정확도를 깎고, 의 결과는 계수를 통째로 망칩니다. 그런데 실무의 자동 변수 선택 절차는 와의 상관만 보고 고르므로 이 셋을 전혀 못 가립니다. 특히 의 결과는 와 상관이 가장 높아 가장 먼저 뽑힙니다. 189강의 변수 선택이 예측에는 쓸 수 있어도 해석에는 쓰면 안 되는 이유가 여기 있습니다.
바로 확인 5.
확인 5-1. 의 원인과 의 원인을 통제할 때의 차이를 쓰세요.
답. 앞은 정확도를 올리고 뒤는 정확도를 내립니다.
확인 5-2. 검산에서 와 를 넣었을 때의 표준편차 배수를 쓰세요.
답. 배와 배입니다.
확인 5-3. 검산에서 의 결과를 넣었을 때 계수의 평균을 쓰세요.
답. 으로 참값 에서 크게 벗어납니다.
| 무엇 | 식이나 뜻 |
|---|---|
| 계수의 뜻 | 다른 변수를 고정할 때의 변화 |
| 누락변수 편향 | 빠진 효과 곱하기 회귀 기울기 |
| 프리슈-워-로벨 | 잔차끼리의 단순회귀 |
| 표준화 계수 | 표준편차 하나만큼의 변화 |
| 조정된 R^ |
| 변수를 넣을까 | 판단 |
|---|---|
| 공통 원인 | 넣습니다 |
| 중간변수 | 물음이 정합니다 |
| 공통 결과 | 안 넣습니다 |
| 의 원인 | 넣으면 정확해집니다 |
| 의 원인 | 안 넣는 편이 낫습니다 |
| 의 결과 | 절대 안 넣습니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 계수 크기로 중요도를 봅니다 | 단위가 정합니다 |
| 통제 변수 목록 없이 계수를 읽습니다 | 총효과인지도 모릅니다 |
| 이 올랐다고 개선이라 합니다 | 반드시 오릅니다 |
| 변수를 많이 넣는 것이 안전하다고 봅니다 | 세 종류가 오히려 해칩니다 |
| 와 상관 높은 변수를 고릅니다 | 의 결과가 가장 먼저 뽑힙니다 |
| 모든 변수를 통제했다고 씁니다 | 확인할 수 없는 주장입니다 |
문제 6. 누락변수 편향 공식을 쓰세요.
답. 빠진 변수의 효과에 그 변수를 로 회귀한 기울기를 곱한 값입니다.
문제 7. 검산에서 두 모형의 계수를 쓰세요.
답. 과 입니다.
문제 8. 검산에서 섞여 들어온 몫과 둘의 합을 쓰세요.
답. 와 입니다.
문제 9. 편향이 이 되는 두 경우를 쓰세요.
답. 빠진 변수가 에 영향이 없거나 와 무관할 때입니다.
문제 10. 프리슈-워-로벨 정리를 한 문장으로 쓰세요.
답. 다중회귀의 계수가 다른 변수를 걷어 낸 잔차끼리의 단순회귀와 같습니다.
문제 11. 검산에서 만 잔차로 바꿨을 때의 기울기를 쓰세요.
답. 으로 다중회귀 값과 다릅니다.
문제 12. 검산에서 총효과와 직접효과에 닿은 두 모형을 쓰세요.
답. 와 가 이고 와 과 가 입니다.
문제 13. 표준화 계수를 식으로 쓰세요.
답. 계수에 그 변수의 표준편차를 곱하고 의 표준편차로 나눕니다.
문제 14. 검산에서 단위를 배로 바꿨을 때 계수와 를 쓰세요.
답. 계수는 이 되고 는 로 그대로입니다.
문제 15. 변수를 넣으면 이 반드시 오르는 이유를 쓰세요.
답. 계수를 으로 둘 수 있어 잔차 제곱합이 늘 수 없기 때문입니다.
문제 16. 검산에서 잡음 개를 넣었을 때 과 값을 쓰세요.
답. 은 인데 값은 입니다.
문제 17. 검산에서 와 를 넣었을 때의 표준편차 배수를 쓰세요.
답. 배와 배입니다.
문제 18. 검산에서 의 결과를 넣었을 때 계수의 평균을 쓰세요.
답. 으로 참값 에서 크게 벗어납니다.
심화 1. 행렬로 쓰면 어떻게 되는지 정리하세요.
변수가 여럿이면 행렬 표기가 훨씬 짧습니다.
| 무엇 | 어디서 나오는가 |
|---|---|
| 정규방정식 | |
| 사영행렬 | H=X(X^{\top}X)^{-1}X^ |
| 레버리지 | 의 대각성분 |
| 잔차 | (I-H)\mathbf |
80강부터 83강의 최소제곱이 그대로입니다. 를 의 열공간에 정사영한 것이 예측값이고, 잔차는 그 공간에 수직입니다.
184강 문제 1에서 잔차의 합과 가 이었던 것이 이 수직성입니다. 열공간의 모든 벡터와 직교하므로, 과 각각에 대해 이 됩니다.
의 대각합이 입니다. 184강에서 레버리지의 합이 계수의 수라고 한 것이 여기서 나옵니다.
심화 2. 가 뒤집히지 않을 때를 정리하세요.
| 언제 | 왜 |
|---|---|
| 변수가 관측보다 많음 | 열이 독립일 수 없습니다 |
| 한 변수가 다른 것의 조합 | 열이 종속입니다 |
| 더미를 전부 넣음 | 합이 상수열과 같습니다 |
셋째 줄이 더미변수 함정이며 186강에서 다룹니다. 범주가 셋이면 더미를 셋 다 넣으면 안 되고 둘만 넣습니다.
완전히 종속이 아니라 거의 종속이면 더 나쁩니다. 역행렬이 존재하지만 원소가 폭발하며, 187강의 다중공선성이 그 이야기입니다.
해결책은 세 가지입니다. 변수를 빼거나, 합치거나, 211강의 정규화로 뒤집히게 만듭니다. 능형회귀는 대각선에 상수를 더해 강제로 뒤집는 방법입니다.
심화 3. 부분 상관과 편상관을 정리하세요.
문제 2의 잔차끼리 회귀를 상관으로 보면 다른 이름이 붙습니다.
| 이름 | 무엇의 상관 |
|---|---|
| 단순 상관 | 와 |
| 편상관 | 와 \tilde |
| 부분 상관 | 와 원래 |
둘째 줄이 다중회귀 계수와 부호가 같습니다. 문제 2에서 잔차 대 잔차가 다중회귀 계수와 같았던 것의 상관 버전입니다.
166강 문제 4의 심슨 역설이 이 식으로 설명됩니다. 가 양수여도 가 더 크면 편상관이 음수가 됩니다.
심화 4. 상호작용 없이 더한다는 가정을 정리하세요.
이 식은 의 효과가 와 무관하다고 가정합니다. 가 무엇이든 이 늘면 만큼 오릅니다.
| 실제로는 | 예 |
|---|---|
| 약효가 나이에 따라 다름 | 젊을수록 큽니다 |
| 광고 효과가 계절에 따라 다름 | 성수기에 큽니다 |
| 교육 수익이 성별에 따라 다름 | 차이가 있습니다 |
셋 다 덧셈 모형으로는 못 담습니다. 곱셈 항을 넣어야 하며, 186강의 교호작용입니다.
교호작용을 안 넣으면 계수가 평균 효과가 됩니다. 어느 집단에도 정확히 맞지 않는 값이며, 그것이 유용한지는 물음이 정합니다.
심화 5. 계수의 신뢰구간과 결합 검정을 정리하세요.
계수마다 구간을 만들면 각각은 퍼센트입니다. 둘을 함께 보면 다릅니다.
| 무엇 | 무엇을 담는가 |
|---|---|
| 개별 구간 두 개 | 직사각형 |
| 결합 신뢰영역 | 기울어진 타원 |
타원이 기울어진 것이 계수끼리의 상관입니다. 과 가 양의 상관이면 과 는 음의 상관을 갖습니다.
그래서 직사각형과 타원이 어긋납니다. 각각은 유의하지 않은데 둘을 함께 검정하면 유의한 경우가 생기며, 187강의 다중공선성에서 그 현상이 극단으로 나타납니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 범주형 변수 | 더미와 교호작용 | 186강 |
| 변수끼리 얽힘 | 다중공선성 | 187강 |
| 변수 선택 | 정보기준 | 189강 |
| 인과 | 통제의 정당화 | 191강 |
넷째 줄이 이 강의의 한계를 푸는 자리입니다. 문제 5의 넷째 줄에서 "넣을 변수를 못 재면 답할 수 없다"고 했는데, 191강부터는 못 잰 변수가 있어도 답할 수 있는 설계를 다룹니다.
전부 통제 대신 설계로 푸는 방법이며, 문제 1의 편향 공식에서 을 만들어 내는 장치들입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| \beta_ | 베타 제이 | 번째 변수의 계수입니다 |
| \tilde | 엑스 틸데 | 다른 변수를 걷어 낸 잔차입니다 |
| 누락변수 편향 | omitted variable bias | 빠뜨린 변수가 만드는 치우침입니다 |
| 프리슈-워-로벨 | Frisch-Waugh-Lovell | 잔차끼리의 회귀와 같다는 정리입니다 |
| 표준화 계수 | standardized coefficient | 표준편차 단위의 계수입니다 |
| 조정된 R^ | adjusted R-squared | 변수 수에 벌점을 물린 값입니다 |
| 전체 | overall F | 모든 계수가 인지 묻습니다 |
| 총효과 | total effect | 모든 경로를 합친 효과입니다 |
| 직접효과 | direct effect | 중간변수를 거치지 않는 효과입니다 |
| 편상관 | partial correlation | 잔차끼리의 상관입니다 |
| 사영행렬 | hat matrix | 예측값을 만드는 행렬입니다 |
| 결합 신뢰영역 | joint confidence region | 계수 여럿을 함께 담는 타원입니다 |
다음은 186강 더미변수와 교호작용입니다. 이 강의의 변수가 모두 수였습니다.
184강 문제 2에서 집단을 과 로 적어 회귀했는데, 범주가 셋 이상이면 그 방법이 그대로 안 됩니다. 그리고 심화 4에서 본 덧셈 가정을 깨는 곱셈 항을 넣으면, 180강 심화 4의 교호작용이 회귀 한 줄로 다시 나타납니다.
import numpy as np
rng = np.random.default_rng(20260922)
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 gammaln(z):
g = [676.5203681218851, -1259.1392167224028, 771.32342877765313,
-176.61502916214059, 12.507343278686905, -0.13857109526572012,
9.9843695780195716e-6, 1.5056327351493116e-7]
if z < 0.5:
return np.log(np.pi / np.sin(np.pi * z)) - gammaln(1.0 - z)
z -= 1.0
x = 0.99999999999980993
for i, gi in enumerate(g):
x += gi / (z + i + 1.0)
t = z + 7.5
return 0.5 * np.log(2 * np.pi) + (z + 0.5) * np.log(t) - t + np.log(x)
def betacf(a, b, x):
c, d = 1.0, 1.0 - (a + b) * x / (a + 1.0)
d = 1.0 / (1e-300 if abs(d) < 1e-300 else d)
h = d
for m in range(1, 400):
num = m * (b - m) * x / ((a + 2 * m - 1) * (a + 2 * m))
d = 1.0 + num * d
c = 1.0 + num / c
d = 1.0 / (1e-300 if abs(d) < 1e-300 else d)
c = 1e-300 if abs(c) < 1e-300 else c
h *= d * c
num = -(a + m) * (a + b + m) * x / ((a + 2 * m) * (a + 2 * m + 1))
d = 1.0 + num * d
c = 1.0 + num / c
d = 1.0 / (1e-300 if abs(d) < 1e-300 else d)
c = 1e-300 if abs(c) < 1e-300 else c
de = d * c
h *= de
if abs(de - 1.0) < 1e-14:
break
return h
def betainc(a, b, x):
if x <= 0.0:
return 0.0
if x >= 1.0:
return 1.0
lb = gammaln(a) + gammaln(b) - gammaln(a + b)
if x < (a + 1.0) / (a + b + 2.0):
return np.exp(a * np.log(x) + b * np.log(1.0 - x) - lb) * betacf(a, b, x) / a
return 1.0 - np.exp(b * np.log(1.0 - x) + a * np.log(x) - lb) * betacf(b, a, 1.0 - x) / b
def t_p2(t, df):
return betainc(0.5 * df, 0.5, df / (df + t * t))
def f_sf(f, d1, d2):
if f <= 0.0:
return 1.0
return betainc(0.5 * d2, 0.5 * d1, d2 / (d2 + d1 * f))
def ols(y, *xs):
A = np.stack([np.ones(len(y))] + list(xs), axis=1)
b, *_ = np.linalg.lstsq(A, y, rcond=None)
yh = A @ b
e = y - yh
n, p = A.shape
s2 = (e ** 2).sum() / (n - p)
XtXi = np.linalg.inv(A.T @ A)
se = np.sqrt(s2 * np.diag(XtXi))
sst = ((y - y.mean()) ** 2).sum()
sse = (e ** 2).sum()
r2 = 1.0 - sse / sst
adj = 1.0 - (1.0 - r2) * (n - 1) / (n - p)
return dict(b=b, se=se, e=e, s2=s2, n=n, p=p, sse=sse, sst=sst,
r2=r2, adj=adj, df=n - p)
# --- 문제 1: 변수를 하나 더 넣으면 --------------------------------------
print(" 184강에서 변수가 하나였습니다. 하나 더 넣어 봅니다")
N1 = 3000
z1 = rng.normal(0, 1, N1)
x1 = 1.0 * z1 + rng.normal(0, 1, N1)
y1 = 1.0 * x1 + 2.0 * z1 + rng.normal(0, 1, N1)
print(" 참 모형은 y = 1.0 x + 2.0 z + 잡음 이고 x 와 z 의 상관은 %.4f 입니다"
% float(np.corrcoef(x1, z1)[0, 1]))
m1 = ols(y1, x1)
m2 = ols(y1, x1, z1)
print(" %s %s %s %s" % (pw("모형", 22), rw("x 의 계수", 14),
rw("표준오차", 12), rw("R^2", 12)))
print(" %s %14.6f %12.6f %12.6f" % (pw("x 만", 22), m1["b"][1], m1["se"][1], m1["r2"]))
print(" %s %14.6f %12.6f %12.6f" % (pw("x 와 z", 22), m2["b"][1], m2["se"][1], m2["r2"]))
print(" 같은 자료인데 x 의 계수가 크게 다릅니다. 어느 쪽도 계산 실수가 아닙니다")
print(" 두 계수가 서로 다른 것을 재고 있습니다")
print(" %s %s" % (pw("어느 모형인가", 20), rw("계수가 무엇인가", 40)))
for a, b in [("x 만", "z 를 놔둔 채 x 가 1 늘 때의 y 변화"),
("x 와 z", "z 를 고정하고 x 가 1 늘 때의 y 변화")]:
print(" %s %s" % (pw(a, 20), rw(b, 40)))
print(" x 만 넣으면 x 가 늘 때 z 도 따라 늘어 z 의 효과가 섞여 들어옵니다")
print(" 섞여 들어오는 양을 직접 계산합니다")
bzx = ols(z1, x1)["b"][1]
print(" z 를 x 로 회귀한 기울기가 %.6f 입니다" % bzx)
print(" %s %s" % (pw("무엇", 30), rw("값", 14)))
for nm, v in [("z 를 고정한 x 의 효과", m2["b"][1]),
("z 의 효과", m2["b"][2]),
("x 가 1 늘 때 z 가 느는 양", bzx),
("섞여 들어온 몫", m2["b"][2] * bzx),
("둘의 합", m2["b"][1] + m2["b"][2] * bzx),
("x 만 넣었을 때의 계수", m1["b"][1])]:
print(" %s %14.6f" % (pw(nm, 30), v))
print(" 마지막 두 줄이 같습니다. 이것을 누락변수 편향 공식이라 합니다")
print(" 빠진 변수의 효과에 그 변수가 x 를 따라 움직이는 정도를 곱한 값입니다")
# --- 문제 2: 계수가 무엇을 재는지 정확히 -------------------------------
print(" 다중회귀의 계수는 다른 변수를 뺀 나머지끼리의 회귀입니다")
ex = ols(x1, z1)["e"]
ey = ols(y1, z1)["e"]
print(" x 에서 z 로 설명되는 몫을 빼고 y 에서도 z 의 몫을 뺍니다")
print(" 남은 것끼리 단순회귀한 기울기는 %.6f 입니다" % ols(ey, ex)["b"][1])
print(" 다중회귀의 x 계수는 %.6f 입니다. 같은 값입니다" % m2["b"][1])
print(" 이것을 프리슈-워-로벨 정리라 합니다")
print(" 잔차만 빼도 되는지 확인합니다")
ey2 = ols(y1, z1)["e"]
print(" %s %s %s" % (pw("무엇을 회귀하는가", 26), rw("기울기", 14), rw("맞는가", 10)))
for nm, yy, xx, ok in [("잔차 대 잔차", ey, ex, "예"),
("원래 y 대 x 잔차", y1, ex, "예"),
("y 잔차 대 원래 x", ey2, x1, "아니오")]:
print(" %s %14.6f %s" % (pw(nm, 26), ols(yy, xx)["b"][1], rw(ok, 10)))
print(" x 쪽만 잔차로 바꾸면 됩니다. y 쪽은 안 바꿔도 같은 값이 나옵니다")
print(" 반대로 y 만 바꾸고 x 를 그대로 두면 다른 값이 나옵니다")
print(" 통제한 변수가 무엇이냐로 계수의 뜻이 정해집니다")
N2 = 4000
u2 = rng.normal(0, 1, N2)
t2 = 1.0 * u2 + rng.normal(0, 1, N2)
m2b = 1.0 * t2 + rng.normal(0, 1, N2)
c2 = 1.0 * t2 + 1.0 * (2.0 * m2b + u2) + rng.normal(0, 1, N2)
y2 = 1.0 * t2 + 2.0 * m2b + 1.5 * u2 + rng.normal(0, 1, N2)
print(" 177강 문제 3 의 세 구조를 회귀로 다시 봅니다. 참 직접효과는 1.0 입니다")
print(" %s %s %s %s" % (pw("무엇을 넣는가", 26), rw("t 의 계수", 14),
rw("겨냥한 참값", 14), rw("무엇을 재는가", 24)))
tot = 1.0 + 2.0 * 1.0
for nm, cols, tv2, msg in [("t 만", (t2,), tot, "총효과인데 u 로 교란됨"),
("t 와 u", (t2, u2), tot, "총효과"),
("t 와 m", (t2, m2b), 1.0, "직접효과인데 u 로 교란됨"),
("t 와 m 과 u", (t2, m2b, u2), 1.0, "직접효과"),
("t 와 c 를 넣음", (t2, c2), 1.0, "충돌부라 망가짐")]:
bb = ols(y2, *cols)["b"][1]
print(" %s %14.6f %14.1f %s" % (pw(nm, 26), bb, tv2, rw(msg, 24)))
print(" 참 총효과는 %.1f 이고 참 직접효과는 1.0 입니다" % tot)
print(" 교란 u 를 넣어야 겨냥한 값에 닿습니다. 3.0191 과 0.9928 이 그 두 줄입니다")
print(" 중간변수 m 을 넣으면 직접효과가 되고 안 넣으면 총효과가 됩니다")
print(" 마지막 줄은 충돌부라 겨냥한 값이 없습니다. 0.7133 은 아무것도 아닙니다")
print(" 어느 것이 옳은지는 무엇을 알고 싶은지가 정합니다. 자료는 안 정합니다")
# --- 문제 3: 계수를 견줄 수 있는가 --------------------------------------
print(" 계수의 크기로 중요도를 견주면 안 됩니다")
N3 = 2000
a3 = rng.normal(50.0, 10.0, N3)
b3 = rng.normal(0.5, 0.1, N3)
y3 = 0.2 * a3 + 30.0 * b3 + rng.normal(0, 2.0, N3)
m3 = ols(y3, a3, b3)
print(" 참 계수는 0.2 와 30.0 입니다. 단위가 다릅니다")
print(" %s %s %s %s %s" % (pw("변수", 12), rw("계수", 12), rw("표준편차", 12),
rw("표준화 계수", 14), rw("t", 12)))
for i, nm, v in [(1, "a", a3), (2, "b", b3)]:
std = m3["b"][i] * v.std(ddof=1) / y3.std(ddof=1)
print(" %s %12.6f %12.6f %14.6f %12.4f"
% (pw(nm, 12), m3["b"][i], float(v.std(ddof=1)), std, m3["b"][i] / m3["se"][i]))
print(" 계수는 30 대 0.2 인데 표준화하면 뒤집힙니다")
print(" 단위를 바꾸면 계수가 바뀝니다. 크기 비교는 뜻이 없습니다")
print(" 단위를 바꿔 확인합니다")
print(" %s %s %s" % (pw("b 를 무엇으로 재는가", 24), rw("b 의 계수", 14), rw("t", 12)))
for nm, sc in [("원래 단위", 1.0), ("100 배 단위", 0.01), ("0.01 배 단위", 100.0)]:
mm = ols(y3, a3, b3 * sc)
print(" %s %14.6f %12.4f" % (pw(nm, 24), mm["b"][2], mm["b"][2] / mm["se"][2]))
print(" 계수는 100 배씩 바뀌는데 t 는 하나도 안 변합니다")
print(" t 와 p 값은 단위와 무관합니다. 계수의 크기만 단위에 매여 있습니다")
print(" 전체가 유의한지는 F 로 봅니다")
print(" %s %s %s %s" % (pw("무엇", 24), rw("값", 14), rw("자유도", 12), rw("p 값", 14)))
ssr = m3["sst"] - m3["sse"]
fv = (ssr / (m3["p"] - 1)) / (m3["sse"] / m3["df"])
print(" %s %14.6f %12s %14.10f"
% (pw("전체 F", 24), fv, rw("%d, %d" % (m3["p"] - 1, m3["df"]), 12),
f_sf(fv, m3["p"] - 1, m3["df"])))
print(" %s %14.6f %12d %14.10f"
% (pw("a 의 t", 24), m3["b"][1] / m3["se"][1], m3["df"],
t_p2(m3["b"][1] / m3["se"][1], m3["df"])))
print(" %s %14.6f %12d %14.10f"
% (pw("b 의 t", 24), m3["b"][2] / m3["se"][2], m3["df"],
t_p2(m3["b"][2] / m3["se"][2], m3["df"])))
print(" 전체 F 는 모든 계수가 0 인가를 묻고 각 t 는 그 변수 하나를 묻습니다")
print(" 180강 문제 1 의 구조 그대로입니다. 개별 t 를 여럿 보면 다중비교가 됩니다")
# --- 문제 4: R^2 은 반드시 오릅니다 --------------------------------------
print(" 변수를 아무거나 넣어도 R^2 은 오릅니다")
N4 = 60
y4 = rng.normal(0, 1, N4)
noise = rng.normal(0, 1, (N4, 40))
print(" y 와 아무 관계 없는 잡음 변수를 하나씩 더해 봅니다")
print(" %s %s %s %s" % (pw("넣은 변수 수", 14), rw("R^2", 14),
rw("조정된 R^2", 14), rw("전체 F 의 p 값", 16)))
for k in [0, 5, 10, 20, 40, 58]:
cols = [noise[:, i] for i in range(min(k, 40))]
if k > 40:
cols = cols + [noise[:, i % 40] * rng.normal(0, 1, N4) for i in range(k - 40)]
if k == 0:
print(" %s %14.6f %14.6f %16s"
% (pw("0", 14), 0.0, 0.0, rw("없음", 16)))
continue
mm = ols(y4, *cols)
ssr = mm["sst"] - mm["sse"]
fv = (ssr / (mm["p"] - 1)) / (mm["sse"] / mm["df"]) if mm["df"] > 0 else float("inf")
print(" %s %14.6f %14.6f %16.6f"
% (pw("%d" % k, 14), mm["r2"], mm["adj"], f_sf(fv, mm["p"] - 1, mm["df"])))
print(" 관측이 60 개인데 변수 58 개를 넣으면 R^2 이 1 에 가까워집니다")
print(" 조정된 R^2 은 0 근처를 맴돕니다. 잡음만 넣었으므로 벌점이 이득을 상쇄합니다")
print(" 전체 F 의 p 값은 커집니다. 자유도가 줄어 검정이 힘을 잃기 때문입니다")
print(" 조정된 R^2 의 벌점을 확인합니다")
print(" 조정 R^2 = 1 - (1-R^2)(n-1)/(n-p) 입니다")
print(" %s %s %s %s" % (pw("변수 수", 12), rw("자유도", 12),
rw("(n-1)/(n-p)", 16), rw("R^2 이 0.5 일 때", 18)))
for k in [1, 5, 10, 20, 40]:
p4 = k + 1
fac = (N4 - 1.0) / (N4 - p4)
print(" %s %12d %16.6f %18.6f"
% (pw("%d" % k, 12), N4 - p4, fac, 1.0 - 0.5 * fac))
print(" 변수가 늘수록 벌점이 커집니다. 40 개면 R^2 0.5 가 조정 후 -0.5526 이 됩니다")
print(" 189강에서 이 발상이 AIC 와 BIC 로 이어집니다")
print(" 진짜 신호가 있으면 다르게 움직입니다")
N5 = 200
xs5 = rng.normal(0, 1, (N5, 30))
y5 = 1.0 * xs5[:, 0] + 0.8 * xs5[:, 1] + 0.6 * xs5[:, 2] + rng.normal(0, 1.0, N5)
print(" 앞의 세 변수만 진짜이고 나머지 27 개는 잡음입니다")
print(" %s %s %s %s" % (pw("넣은 변수", 20), rw("R^2", 14), rw("조정된 R^2", 14),
rw("오차 sd 추정", 14)))
for nm, k in [("진짜 3 개만", 3), ("3 개 + 잡음 7 개", 10),
("3 개 + 잡음 17 개", 20), ("전부 30 개", 30)]:
mm = ols(y5, *[xs5[:, i] for i in range(k)])
print(" %s %14.6f %14.6f %14.6f"
% (pw(nm, 20), mm["r2"], mm["adj"], np.sqrt(mm["s2"])))
print(" R^2 은 계속 오르는데 조정 R^2 은 거의 안 움직입니다")
print(" 오차 sd 추정도 거의 그대로입니다. 잡음 변수가 아무것도 안 보탰다는 뜻입니다")
# --- 문제 5: 무엇을 넣을 것인가 -----------------------------------------
print(" 변수를 넣는 결정은 자료가 아니라 그림이 정합니다")
print(" %s %s %s" % (pw("변수의 성격", 22), rw("넣으면", 24), rw("빼면", 22)))
for a, b, c in [("x 와 y 의 공통 원인", "치우침이 사라집니다", "치우칩니다"),
("중간변수", "직접효과가 됩니다", "총효과가 됩니다"),
("x 와 y 의 공통 결과", "없던 치우침이 생깁니다", "괜찮습니다"),
("y 의 원인이고 x 와 무관", "정확도가 오릅니다", "괜찮습니다"),
("x 의 원인이고 y 와 무관", "정확도가 내려갑니다", "괜찮습니다"),
("y 의 결과", "치우침이 생깁니다", "괜찮습니다")]:
print(" %s %s %s" % (pw(a, 22), rw(b, 24), rw(c, 22)))
print(" 177강 문제 3 의 표를 여기서 더 잘게 나눴습니다")
print(" 거기서 원인의 원인이라 뭉뚱그린 것이 넷째 줄과 다섯째 줄로 갈립니다")
print(" y 쪽 원인은 도움이 되고 x 쪽 원인은 손해입니다. 아래에서 수치로 봅니다")
print(" 정확도가 오르내리는 것을 수치로 봅니다")
R6, N6 = 3000, 100
print(" 참 효과 1.0 인 x 의 계수를 3000 번 추정해 표준편차를 잽니다")
print(" w 는 x 에만, q 는 y 에만 영향을 주고 v 는 y 의 결과이며 i 는 무관합니다")
print(" %s %s %s %s" % (pw("무엇을 함께 넣는가", 26), rw("계수의 평균", 14),
rw("계수의 표준편차", 18), rw("기준 대비", 12)))
base_sd = None
res5 = {}
for nm, kind in [("아무것도 안 넣음", "none"), ("y 에만 영향 주는 q", "q"),
("x 에만 영향 주는 w", "w"), ("y 의 결과인 v", "v"),
("무관한 i", "i")]:
acc = []
for _ in range(R6):
w = rng.normal(0, 1, N6)
q = rng.normal(0, 1, N6)
ii = rng.normal(0, 1, N6)
xx = 1.0 * w + rng.normal(0, 1, N6)
yy = 1.0 * xx + 2.0 * q + rng.normal(0, 1, N6)
vv = 1.0 * yy + rng.normal(0, 1, N6)
if kind == "none":
acc.append(ols(yy, xx)["b"][1])
elif kind == "q":
acc.append(ols(yy, xx, q)["b"][1])
elif kind == "w":
acc.append(ols(yy, xx, w)["b"][1])
elif kind == "v":
acc.append(ols(yy, xx, vv)["b"][1])
else:
acc.append(ols(yy, xx, ii)["b"][1])
sd = float(np.std(acc, ddof=1))
if base_sd is None:
base_sd = sd
res5[kind] = (float(np.mean(acc)), sd)
print(" %s %14.6f %18.6f %12.4f"
% (pw(nm, 26), float(np.mean(acc)), sd, sd / base_sd))
print(" q 를 넣으면 표준편차가 %.4f 배로 줄어듭니다. y 의 잡음을 걷어 냈기 때문입니다"
% (res5["q"][1] / base_sd))
print(" w 를 넣으면 %.4f 배로 늡니다. x 의 움직임 중 쓸 수 있는 몫이 줄기 때문입니다"
% (res5["w"][1] / base_sd))
print(" w 는 x 의 원인일 뿐 y 와 직접 이어져 있지 않습니다. 넣을 이유가 없습니다")
print(" v 는 표준편차가 아니라 계수 자체를 망칩니다. 평균이 %.4f 로 참값 1.0 을 벗어납니다"
% res5["v"][0])
print(" 무관한 i 는 거의 영향이 없습니다. 자유도를 하나 쓸 뿐입니다")
print(" 다중회귀가 답하지 않는 것을 정리합니다")
print(" %s %s" % (pw("물음", 30), rw("이 강의가 답하는가", 22)))
for a, b in [("다른 변수를 고정하면 어떤가", "답합니다"),
("어느 변수가 더 중요한가", "단위 문제라 못 답합니다"),
("무엇을 넣어야 하는가", "그림이 정합니다"),
("넣을 변수를 못 재면", "답할 수 없습니다"),
("x 를 바꾸면 y 가 바뀌는가", "191강에서")]:
print(" %s %s" % (pw(a, 30), rw(b, 22)))
print(" 넷째 줄이 177강 문제 4 의 교환가능성입니다. 회귀가 못 넘는 벽입니다")
# 184강에서 변수가 하나였습니다. 하나 더 넣어 봅니다
# 참 모형은 y = 1.0 x + 2.0 z + 잡음 이고 x 와 z 의 상관은 0.7019 입니다
# 모형 x 의 계수 표준오차 R^2
# x 만 1.999538 0.022480 0.725195
# x 와 z 1.016679 0.018496 0.905649
# 같은 자료인데 x 의 계수가 크게 다릅니다. 어느 쪽도 계산 실수가 아닙니다
# 두 계수가 서로 다른 것을 재고 있습니다
# 어느 모형인가 계수가 무엇인가
# x 만 z 를 놔둔 채 x 가 1 늘 때의 y 변화
# x 와 z z 를 고정하고 x 가 1 늘 때의 y 변화
# x 만 넣으면 x 가 늘 때 z 도 따라 늘어 z 의 효과가 섞여 들어옵니다
# 섞여 들어오는 양을 직접 계산합니다
# z 를 x 로 회귀한 기울기가 0.500013 입니다
# 무엇 값
# z 를 고정한 x 의 효과 1.016679
# z 의 효과 1.965668
# x 가 1 늘 때 z 가 느는 양 0.500013
# 섞여 들어온 몫 0.982859
# 둘의 합 1.999538
# x 만 넣었을 때의 계수 1.999538
# 마지막 두 줄이 같습니다. 이것을 누락변수 편향 공식이라 합니다
# 빠진 변수의 효과에 그 변수가 x 를 따라 움직이는 정도를 곱한 값입니다
# 다중회귀의 계수는 다른 변수를 뺀 나머지끼리의 회귀입니다
# x 에서 z 로 설명되는 몫을 빼고 y 에서도 z 의 몫을 뺍니다
# 남은 것끼리 단순회귀한 기울기는 1.016679 입니다
# 다중회귀의 x 계수는 1.016679 입니다. 같은 값입니다
# 이것을 프리슈-워-로벨 정리라 합니다
# 잔차만 빼도 되는지 확인합니다
# 무엇을 회귀하는가 기울기 맞는가
# 잔차 대 잔차 1.016679 예
# 원래 y 대 x 잔차 1.016679 예
# y 잔차 대 원래 x 0.515823 아니오
# x 쪽만 잔차로 바꾸면 됩니다. y 쪽은 안 바꿔도 같은 값이 나옵니다
# 반대로 y 만 바꾸고 x 를 그대로 두면 다른 값이 나옵니다
# 통제한 변수가 무엇이냐로 계수의 뜻이 정해집니다
# 177강 문제 3 의 세 구조를 회귀로 다시 봅니다. 참 직접효과는 1.0 입니다
# 무엇을 넣는가 t 의 계수 겨냥한 참값 무엇을 재는가
# t 만 3.769792 3.0 총효과인데 u 로 교란됨
# t 와 u 3.019059 3.0 총효과
# t 와 m 1.788148 1.0 직접효과인데 u 로 교란됨
# t 와 m 과 u 0.992800 1.0 직접효과
# t 와 c 를 넣음 0.713272 1.0 충돌부라 망가짐
# 참 총효과는 3.0 이고 참 직접효과는 1.0 입니다
# 교란 u 를 넣어야 겨냥한 값에 닿습니다. 3.0191 과 0.9928 이 그 두 줄입니다
# 중간변수 m 을 넣으면 직접효과가 되고 안 넣으면 총효과가 됩니다
# 마지막 줄은 충돌부라 겨냥한 값이 없습니다. 0.7133 은 아무것도 아닙니다
# 어느 것이 옳은지는 무엇을 알고 싶은지가 정합니다. 자료는 안 정합니다
# 계수의 크기로 중요도를 견주면 안 됩니다
# 참 계수는 0.2 와 30.0 입니다. 단위가 다릅니다
# 변수 계수 표준편차 표준화 계수 t
# a 0.192787 10.375924 0.492426 45.4503
# b 29.636562 0.099111 0.723077 66.7392
# 계수는 30 대 0.2 인데 표준화하면 뒤집힙니다
# 단위를 바꾸면 계수가 바뀝니다. 크기 비교는 뜻이 없습니다
# 단위를 바꿔 확인합니다
# b 를 무엇으로 재는가 b 의 계수 t
# 원래 단위 29.636562 66.7392
# 100 배 단위 2963.656210 66.7392
# 0.01 배 단위 0.296366 66.7392
# 계수는 100 배씩 바뀌는데 t 는 하나도 안 변합니다
# t 와 p 값은 단위와 무관합니다. 계수의 크기만 단위에 매여 있습니다
# 전체가 유의한지는 F 로 봅니다
# 무엇 값 자유도 p 값
# 전체 F 3261.044281 2, 1997 0.0000000000
# a 의 t 45.450346 1997 0.0000000000
# b 의 t 66.739200 1997 0.0000000000
# 전체 F 는 모든 계수가 0 인가를 묻고 각 t 는 그 변수 하나를 묻습니다
# 180강 문제 1 의 구조 그대로입니다. 개별 t 를 여럿 보면 다중비교가 됩니다
# 변수를 아무거나 넣어도 R^2 은 오릅니다
# y 와 아무 관계 없는 잡음 변수를 하나씩 더해 봅니다
# 넣은 변수 수 R^2 조정된 R^2 전체 F 의 p 값
# 0 0.000000 0.000000 없음
# 5 0.006313 -0.085695 0.996563
# 10 0.164630 -0.005854 0.484547
# 20 0.310204 -0.043537 0.614194
# 40 0.701321 0.072522 0.410709
# 58 0.981785 -0.074671 0.696113
# 관측이 60 개인데 변수 58 개를 넣으면 R^2 이 1 에 가까워집니다
# 조정된 R^2 은 0 근처를 맴돕니다. 잡음만 넣었으므로 벌점이 이득을 상쇄합니다
# 전체 F 의 p 값은 커집니다. 자유도가 줄어 검정이 힘을 잃기 때문입니다
# 조정된 R^2 의 벌점을 확인합니다
# 조정 R^2 = 1 - (1-R^2)(n-1)/(n-p) 입니다
# 변수 수 자유도 (n-1)/(n-p) R^2 이 0.5 일 때
# 1 58 1.017241 0.491379
# 5 54 1.092593 0.453704
# 10 49 1.204082 0.397959
# 20 39 1.512821 0.243590
# 40 19 3.105263 -0.552632
# 변수가 늘수록 벌점이 커집니다. 40 개면 R^2 0.5 가 조정 후 -0.5526 이 됩니다
# 189강에서 이 발상이 AIC 와 BIC 로 이어집니다
# 진짜 신호가 있으면 다르게 움직입니다
# 앞의 세 변수만 진짜이고 나머지 27 개는 잡음입니다
# 넣은 변수 R^2 조정된 R^2 오차 sd 추정
# 진짜 3 개만 0.554414 0.547594 1.116214
# 3 개 + 잡음 7 개 0.592850 0.571307 1.086567
# 3 개 + 잡음 17 개 0.626592 0.584871 1.069240
# 전부 30 개 0.656368 0.595369 1.055633
# R^2 은 계속 오르는데 조정 R^2 은 거의 안 움직입니다
# 오차 sd 추정도 거의 그대로입니다. 잡음 변수가 아무것도 안 보탰다는 뜻입니다
# 변수를 넣는 결정은 자료가 아니라 그림이 정합니다
# 변수의 성격 넣으면 빼면
# x 와 y 의 공통 원인 치우침이 사라집니다 치우칩니다
# 중간변수 직접효과가 됩니다 총효과가 됩니다
# x 와 y 의 공통 결과 없던 치우침이 생깁니다 괜찮습니다
# y 의 원인이고 x 와 무관 정확도가 오릅니다 괜찮습니다
# x 의 원인이고 y 와 무관 정확도가 내려갑니다 괜찮습니다
# y 의 결과 치우침이 생깁니다 괜찮습니다
# 177강 문제 3 의 표를 여기서 더 잘게 나눴습니다
# 거기서 원인의 원인이라 뭉뚱그린 것이 넷째 줄과 다섯째 줄로 갈립니다
# y 쪽 원인은 도움이 되고 x 쪽 원인은 손해입니다. 아래에서 수치로 봅니다
# 정확도가 오르내리는 것을 수치로 봅니다
# 참 효과 1.0 인 x 의 계수를 3000 번 추정해 표준편차를 잽니다
# w 는 x 에만, q 는 y 에만 영향을 주고 v 는 y 의 결과이며 i 는 무관합니다
# 무엇을 함께 넣는가 계수의 평균 계수의 표준편차 기준 대비
# 아무것도 안 넣음 1.001588 0.160023 1.0000
# y 에만 영향 주는 q 0.999456 0.070439 0.4402
# x 에만 영향 주는 w 0.996325 0.223194 1.3948
# y 의 결과인 v 0.165136 0.075692 0.4730
# 무관한 i 0.999170 0.163462 1.0215
# q 를 넣으면 표준편차가 0.4402 배로 줄어듭니다. y 의 잡음을 걷어 냈기 때문입니다
# w 를 넣으면 1.3948 배로 늡니다. x 의 움직임 중 쓸 수 있는 몫이 줄기 때문입니다
# w 는 x 의 원인일 뿐 y 와 직접 이어져 있지 않습니다. 넣을 이유가 없습니다
# v 는 표준편차가 아니라 계수 자체를 망칩니다. 평균이 0.1651 로 참값 1.0 을 벗어납니다
# 무관한 i 는 거의 영향이 없습니다. 자유도를 하나 쓸 뿐입니다
# 다중회귀가 답하지 않는 것을 정리합니다
# 물음 이 강의가 답하는가
# 다른 변수를 고정하면 어떤가 답합니다
# 어느 변수가 더 중요한가 단위 문제라 못 답합니다
# 무엇을 넣어야 하는가 그림이 정합니다
# 넣을 변수를 못 재면 답할 수 없습니다
# x 를 바꾸면 y 가 바뀌는가 191강에서
# 넷째 줄이 177강 문제 4 의 교환가능성입니다. 회귀가 못 넘는 벽입니다