01단원이 **"다른가"**를 물었습니다. 이제 "얼마나 어떻게 다른가"를 묻습니다.
집단을 나누는 대신 선을 하나 긋습니다. 그런데 선은 무수히 많으므로 고르는 기준이 필요하고, 그 기준이 잔차 제곱합입니다.
| 무엇을 얻는가 | 어디에 쓰는가 |
|---|---|
| 기울기 | 가 한 단위 늘 때 의 변화 |
| 절편 | 가 일 때의 |
| 잔차 | 모형이 못 담은 것 |
| R^ | 얼마나 설명했는가 |
셋째 줄이 이 강의의 절반입니다. 회귀는 어떤 자료를 넣어도 계수를 뱉으므로, 그 계수를 믿을지는 잔차가 정합니다.
그리고 놀라운 사실이 하나 있습니다. 178강의 두 집단 비교가 이 강의의 특수한 경우입니다. 집단을 과 로 적고 회귀하면 값까지 정확히 같습니다.
문제. 최소제곱으로 선을 정합니다.
(1) 기울기와 절편을 구하세요.
(2) 정말 최소인지 확인하세요.
(3) 잔차에 자동으로 생기는 성질을 찾으세요.
생각의 실마리. 선을 고르려면 좋은 선의 기준이 필요합니다. 잔차의 합을 쓰면 양수와 음수가 상쇄되므로 제곱해서 더합니다.
풀이. (1) 여덟 점입니다.
| 값 | |
|---|---|
| 무엇 | 값 |
|---|---|
| 평균 | |
| 평균 | |
| S_ | |
| S_ | |
| 기울기 | |
| 절편 |
(2) 정말 최소인지 기울기를 흔들어 봅니다.
| 기울기 | 잔차 제곱합 | 최소 대비 |
|---|---|---|
양쪽이 정확히 대칭입니다. 잔차 제곱합이 기울기의 이차함수라 그렇고, 이차함수라서 최소가 하나뿐입니다.
어긋나면 늘고 어긋나면 늘어 네 배입니다. 제곱에 비례하는 것이 그대로 보입니다.
(3) 잔차를 봅니다.
| 무엇 | 값 |
|---|---|
| 잔차의 합 | |
| 잔차와 의 곱의 합 |
둘 다 입니다. 최소가 되는 조건에서 바로 나옵니다.
그래서 잔차는 와 상관이 항상 입니다. 자료가 어떻든 그렇습니다.
이것이 검사할 값이 아니라는 뜻입니다. "잔차와 가 무관한지 확인했습니다"는 아무 정보가 없는 문장인데, 절편이 있는 최소제곱은 그것을 강제하기 때문입니다. 문제 4에서 보는 것은 잔차의 다른 성질들입니다.
이 문제에서 배우는 것. 최소제곱이 "가장 좋은" 선이라는 말은 기준을 정한 뒤에만 맞습니다. 제곱 대신 절댓값을 쓰면 다른 선이 나오고, 그것은 중앙값 쪽으로 강건한 선이 됩니다. 제곱을 쓰는 이유는 미분이 깔끔해서이기도 하지만, 오차가 정규분포일 때 최대우도 추정량이 되기 때문입니다. 206강에서 그 대응을 확인하며, 손실함수를 고르는 것이 분포를 가정하는 것이라는 사실이 그때 드러납니다.
바로 확인 1.
확인 1-1. 최소제곱의 기울기를 식으로 쓰세요.
답. 를 로 나눈 값입니다.
확인 1-2. 검산에서 기울기를 와 어긋냈을 때의 증가를 쓰세요.
답. 와 으로 제곱에 비례합니다.
확인 1-3. 잔차와 의 상관이 왜 검사할 값이 아닌지 쓰세요.
답. 최소제곱 조건이 그것을 으로 강제하기 때문입니다.
문제. 계수의 불확실성을 다룹니다.
(1) 기울기의 표준오차와 구간을 구하세요.
(2) 무엇이 표준오차를 줄이는지 확인하세요.
(3) 두 집단 비교와의 관계를 확인하세요.
생각의 실마리. 기울기도 표본에서 계산한 값이므로 흔들립니다. 다른 표본이었으면 다른 값이 나왔을 텐데, 그 폭이 표준오차입니다.
풀이. (1) 계산합니다.
| 무엇 | 값 |
|---|---|
| 잔차 제곱합 | |
| 자유도 | |
| 오차분산 추정 | |
| S_ | |
| 기울기의 표준오차 |
는 이고 자유도 에서 값은 입니다. 퍼센트 구간은 입니다.
자유도가 입니다. 절편과 기울기 두 개를 추정했으므로 둘을 뺍니다. 181강 문제 1에서 자유도를 셌던 것과 같은 논리입니다.
(2) 무엇이 표준오차를 줄이는지 봅니다. 를 격자로 고정하고 잡음만 번 다시 뽑았습니다.
| 무엇을 바꾸는가 | 의 폭 | 오차 sd | 이론 se | 모의 평균 se | |
|---|---|---|---|---|---|
| 기준 | |||||
| 을 네 배로 | |||||
| 를 두 배 퍼뜨림 | |||||
| 오차를 절반으로 |
셋 다 표준오차를 대략 절반으로 줄입니다. 이론값과 모의 평균이 잘 맞습니다.
셋째 줄이 설계의 자리입니다. 을 네 배로 늘리는 것과 를 두 배 넓게 퍼뜨리는 것이 같은 효과인데, 후자는 표본을 더 안 씁니다. 178강 문제 3에서 짝짓기로 분산을 줄인 것과 같은 발상입니다.
(3) 집단을 과 로 적고 회귀합니다.
| 무엇 | 회귀에서 | 178강 방식 |
|---|---|---|
| 기울기와 평균 차이 | ||
| 통계량 | ||
| 절편과 A의 평균 |
완전히 같은 값입니다. 178강은 회귀의 한 경우였습니다.
절편이 일 때의 이므로 A 집단의 평균이고, 기울기가 가 늘 때의 변화이므로 두 평균의 차이입니다. 186강에서 더미변수를 배우면 이 대응이 일반화됩니다.
이 문제에서 배우는 것. 를 어디에 두느냐가 통계량만큼 중요합니다. 실험을 설계할 수 있다면 를 양 끝에 몰아 두는 것이 를 최대로 만들지만, 그러면 직선인지 확인할 방법이 사라집니다. 가운데 점들이 있어야 굽었는지 볼 수 있으므로, 정밀도와 진단 사이의 맞바꿈이 생깁니다. 관측 자료에서는 가 이미 정해져 있으므로 이 선택 자체가 없고, 좁은 범위에 몰려 있으면 기울기를 잘 못 잽니다.
바로 확인 2.
확인 2-1. 기울기의 표준오차를 식으로 쓰세요.
답. 오차분산 추정을 로 나눈 값의 제곱근입니다.
확인 2-2. 검산에서 를 두 배 퍼뜨렸을 때의 표준오차를 기준과 견주세요.
답. 에서 로 절반이 됩니다.
확인 2-3. 두 집단 비교와 회귀의 대응을 쓰세요.
답. 절편이 A의 평균이고 기울기가 두 평균의 차이입니다.
문제. 를 정의하고 한계를 찾습니다.
(1) 제곱합을 나누고 를 구하세요.
(2) 가 높은데 나쁜 모형을 만드세요.
(3) 가 의 퍼짐에 끌려다니는지 확인하세요.
생각의 실마리. 180강 문제 2에서 제곱합을 집단 사이와 집단 안으로 나눴습니다. 회귀에서는 회귀가 설명한 것과 남은 것으로 나눕니다.
풀이. (1) 나눕니다.
| 무엇의 제곱합 | 값 | 자유도 |
|---|---|---|
| 회귀가 설명한 것 | ||
| 남은 것 | ||
| 전체 |
상관이 이고 그 제곱이 로 와 같습니다. 단순회귀에서는 언제나 그렇습니다.
180강의 에타제곱과 같은 양입니다. 집단 평균 대신 회귀선을 넣은 것뿐이며, 분산분석이 설명변수가 범주형인 회귀라는 심화 6의 이야기가 여기서 확인됩니다.
(2) 가 높은데 나쁜 모형을 만듭니다.
| 자료 | R^ | 기울기 | 무엇이 문제인가 |
|---|---|---|---|
| 직선에 잡음 | 없습니다 | ||
| 곡선인데 직선을 얹음 | 굽어 있습니다 | ||
| 점 하나가 끌고 감 | 한 점이 정합니다 | ||
| 잡음이 커짐 | 흩어짐이 다릅니다 |
둘째 줄의 가 로 첫째 줄과 거의 같습니다. 그런데 참 관계는 이고 직선을 얹었으므로 모형이 틀렸습니다.
셋째 줄에서 마지막 점 하나를 빼 봅니다.
| 무엇 | R^ | 기울기 |
|---|---|---|
| 개 전부 | ||
| 한 점을 뺌 |
가 에서 으로 내려갑니다. 관계 전체가 그 점 하나였습니다.
166강 문제 1의 앤스컴 자료와 같은 이야기입니다. 수치만으로는 못 가리며, 그래서 문제 4의 진단이 필요합니다.
(3) 같은 관계와 같은 오차에서 의 범위만 바꿉니다.
| 의 범위 | 기울기 | 오차 sd 추정 | R^ |
|---|---|---|---|
| ~ | |||
| ~ | |||
| ~ | |||
| ~ |
기울기는 근처, 오차 sd는 근처로 그대로인데 만 에서 로 움직입니다.
분자에 의 분산이 들어 있기 때문입니다. 은 모형의 성질이 아니라 자료가 어디까지 퍼졌는지의 성질입니다.
이 문제에서 배우는 것. 로 두 모형을 견주는 것이 대개 잘못된 비교입니다. 다른 자료에서 잰 은 의 범위가 다르므로 견줄 수 없고, 같은 자료에서 변수를 더 넣으면 은 반드시 오릅니다. 그래서 189강에서 조정된 과 정보기준이 나옵니다. 보고할 때 보다 나은 것은 오차 sd 추정인데, 그것은 와 같은 단위라 "이 모형으로 예측하면 대략 얼마나 틀리는가"를 바로 말해 줍니다. 위 표에서 그 값이 네 줄 모두 근처로 안정적입니다.
바로 확인 3.
확인 3-1. 단순회귀에서 과 상관의 관계를 쓰세요.
답. 이 상관의 제곱이며 검산에서 입니다.
확인 3-2. 검산에서 점 하나를 뺐을 때 의 변화를 쓰세요.
답. 에서 로 내려갑니다.
확인 3-3. 검산에서 의 범위만 바꿨을 때 의 범위를 쓰세요.
답. 에서 까지 움직입니다.
문제. 잔차로 진단합니다.
(1) 네 가지 자료의 잔차 성질을 재세요.
(2) 레버리지와 영향력을 구분하세요.
생각의 실마리. 문제 1에서 잔차의 합과 와의 곱은 **자동으로 **이었습니다. 자동이 아닌 성질을 봐야 하며, 순서, 크기, 위치가 그것입니다.
풀이. (1) 네 가지 자료를 각각 개씩 만들어 잽니다.
| 자료 | 이웃 잔차의 상관 | 작은쪽 대 큰쪽 분산비 | 잔차 왜도 | 최대 레버리지 |
|---|---|---|---|---|
| 직선에 정규 잡음 | ||||
| 굽은 관계 | ||||
| 퍼짐이 커짐 | ||||
| 한 점이 멀리 |
첫 줄이 기준입니다. 상관 는 잡음 크기 의 배쯤이고, 분산비는 , 레버리지는 로 둘 다 기준값 근처입니다.
둘째 줄은 이웃 잔차의 상관이 입니다. 굽은 것을 직선으로 폈으므로 한쪽에서 계속 위로, 다른 쪽에서 계속 아래로 벗어납니다. 그런데 분산비는 으로 정상이라, 이 진단만 걸립니다.
셋째 줄은 분산비가 입니다. 큰 에서 흩어짐이 크며, 188강의 이분산입니다. 이웃 상관은 로 정상이라 다른 진단이 걸립니다.
넷째 줄은 레버리지가 입니다. 한 점이 전체 정보의 절반을 쥐고 있으며, 왜도도 로 크게 어긋납니다.
레버리지의 합이 추정한 계수의 수와 같습니다. 평균이 이므로, 그 몇 배가 넘으면 의심합니다.
(2) 인 점 하나를 두고 그 점의 만 바꿔 봅니다.
| 그 점의 | 레버리지 | 기울기 | 잔차 | 쿡 거리 |
|---|---|---|---|---|
레버리지가 로 네 줄 모두 같습니다. 와 무관하게 가 멀다는 사실만 담기 때문입니다.
그런데 기울기는 에서 까지 움직입니다. 레버리지만으로는 이 차이를 못 봅니다.
쿡 거리가 레버리지와 잔차를 함께 씁니다. 첫 줄은 이고 나머지는 을 넘어, 실제로 선을 흔드는 정도를 가려냅니다.
이 문제에서 배우는 것. 레버리지가 큰 점을 지우는 것이 자동으로 옳지 않습니다. 그 점이 의 범위를 넓혀 문제 2의 를 키우고 있으므로, 정상적인 관측이라면 가장 값진 점입니다. 지워야 하는 것은 레버리지가 큰 점이 아니라 기록이 잘못된 점이며, 그 판단은 161강처럼 자료 밖의 지식에서 옵니다. 실무에서 할 일은 그 점을 넣은 결과와 뺀 결과를 둘 다 보고하는 것이고, 결론이 갈리면 그 사실 자체가 결과입니다.
바로 확인 4.
확인 4-1. 검산에서 굽은 관계와 이분산이 각각 어느 진단에 걸리는지 쓰세요.
답. 굽은 것은 이웃 상관 이고 이분산은 분산비 입니다.
확인 4-2. 레버리지를 식으로 쓰고 그 합이 무엇인지 쓰세요.
답. 에 표준화한 거리의 제곱을 더한 값이며 합은 추정한 계수의 수입니다.
확인 4-3. 검산에서 레버리지가 같은데 기울기가 얼마나 달라졌는지 쓰세요.
답. 레버리지는 로 같은데 기울기가 에서 까지 갑니다.
문제. 예측 구간을 만듭니다.
(1) 평균의 구간과 관측의 구간을 구분하세요.
(2) 자료 범위 밖에서 어떻게 되는지 확인하세요.
(3) 단순회귀가 답하지 않는 것을 정리하세요.
생각의 실마리. "일 때 가 얼마입니까"에 두 가지 뜻이 있습니다. 인 사람들의 평균과 인 사람 한 명은 다릅니다.
풀이. (1) 둘을 계산합니다.
| 예측값 | 평균의 구간 | 관측의 구간 | 폭의 비 | |
|---|---|---|---|---|
관측의 구간에 이 하나 더 들어 있습니다. 개별 관측은 선 둘레에 오차만큼 더 흩어지므로, 그 몫이 추가됩니다.
폭의 비가 에서 으로 가장 큽니다. 그 자리에서 평균의 구간이 가장 좁기 때문이며, 멀어질수록 둘의 차이가 줄어듭니다.
둘을 섞는 것이 흔한 실수입니다. "이 광고비면 매출이 얼마나 됩니까"에 평균의 구간을 답하면 실제 한 달의 변동을 크게 과소평가합니다.
(2) 자료 밖으로 나가 봅니다.
| 예측값 | 평균 구간의 폭 | 자료 범위 안인가 | |
|---|---|---|---|
| 예 | |||
| 예 | |||
| 예 | |||
| 아니오 | |||
| 아니오 |
가 이면 구간의 폭이 가 평균일 때의 배입니다.
구간이 넓어지는 것은 정직합니다. 문제는 그다음인데, 그 폭도 직선이 계속 맞다는 가정 아래의 값입니다.
자료가 부터 까지인데 에서 직선인지 아닌지는 자료에 없습니다. 문제 3의 둘째 줄처럼 실제로 굽어 있다면, 이 여도 외삽은 완전히 틀립니다.
(3) 단순회귀가 답하지 않는 것을 정리합니다.
| 물음 | 이 강의가 답하는가 |
|---|---|
| 와 가 함께 가는가 | 답합니다 |
| 얼마나 함께 가는가 | 기울기가 답합니다 |
| 얼마나 정확한가 | 구간이 답합니다 |
| 다른 변수 때문은 아닌가 | 185강에서 |
| 를 바꾸면 가 바뀌는가 | 191강에서 |
| 직선이 맞는 모양인가 | 잔차로 의심만 합니다 |
넷째 줄이 다음 강의입니다. 변수를 하나 더 넣으면 계수의 뜻이 바뀝니다.
이 문제에서 배우는 것. 예측이 잘 맞는다는 것과 계수가 옳다는 것이 다른 이야기입니다. 외삽 없이 자료 범위 안에서만 예측한다면 굽은 관계에 직선을 얹어도 그럭저럭 맞고, 문제 3의 둘째 줄이 인 것이 그 증거입니다. 그런데 그 모형의 기울기 는 어떤 뜻도 없는 숫자입니다. 예측이 목적이면 모형이 틀려도 쓸 수 있고, 해석이 목적이면 잘 맞아도 못 씁니다. S9에서 예측 성능만 보는 문화가 자리 잡는데, 그 문화를 해석에 그대로 가져오면 안 됩니다.
바로 확인 5.
확인 5-1. 평균의 구간과 관측의 구간이 어디서 갈리는지 쓰세요.
답. 관측의 구간에 오차분산이 한 번 더 들어갑니다.
확인 5-2. 검산에서 폭의 비가 가장 큰 와 그 값을 쓰세요.
답. 에서 이며 의 평균 자리입니다.
확인 5-3. 외삽이 왜 위험한지 검산 값과 함께 쓰세요.
답. 에서 폭이 배가 되고 그마저 직선 가정 아래의 값이기 때문입니다.
| 무엇 | 식 |
|---|---|
| 기울기 | S_{xy}/S_ |
| 절편 | \bar{y}-\hat{\beta}_{1}\bar |
| 오차분산 추정 | |
| 기울기의 표준오차 | |
| R^ | |
| 레버리지 | 1/n+(x_{i}-\bar{x})^{2}/S_ |
| 잔차에서 무엇을 보는가 | 무엇을 뜻하는가 |
|---|---|
| 이웃 잔차의 상관 | 모양이 틀렸습니다 |
| 에 따른 분산비 | 이분산입니다 |
| 왜도와 꼬리 | 이상치나 비정규 |
| 레버리지 | 가 멀리 있습니다 |
| 쿡 거리 | 실제로 선을 흔듭니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 잔차와 의 상관을 검사합니다 | 언제나 입니다 |
| 로 모형을 견줍니다 | 의 퍼짐에 끌려다닙니다 |
| 이 높으니 직선이 맞다고 봅니다 | 굽어도 가 나옵니다 |
| 레버리지가 큰 점을 지웁니다 | 가장 값진 점일 수 있습니다 |
| 평균의 구간을 개별 예측에 씁니다 | 오차분산이 빠져 있습니다 |
| 자료 범위 밖을 예측합니다 | 구간도 가정 아래의 값입니다 |
문제 6. 최소제곱의 기울기와 절편을 식으로 쓰세요.
답. 와 입니다.
문제 7. 검산에서 기울기를 와 어긋냈을 때의 증가를 쓰세요.
답. 와 으로 제곱에 비례합니다.
문제 8. 잔차와 의 상관이 왜 검사할 값이 아닌지 쓰세요.
답. 최소제곱 조건이 그것을 으로 강제하기 때문입니다.
문제 9. 기울기의 표준오차를 식으로 쓰고 자유도를 쓰세요.
답. 이고 자유도는 입니다.
문제 10. 검산에서 를 두 배 퍼뜨렸을 때의 표준오차를 기준과 견주세요.
답. 에서 로 절반이 됩니다.
문제 11. 두 집단 비교와 회귀의 대응을 검산 값과 함께 쓰세요.
답. 절편이 A의 평균 이고 기울기가 차이 이며 도 둘 다 입니다.
문제 12. 단순회귀에서 과 상관의 관계를 쓰세요.
답. 이 상관의 제곱이며 검산에서 입니다.
문제 13. 검산에서 점 하나를 뺐을 때 과 기울기의 변화를 쓰세요.
답. 과 에서 과 이 됩니다.
문제 14. 검산에서 의 범위만 바꿨을 때 의 범위를 쓰세요.
답. 에서 까지 움직입니다.
문제 15. 검산에서 굽은 관계와 이분산이 각각 어느 진단에 걸리는지 쓰세요.
답. 굽은 것은 이웃 상관 이고 이분산은 분산비 입니다.
문제 16. 레버리지를 식으로 쓰고 그 합이 무엇인지 쓰세요.
답. 에 표준화한 거리의 제곱을 더한 값이며 합은 추정한 계수의 수입니다.
문제 17. 검산에서 폭의 비가 가장 큰 와 그 값을 쓰세요.
답. 에서 입니다.
문제 18. 외삽이 왜 위험한지 검산 값과 함께 쓰세요.
답. 에서 폭이 배가 되고 그마저 직선 가정 아래의 값이기 때문입니다.
심화 1. 회귀라는 이름의 유래를 정리하세요.
이름이 이상합니다. 선을 긋는 일에 되돌아간다는 말이 붙어 있습니다.
표준화하면 기울기가 상관계수입니다. 상관이 보다 작으면, 가 평균에서 표준편차 위여도 의 예측은 표준편차 위입니다.
| 의 위치 | 상관 일 때 의 예측 |
|---|---|
| 표준편차 | 표준편차 |
| 표준편차 | 표준편차 |
| 표준편차 | 표준편차 |
언제나 평균 쪽으로 당겨집니다. 키 큰 아버지의 아들이 아버지보다 작은 경향을 골턴이 "평균으로의 회귀"라 불렀고, 그 이름이 방법 전체에 붙었습니다.
이것이 실수를 만듭니다. 성적이 나빴던 학생이 다음에 오르는 것은 처치의 효과가 아니라 회귀일 수 있으며, 178강 문제 3의 짝지은 자료에서 특히 조심해야 합니다.
심화 2. 에도 오차가 있으면 어떻게 되는지 정리하세요.
176강 문제 1의 감쇠가 여기서 그대로 나옵니다.
| 어디에 오차가 | 기울기에 |
|---|---|
| 에만 | 영향이 없습니다 |
| 에만 | 신뢰도를 곱합니다 |
| 둘 다 | 의 몫만 작용합니다 |
최소제곱이 를 조건으로 두고 의 평균을 맞히기 때문입니다. 가 흐려지면 조건 자체가 흐려집니다.
직교회귀는 다른 답을 줍니다. 점에서 선까지의 수직 거리를 최소화하면 와 를 대칭으로 다루는데, 그것은 다른 물음에 대한 답입니다. 예측이 목적이면 최소제곱이 맞고, 두 변수의 관계 자체가 목적이면 직교회귀를 볼 수 있습니다.
심화 3. 변환으로 굽은 관계를 다루는 법을 정리하세요.
문제 3의 둘째 줄이 굽어 있었습니다. 변수를 바꾸면 직선이 됩니다.
| 참 관계 | 무엇을 변환 |
|---|---|
| y=ax^ | 둘 다 로그 |
| y=ae^ | 만 로그 |
| 만 로그 | |
| y=a+bx+cx^ | 을 변수로 추가 |
첫째 줄에서 기울기가 탄력성이 됩니다. 가 퍼센트 늘 때 가 몇 퍼센트 느는지이며, 179강 문제 5의 해석 변화와 같은 자리입니다.
넷째 줄은 변환이 아니라 변수 추가입니다. 을 넣어도 계수에 대해서는 여전히 선형이라 최소제곱이 그대로 작동하며, 이것이 다중회귀의 첫 응용입니다.
변환은 오차 구조도 바꿉니다. 에 로그를 취하면 곱셈형 오차를 덧셈형으로 만드는데, 이분산이 함께 고쳐지는 경우가 많습니다.
심화 4. 최소제곱의 최적성을 정리하세요.
가우스-마르코프 정리가 최소제곱을 정당화합니다.
| 가정 | 무엇이 필요한가 |
|---|---|
| 선형성 | 모형이 계수에 대해 선형 |
| 오차의 평균이 | 체계적 치우침이 없음 |
| 등분산 | 모든 에서 같은 흩어짐 |
| 무상관 | 오차끼리 독립 |
이 넷 아래에서 최소제곱이 불편추정량 중 분산이 가장 작습니다. 정규성은 필요 없습니다.
정규성이 필요한 것은 와 를 쓸 때입니다. 계수 자체는 정규성 없이도 최선이며, 179강 문제 1에서 본 것처럼 표본이 크면 검정도 버팁니다.
셋째 줄이 깨지면 최소제곱이 최선이 아닙니다. 여전히 불편이지만 표준오차가 틀리며, 188강이 그 문제를 다룹니다.
심화 5. 잔차를 표준화하는 법을 정리하세요.
문제 4에서 잔차를 그대로 썼습니다. 잔차의 분산이 자리마다 다릅니다.
레버리지가 큰 자리의 잔차가 오히려 작습니다. 선이 그 점 쪽으로 당겨져 오기 때문이며, 그래서 큰 영향을 주는 점이 잔차 그림에서 안 보입니다.
| 무엇 | 어떻게 나누는가 |
|---|---|
| 표준화 잔차 | 로 나눕니다 |
| 스튜던트화 잔차 | 그 점을 뺀 로 나눕니다 |
| 쿡 거리 | 잔차와 레버리지를 곱합니다 |
둘째 줄이 가장 정직합니다. 그 점 자신이 를 키워 자기 잔차를 작아 보이게 하는 것을 막습니다.
문제 4의 넷째 줄에서 왜도가 이었던 것이 이 문제입니다. 표준화하지 않은 잔차라 이상치가 그대로 드러났는데, 실무에서는 표준화한 뒤 을 넘는지 봅니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 변수 여럿 | 다중회귀 | 185강 |
| 범주형 설명변수 | 더미와 교호작용 | 186강 |
| 등분산 붕괴 | 강건표준오차 | 188강 |
| 손실함수 | 최대우도와의 대응 | 206강 |
넷째 줄이 가장 멀리 갑니다. 잔차 제곱합을 최소화하는 것이 오차가 정규일 때의 최대우도와 같으며, 206강에서 그 대응을 유도합니다.
손실함수를 고르는 것이 오차 분포를 가정하는 것이라는 사실이 그때 드러나며, 이 강의의 "제곱을 쓰는 이유"가 거기서 답을 얻습니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| \hat{\beta}_ | 베타 하나 햇 | 추정한 기울기입니다 |
| S_ | 에스 엑스엑스 | 의 편차 제곱합입니다 |
| S_ | 에스 엑스와이 | 와 의 편차 곱의 합입니다 |
| e_ | 잔차 | 관측에서 예측을 뺀 값입니다 |
| SSE | 잔차 제곱합 | 남은 것의 제곱합입니다 |
| s^ | 오차분산 추정 | SSE를 로 나눈 값입니다 |
| R^ | 결정계수 | 설명한 몫입니다 |
| h_ | 레버리지 | 가 얼마나 멀리 있는지입니다 |
| 쿡 거리 | Cook's distance | 그 점이 선을 얼마나 흔드는지입니다 |
| 신뢰구간 | confidence interval | 평균을 담는 구간입니다 |
| 예측구간 | prediction interval | 개별 관측을 담는 구간입니다 |
| 외삽 | extrapolation | 자료 범위 밖의 예측입니다 |
| 가우스-마르코프 | Gauss-Markov | 최소제곱이 최선인 조건입니다 |
| 평균으로의 회귀 | regression to the mean | 예측이 평균 쪽으로 당겨집니다 |
다음은 185강 다중회귀의 해석입니다. 이 강의에서 변수가 하나였습니다.
177강 문제 3에서 교란과 충돌부와 중간변수를 봤는데, 그것이 회귀에서 어떻게 나타나는지가 185강입니다. 같은 자료에서 를 넣고 빼는 것만으로 의 계수가 부호까지 바뀔 수 있으며, 어느 쪽이 맞는지는 자료가 말해 주지 않습니다.
import numpy as np
rng = np.random.default_rng(20260921)
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 tcrit(df, alpha=0.05):
lo, hi = 0.0, 60.0
for _ in range(200):
mid = 0.5 * (lo + hi)
if t_p2(mid, df) > alpha:
lo = mid
else:
hi = mid
return 0.5 * (lo + hi)
def fit(x, y):
n = len(x)
xb, yb = x.mean(), y.mean()
sxx = ((x - xb) ** 2).sum()
sxy = ((x - xb) * (y - yb)).sum()
b1 = sxy / sxx
b0 = yb - b1 * xb
yh = b0 + b1 * x
e = y - yh
sse = (e ** 2).sum()
s2 = sse / (n - 2)
se1 = np.sqrt(s2 / sxx)
se0 = np.sqrt(s2 * (1.0 / n + xb ** 2 / sxx))
sst = ((y - yb) ** 2).sum()
return dict(b0=b0, b1=b1, yh=yh, e=e, sse=sse, sst=sst, s2=s2,
se0=se0, se1=se1, sxx=sxx, n=n, r2=1.0 - sse / sst)
# --- 문제 1: 선 하나를 어떻게 고르는가 -----------------------------------
print(" 두 변수 사이에 선을 하나 긋습니다")
x1 = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0])
y1 = np.array([2.1, 3.9, 6.2, 7.8, 10.3, 11.9, 14.1, 16.2])
print(" %s %s" % (pw("x", 10), rw(" ".join("%g" % v for v in x1), 40)))
print(" %s %s" % (pw("y", 10), rw(" ".join("%g" % v for v in y1), 40)))
print(" 선을 고르는 기준이 필요합니다. 잔차 제곱합을 가장 작게 만듭니다")
f1 = fit(x1, y1)
print(" 기울기 = Sxy / Sxx 이고 절편 = y평균 - 기울기 x x평균 입니다")
print(" %s %s" % (pw("무엇", 20), rw("값", 14)))
for nm, v in [("x 평균", float(x1.mean())), ("y 평균", float(y1.mean())),
("Sxx", float(f1["sxx"])),
("Sxy", float(((x1 - x1.mean()) * (y1 - y1.mean())).sum())),
("기울기", float(f1["b1"])), ("절편", float(f1["b0"]))]:
print(" %s %14.6f" % (pw(nm, 20), v))
print(" 이 선이 정말 최소인지 확인합니다")
print(" 기울기를 조금씩 흔들어 잔차 제곱합을 봅니다")
print(" %s %s %s" % (pw("기울기", 14), rw("잔차 제곱합", 16), rw("최소 대비", 14)))
for db in [-0.10, -0.05, 0.0, 0.05, 0.10]:
bb = f1["b1"] + db
aa = y1.mean() - bb * x1.mean()
ss = ((y1 - aa - bb * x1) ** 2).sum()
print(" %s %16.6f %14.6f"
% (pw("%.6f" % bb, 14), ss, ss - f1["sse"]))
print(" 가운데가 가장 작습니다. 양쪽으로 갈수록 커집니다")
print(" 제곱합이 기울기의 이차함수라 최소가 하나뿐입니다")
print(" 잔차에는 두 가지 성질이 자동으로 생깁니다")
print(" %s %s" % (pw("무엇", 26), rw("값", 18)))
print(" %s %18.10f" % (pw("잔차의 합", 26), float(f1["e"].sum())))
print(" %s %18.10f" % (pw("잔차와 x 의 곱의 합", 26), float((f1["e"] * x1).sum())))
print(" 둘 다 0 입니다. 최소가 되는 조건에서 바로 나옵니다")
print(" 그래서 잔차는 x 와 상관이 0 이고 늘 그렇습니다. 검사할 값이 아닙니다")
# --- 문제 2: 계수가 무엇을 재는가 ----------------------------------------
print(" 기울기의 표준오차를 구합니다")
print(" se(b1) = sqrt(오차분산 / Sxx) 입니다")
print(" %s %s" % (pw("무엇", 22), rw("값", 14)))
for nm, v in [("잔차 제곱합", f1["sse"]), ("자유도", float(f1["n"] - 2)),
("오차분산 추정", f1["s2"]), ("Sxx", f1["sxx"]),
("기울기의 표준오차", f1["se1"])]:
print(" %s %14.6f" % (pw(nm, 22), v))
tv = f1["b1"] / f1["se1"]
print(" t = %.4f 이고 자유도 %d 에서 p 값은 %.10f 입니다"
% (tv, f1["n"] - 2, t_p2(tv, f1["n"] - 2)))
tc = tcrit(f1["n"] - 2)
print(" 95 퍼센트 구간은 [%.6f, %.6f] 입니다"
% (f1["b1"] - tc * f1["se1"], f1["b1"] + tc * f1["se1"]))
print(" 무엇이 표준오차를 줄이는지 봅니다")
print(" x 를 격자로 고정하고 잡음만 2000 번 다시 뽑아 평균을 냅니다")
print(" %s %s %s %s %s %s"
% (pw("무엇을 바꾸는가", 22), rw("n", 6), rw("x 의 폭", 10), rw("오차 sd", 10),
rw("이론 se", 12), rw("모의 평균 se", 14)))
for nm, n2, wid, se in [("기준", 20, 1.0, 1.0), ("n 을 네 배로", 80, 1.0, 1.0),
("x 를 두 배 퍼뜨림", 20, 2.0, 1.0),
("오차를 절반으로", 20, 1.0, 0.5)]:
xx = np.linspace(0.0, wid, n2)
sxx = ((xx - xx.mean()) ** 2).sum()
acc = 0.0
for _ in range(2000):
yy = 2.0 * xx + rng.normal(0.0, se, n2)
acc += fit(xx, yy)["se1"]
print(" %s %6d %10.2f %10.2f %12.6f %14.6f"
% (pw(nm, 22), n2, wid, se, se / np.sqrt(sxx), acc / 2000.0))
print(" 셋 다 표준오차를 줄입니다. 이론값과 모의 평균이 잘 맞습니다")
print(" x 를 넓게 퍼뜨리는 것이 설계의 자리입니다")
print(" 178강 문제 3 에서 짝짓기로 분산을 줄인 것과 같은 발상입니다")
print(" 두 집단 비교가 회귀의 특수한 경우입니다")
ga = np.array([23.0, 25.0, 21.0, 24.0, 22.0])
gb = np.array([28.0, 31.0, 27.0, 30.0, 29.0])
d0 = np.concatenate([np.zeros(5), np.ones(5)])
yy0 = np.concatenate([ga, gb])
fd = fit(d0, yy0)
sp = np.sqrt((ga.var(ddof=1) + gb.var(ddof=1)) / 2.0)
tt = (gb.mean() - ga.mean()) / (sp * np.sqrt(2.0 / 5))
print(" 집단을 0 과 1 로 적고 그 변수로 회귀합니다")
print(" %s %s %s" % (pw("무엇", 22), rw("회귀에서", 14), rw("178강 방식", 14)))
print(" %s %14.6f %14.6f" % (pw("기울기와 평균 차이", 22), fd["b1"],
float(gb.mean() - ga.mean())))
print(" %s %14.6f %14.6f" % (pw("t 통계량", 22), fd["b1"] / fd["se1"], tt))
print(" %s %14.6f %14.6f" % (pw("절편과 A 의 평균", 22), fd["b0"], float(ga.mean())))
print(" 완전히 같은 값입니다. 178강은 회귀의 한 경우였습니다")
# --- 문제 3: 얼마나 설명하는가 -------------------------------------------
print(" 제곱합을 나누면 180강의 구조가 그대로 나옵니다")
print(" %s %s %s" % (pw("무엇의 제곱합", 20), rw("값", 14), rw("자유도", 10)))
ssr = f1["sst"] - f1["sse"]
print(" %s %14.6f %10d" % (pw("회귀가 설명한 것", 20), ssr, 1))
print(" %s %14.6f %10d" % (pw("남은 것", 20), f1["sse"], f1["n"] - 2))
print(" %s %14.6f %10d" % (pw("전체", 20), f1["sst"], f1["n"] - 1))
print(" R^2 = 설명한 것 / 전체 = %.6f 입니다" % f1["r2"])
print(" 상관계수의 제곱과 같은지 봅니다. 상관은 %.6f 이고 제곱은 %.6f 입니다"
% (float(np.corrcoef(x1, y1)[0, 1]), float(np.corrcoef(x1, y1)[0, 1] ** 2)))
print(" R^2 이 크다고 좋은 모형은 아닙니다")
print(" %s %s %s %s" % (pw("자료", 26), rw("R^2", 12), rw("기울기", 12),
rw("무엇이 문제인가", 22)))
xa = np.linspace(1, 10, 40)
cases = [("직선에 잡음", xa, 2.0 * xa + rng.normal(0, 1.0, 40), "없습니다"),
("곡선인데 직선을 얹음", xa, xa ** 2 + rng.normal(0, 1.0, 40), "굽어 있습니다"),
("점 하나가 끌고 감", np.append(xa[:39], 40.0),
np.append(rng.normal(0, 1.0, 39), 60.0), "한 점이 정합니다"),
("잡음이 커짐", xa, 2.0 * xa + rng.normal(0, 1.0, 40) * xa, "흩어짐이 다릅니다")]
for nm, xx, yy, msg in cases:
ff = fit(xx, yy)
print(" %s %12.6f %12.6f %s" % (pw(nm, 26), ff["r2"], ff["b1"], rw(msg, 22)))
print(" 둘째 줄은 R^2 이 0.95 인데 직선이 틀렸습니다")
xo, yo = cases[2][1], cases[2][2]
fo = fit(xo[:-1], yo[:-1])
print(" 셋째 줄에서 마지막 점 하나를 빼 봅니다")
print(" %s %s %s" % (pw("무엇", 20), rw("R^2", 12), rw("기울기", 12)))
print(" %s %12.6f %12.6f" % (pw("40 개 전부", 20), fit(xo, yo)["r2"], fit(xo, yo)["b1"]))
print(" %s %12.6f %12.6f" % (pw("한 점을 뺌", 20), fo["r2"], fo["b1"]))
print(" R^2 이 0.83 에서 거의 0 으로 내려갑니다. 관계 전체가 그 점 하나였습니다")
print(" 166강 문제 1 의 앤스컴 자료와 같은 이야기입니다. 수치만으로는 못 가립니다")
print(" R^2 은 x 의 퍼짐에도 끌려다닙니다")
print(" 같은 관계와 같은 오차에서 x 의 범위만 바꿉니다")
print(" %s %s %s %s" % (pw("x 의 범위", 16), rw("기울기", 12),
rw("오차 sd 추정", 14), rw("R^2", 12)))
for lo, hi in [(0.0, 1.0), (0.0, 3.0), (0.0, 10.0), (0.0, 30.0)]:
xx = rng.uniform(lo, hi, 200)
yy = 2.0 * xx + rng.normal(0, 3.0, 200)
ff = fit(xx, yy)
print(" %s %12.6f %14.6f %12.6f"
% (pw("%.0f ~ %.0f" % (lo, hi), 16), ff["b1"], np.sqrt(ff["s2"]), ff["r2"]))
print(" 기울기와 오차는 그대로인데 R^2 만 0.03 에서 0.97 로 움직입니다")
print(" R^2 은 모형의 성질이 아니라 자료가 어디까지 퍼졌는지의 성질입니다")
# --- 문제 4: 잔차를 보면 무엇이 보이는가 ---------------------------------
print(" 잔차는 모형이 못 담은 것입니다")
print(" 네 가지 자료에서 잔차의 성질을 수치로 잽니다. 각각 200 개입니다")
print(" %s %s %s %s %s"
% (pw("자료", 24), rw("이웃 잔차의 상관", 18), rw("작은쪽 대 큰쪽 분산비", 22),
rw("잔차 왜도", 12), rw("최대 레버리지", 14)))
def diag(x, y):
o = np.argsort(x)
xs, ys = x[o], y[o]
ff = fit(xs, ys)
e = ff["e"]
n = len(e)
ac = float(np.corrcoef(e[:-1], e[1:])[0, 1])
h1 = int(n // 2)
vr = float(e[h1:].var(ddof=1) / e[:h1].var(ddof=1))
sk = float(((e - e.mean()) ** 3).mean() / e.std() ** 3)
lev = 1.0 / n + (xs - xs.mean()) ** 2 / ff["sxx"]
return ac, vr, sk, float(lev.max())
NB = 200
xb = np.linspace(1, 20, NB)
sets = [("직선에 정규 잡음", xb, 1.5 * xb + rng.normal(0, 2.0, NB)),
("굽은 관계", xb, 0.2 * xb ** 2 + rng.normal(0, 2.0, NB)),
("퍼짐이 커짐", xb, 1.5 * xb + rng.normal(0, 1.0, NB) * xb / 5.0),
("한 점이 멀리", np.append(xb[:NB - 1], 90.0),
np.append(1.5 * xb[:NB - 1] + rng.normal(0, 2.0, NB - 1), 40.0))]
for nm, xx, yy in sets:
ac, vr, sk, lv = diag(xx, yy)
print(" %s %18.4f %22.4f %12.4f %14.4f" % (pw(nm, 24), ac, vr, sk, lv))
print(" 첫 줄이 기준입니다. 상관 0.1084 는 잡음 크기 1/sqrt(200) = 0.0707 의 1.5 배쯤입니다")
print(" 분산비는 1.3342 이고 레버리지는 0.0199 로 둘 다 기준값 근처입니다")
print(" 둘째 줄은 이웃 잔차의 상관이 큽니다. 굽은 것을 직선으로 폈기 때문입니다")
print(" 셋째 줄은 분산비가 큽니다. 188강의 이분산입니다")
print(" 넷째 줄은 레버리지가 큽니다. 점 하나가 선을 끌고 있습니다")
print(" 레버리지와 영향력은 다릅니다")
xl = np.append(np.linspace(1, 10, 20), 30.0)
base_y = 2.0 * xl[:20] + rng.normal(0, 1.0, 20)
print(" x 가 30 인 점 하나를 두고 그 점의 y 만 바꿔 봅니다")
print(" %s %s %s %s %s" % (pw("그 점의 y", 12), rw("레버리지", 12),
rw("기울기", 12), rw("잔차", 12), rw("쿡 거리", 12)))
for yv in [60.0, 45.0, 30.0, 0.0]:
yy = np.append(base_y, yv)
ff = fit(xl, yy)
n = len(xl)
lev = 1.0 / n + (xl - xl.mean()) ** 2 / ff["sxx"]
h = lev[-1]
e = ff["e"][-1]
cook = e ** 2 * h / (2.0 * ff["s2"] * (1 - h) ** 2)
print(" %s %12.4f %12.6f %12.4f %12.4f"
% (pw("%.0f" % yv, 12), h, ff["b1"], e, cook))
print(" 레버리지는 y 와 무관하게 같습니다. x 가 멀다는 사실만 담습니다")
print(" 실제로 선을 흔드는 정도는 쿡 거리가 잽니다. 레버리지와 잔차를 함께 씁니다")
# --- 문제 5: 예측과 외삽 -------------------------------------------------
print(" 예측에는 두 가지 구간이 있습니다")
print(" 평균을 맞히는 것과 새 관측 하나를 맞히는 것이 다릅니다")
xs = np.array([2.0, 4.5, 8.0, 12.0])
print(" %s %s %s %s %s" % (pw("x", 8), rw("예측값", 12), rw("평균의 구간", 24),
rw("관측의 구간", 26), rw("폭의 비", 10)))
for xv in xs:
yh = f1["b0"] + f1["b1"] * xv
core = 1.0 / f1["n"] + (xv - x1.mean()) ** 2 / f1["sxx"]
sm = np.sqrt(f1["s2"] * core)
sp2 = np.sqrt(f1["s2"] * (1.0 + core))
print(" %s %12.4f %s %s %10.4f"
% (pw("%.1f" % xv, 8), yh,
rw("[%.3f, %.3f]" % (yh - tc * sm, yh + tc * sm), 24),
rw("[%.3f, %.3f]" % (yh - tc * sp2, yh + tc * sp2), 26),
float(sp2 / sm)))
print(" 관측의 구간이 훨씬 넓습니다. 오차분산이 한 번 더 들어가기 때문입니다")
print(" x 가 평균에서 멀어질수록 둘 다 넓어지는데 평균의 구간이 더 빨리 넓어집니다")
print(" 자료 밖으로 나가면 계산은 되는데 근거가 없습니다")
print(" %s %s %s %s" % (pw("x", 10), rw("예측값", 12), rw("평균 구간의 폭", 18),
rw("자료 범위 안인가", 20)))
for xv in [1.0, 4.5, 8.0, 20.0, 100.0]:
yh = f1["b0"] + f1["b1"] * xv
core = 1.0 / f1["n"] + (xv - x1.mean()) ** 2 / f1["sxx"]
w = 2.0 * tc * np.sqrt(f1["s2"] * core)
print(" %s %12.4f %18.4f %s"
% (pw("%.1f" % xv, 10), yh, w,
rw("예" if 1.0 <= xv <= 8.0 else "아니오", 20)))
print(" x 가 100 이면 구간의 폭이 x 가 평균일 때의 41 배입니다")
print(" 그런데 그 폭도 직선이 계속 맞다는 가정 아래의 값입니다")
print(" 가정이 틀리면 구간이 아무것도 보장하지 않습니다. 이것이 외삽의 위험입니다")
print(" 단순회귀가 답하지 않는 것을 정리합니다")
print(" %s %s" % (pw("물음", 30), rw("이 강의가 답하는가", 22)))
for a, b in [("x 와 y 가 함께 가는가", "답합니다"),
("얼마나 함께 가는가", "기울기가 답합니다"),
("얼마나 정확한가", "구간이 답합니다"),
("다른 변수 때문은 아닌가", "185강에서"),
("x 를 바꾸면 y 가 바뀌는가", "191강에서"),
("직선이 맞는 모양인가", "잔차로 의심만 합니다")]:
print(" %s %s" % (pw(a, 30), rw(b, 22)))
print(" 넷째 줄이 다음 강의입니다. 변수를 하나 더 넣으면 계수의 뜻이 바뀝니다")
# 두 변수 사이에 선을 하나 긋습니다
# x 1 2 3 4 5 6 7 8
# y 2.1 3.9 6.2 7.8 10.3 11.9 14.1 16.2
# 선을 고르는 기준이 필요합니다. 잔차 제곱합을 가장 작게 만듭니다
# 기울기 = Sxy / Sxx 이고 절편 = y평균 - 기울기 x x평균 입니다
# 무엇 값
# x 평균 4.500000
# y 평균 9.062500
# Sxx 42.000000
# Sxy 84.650000
# 기울기 2.015476
# 절편 -0.007143
# 이 선이 정말 최소인지 확인합니다
# 기울기를 조금씩 흔들어 잔차 제곱합을 봅니다
# 기울기 잔차 제곱합 최소 대비
# 1.915476 0.628690 0.420000
# 1.965476 0.313690 0.105000
# 2.015476 0.208690 0.000000
# 2.065476 0.313690 0.105000
# 2.115476 0.628690 0.420000
# 가운데가 가장 작습니다. 양쪽으로 갈수록 커집니다
# 제곱합이 기울기의 이차함수라 최소가 하나뿐입니다
# 잔차에는 두 가지 성질이 자동으로 생깁니다
# 무엇 값
# 잔차의 합 -0.0000000000
# 잔차와 x 의 곱의 합 -0.0000000000
# 둘 다 0 입니다. 최소가 되는 조건에서 바로 나옵니다
# 그래서 잔차는 x 와 상관이 0 이고 늘 그렇습니다. 검사할 값이 아닙니다
# 기울기의 표준오차를 구합니다
# se(b1) = sqrt(오차분산 / Sxx) 입니다
# 무엇 값
# 잔차 제곱합 0.208690
# 자유도 6.000000
# 오차분산 추정 0.034782
# Sxx 42.000000
# 기울기의 표준오차 0.028777
# t = 70.0369 이고 자유도 6 에서 p 값은 0.0000000006 입니다
# 95 퍼센트 구간은 [1.945061, 2.085892] 입니다
# 무엇이 표준오차를 줄이는지 봅니다
# x 를 격자로 고정하고 잡음만 2000 번 다시 뽑아 평균을 냅니다
# 무엇을 바꾸는가 n x 의 폭 오차 sd 이론 se 모의 평균 se
# 기준 20 1.00 1.00 0.736788 0.729459
# n 을 네 배로 80 1.00 1.00 0.382487 0.381108
# x 를 두 배 퍼뜨림 20 2.00 1.00 0.368394 0.364335
# 오차를 절반으로 20 1.00 0.50 0.368394 0.362990
# 셋 다 표준오차를 줄입니다. 이론값과 모의 평균이 잘 맞습니다
# x 를 넓게 퍼뜨리는 것이 설계의 자리입니다
# 178강 문제 3 에서 짝짓기로 분산을 줄인 것과 같은 발상입니다
# 두 집단 비교가 회귀의 특수한 경우입니다
# 집단을 0 과 1 로 적고 그 변수로 회귀합니다
# 무엇 회귀에서 178강 방식
# 기울기와 평균 차이 6.000000 6.000000
# t 통계량 6.000000 6.000000
# 절편과 A 의 평균 23.000000 23.000000
# 완전히 같은 값입니다. 178강은 회귀의 한 경우였습니다
# 제곱합을 나누면 180강의 구조가 그대로 나옵니다
# 무엇의 제곱합 값 자유도
# 회귀가 설명한 것 170.610060 1
# 남은 것 0.208690 6
# 전체 170.818750 7
# R^2 = 설명한 것 / 전체 = 0.998778 입니다
# 상관계수의 제곱과 같은지 봅니다. 상관은 0.999389 이고 제곱은 0.998778 입니다
# R^2 이 크다고 좋은 모형은 아닙니다
# 자료 R^2 기울기 무엇이 문제인가
# 직선에 잡음 0.955326 1.957175 없습니다
# 곡선인데 직선을 얹음 0.951324 10.941353 굽어 있습니다
# 점 하나가 끌고 감 0.821826 1.426544 한 점이 정합니다
# 잡음이 커짐 0.384991 1.978480 흩어짐이 다릅니다
# 둘째 줄은 R^2 이 0.95 인데 직선이 틀렸습니다
# 셋째 줄에서 마지막 점 하나를 빼 봅니다
# 무엇 R^2 기울기
# 40 개 전부 0.821826 1.426544
# 한 점을 뺌 0.030867 0.058617
# R^2 이 0.83 에서 거의 0 으로 내려갑니다. 관계 전체가 그 점 하나였습니다
# 166강 문제 1 의 앤스컴 자료와 같은 이야기입니다. 수치만으로는 못 가립니다
# R^2 은 x 의 퍼짐에도 끌려다닙니다
# 같은 관계와 같은 오차에서 x 의 범위만 바꿉니다
# x 의 범위 기울기 오차 sd 추정 R^2
# 0 ~ 1 1.746877 2.790948 0.032865
# 0 ~ 3 2.094402 3.066492 0.260233
# 0 ~ 10 2.071713 3.065469 0.794707
# 0 ~ 30 1.995964 2.992733 0.969608
# 기울기와 오차는 그대로인데 R^2 만 0.03 에서 0.97 로 움직입니다
# R^2 은 모형의 성질이 아니라 자료가 어디까지 퍼졌는지의 성질입니다
# 잔차는 모형이 못 담은 것입니다
# 네 가지 자료에서 잔차의 성질을 수치로 잽니다. 각각 200 개입니다
# 자료 이웃 잔차의 상관 작은쪽 대 큰쪽 분산비 잔차 왜도 최대 레버리지
# 직선에 정규 잡음 0.1084 1.3342 0.3083 0.0199
# 굽은 관계 0.8672 0.9850 0.5309 0.0199
# 퍼짐이 커짐 -0.0538 7.1682 -0.0303 0.0199
# 한 점이 멀리 0.4220 4.5277 -3.4971 0.5150
# 첫 줄이 기준입니다. 상관 0.1084 는 잡음 크기 1/sqrt(200) = 0.0707 의 1.5 배쯤입니다
# 분산비는 1.3342 이고 레버리지는 0.0199 로 둘 다 기준값 근처입니다
# 둘째 줄은 이웃 잔차의 상관이 큽니다. 굽은 것을 직선으로 폈기 때문입니다
# 셋째 줄은 분산비가 큽니다. 188강의 이분산입니다
# 넷째 줄은 레버리지가 큽니다. 점 하나가 선을 끌고 있습니다
# 레버리지와 영향력은 다릅니다
# x 가 30 인 점 하나를 두고 그 점의 y 만 바꿔 봅니다
# 그 점의 y 레버리지 기울기 잔차 쿡 거리
# 60 0.8029 1.980799 0.3740 1.6820
# 45 0.8029 1.495279 -2.5829 26.4772
# 30 0.8029 1.009760 -5.5398 35.1654
# 0 0.8029 0.038721 -11.4537 37.8050
# 레버리지는 y 와 무관하게 같습니다. x 가 멀다는 사실만 담습니다
# 실제로 선을 흔드는 정도는 쿡 거리가 잽니다. 레버리지와 잔차를 함께 씁니다
# 예측에는 두 가지 구간이 있습니다
# 평균을 맞히는 것과 새 관측 하나를 맞히는 것이 다릅니다
# x 예측값 평균의 구간 관측의 구간 폭의 비
# 2.0 4.0238 [3.785, 4.263] [3.509, 4.539] 2.1569
# 4.5 9.0625 [8.901, 9.224] [8.578, 9.547] 3.0000
# 8.0 16.1167 [15.822, 16.411] [15.574, 16.660] 1.8439
# 12.0 24.1786 [23.626, 24.731] [23.462, 24.895] 1.2973
# 관측의 구간이 훨씬 넓습니다. 오차분산이 한 번 더 들어가기 때문입니다
# x 가 평균에서 멀어질수록 둘 다 넓어지는데 평균의 구간이 더 빨리 넓어집니다
# 자료 밖으로 나가면 계산은 되는데 근거가 없습니다
# x 예측값 평균 구간의 폭 자료 범위 안인가
# 1.0 2.0083 0.5891 예
# 4.5 9.0625 0.3227 예
# 8.0 16.1167 0.5891 예
# 20.0 40.3024 2.2066 아니오
# 100.0 201.5405 13.4533 아니오
# x 가 100 이면 구간의 폭이 x 가 평균일 때의 41 배입니다
# 그런데 그 폭도 직선이 계속 맞다는 가정 아래의 값입니다
# 가정이 틀리면 구간이 아무것도 보장하지 않습니다. 이것이 외삽의 위험입니다
# 단순회귀가 답하지 않는 것을 정리합니다
# 물음 이 강의가 답하는가
# x 와 y 가 함께 가는가 답합니다
# 얼마나 함께 가는가 기울기가 답합니다
# 얼마나 정확한가 구간이 답합니다
# 다른 변수 때문은 아닌가 185강에서
# x 를 바꾸면 y 가 바뀌는가 191강에서
# 직선이 맞는 모양인가 잔차로 의심만 합니다
# 넷째 줄이 다음 강의입니다. 변수를 하나 더 넣으면 계수의 뜻이 바뀝니다