일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 유주
- 풍백
- R
- 단군
- post hoc test
- 통계
- 창평
- 한서
- categorical variable
- 고구려
- 히스토그램
- 후한서
- 우분투
- spss
- 태그를 입력해 주세요.
- Histogram
- 기자조선
- 낙랑군
- t test
- linear regression
- 지리지
- ANOVA
- 패수
- 신라
- 선형회귀분석
- 독사방여기요
- 한서지리지
- 기자
- repeated measures ANOVA
- 통계학
- Today
- Total
獨斷論
선형회귀분석 linear regression analysis (통계 R 초급 - 11) 본문
R 통계패키지에서 제공하는 선형회귀분석 명령어는 매우 다양한데 여기서는 가장 많이 사용하는 한 가지에 대해서만 알아보기로 하겠다.
우선 데이터를 읽어들이고 lm()을 이용하여 선형회귀분석을 실행하면 된다.
이때 formula를 입력하여야 하는데 보통 아래와 같다.
(Dependent Variables) ~ (Independent Variables)
그러면 R 패키지에 들어있는 cats라는 데이터를 이용하여 선형회귀분석을 수행해 보기로 하자.
> data(cats)
> lm(cats$Hwt ~ cats$Bwt)
Call:
lm(formula = cats$Hwt ~ cats$Bwt)
Coefficients:
(Intercept) cats$Bwt
-0.3567 4.0341
cats데이터에서 Hwt는 심장무게이고 Bwt는 몸무게이다.
즉 "(심장무게) = b + a*(몸무게)"와 같이 선형회귀를 실행한 것이다.
결과로부터 "(심장무게) = -0.3567 + 4.0341*(몸무개)"임을 알수 있다.
또한 선형회귀분석 결과를 변수에 저장할수도 있다.
> lm.out = lm(cats$Hwt ~ cats$Bwt)
> summary(lm.out)
Call:
lm(formula = cats$Hwt ~ cats$Bwt)
Residuals:
Min 1Q Median 3Q Max
-3.5694 -0.9634 -0.0921 1.0426 5.1238
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.3567 0.6923 -0.515 0.607
cats$Bwt 4.0341 0.2503 16.119 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.452 on 142 degrees of freedom
Multiple R-squared: 0.6466, Adjusted R-squared: 0.6441
F-statistic: 259.8 on 1 and 142 DF, p-value: < 2.2e-16
여러가지 결과가 나오는데 가장 중요한것은 R-sqaured와 F-statistics의 p-value이다.
R-squared가 0.6466이면 심리학에서는 어느정도 선형회귀분석의 예측값이 데이터를 잘 반영한다고 볼수있지만 공학쪽에서는 적어도 0.85는 넘어야 잘됐다고 본다. 즉, 이 값은 적용분야에 따라 다르므로 자신의 분야에서 R-squared의 값이 어느정도 클때 선형회귀가 잘됐다고 하는지 여러 논문을 읽어보고 알아야 한다.
p-value가 0.05보다 작으므로 위 선형회귀결과는 통계적으로 의미가 있다고 본다.
ANOVA table은 다음과 같이 구한다.
> anova(lm.out)
Analysis of Variance Table
Response: cats$Hwt
Df Sum Sq Mean Sq F value Pr(>F)
cats$Bwt 1 548.09 548.09 259.83 < 2.2e-16 ***
Residuals 142 299.53 2.11
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
회귀분석결과와 원래 데이터를 그래프 상에 나타내기 위해서는 아래와 같이 실행하면 된다.
> plot(cats$Hwt ~ cats$Bwt, main="Cats plot")
> abline(lm.out, col="red")
이밖에도 선형회귀분석을 진단하게 하는 여러가지 그래프도 그릴수 있다. 이것을 어떻게 이용하는지는 고급과정에 해당되므로 여기서 자세한 설명은 생략한다.
> par(mfrow=c(2,2))
> plot(lm.out)
첫번째 그림은 residual을 나타내는데 번호가 붙은것은 outlier를 나타낸다. 이 그래프에서 점들의 전체 형태가 가로로 평행하지 않고 삼각형이거나 고불고불하거나 하다면 선형회귀가 불가하다는 것을 나타낸다.
두번째 그림은 정규분포를 보이고 있다는 것을 나타낸다.
마지막 네번째 그림에서 144번째 데이터가 꾀 멀리 있으므로 이 데이터는 심각한 outlier임을 보이는데 이 데이터가 어떠한지 한번 알아보자.
> cats[144,]
Sex Bwt Hwt
144 M 3.9 20.5
> lm.out$fitted[144]
144
15.37618
> lm.out$residuals[144]
144
5.123818
144번째 고양이는 심장무게 3.9이고 몸무게 20.5이다. summary(cats)라고 R에서 입력해보면 가장 큰 고양이인것을 알수 있다. 그런데 선형회귀로 예측한 이 고양이의 몸무게는 15.4로 그 잔차값은 5.1로 매우 크다.
따라서 선형관계는 144번째 고양이의 몸무게보다 작은 고양이에 대해서만 적용가능하다고 볼수 있다.
그리고 이 144번째 고양이를 데이터에서 제외시키고 다시 선형회귀분석을 해야할 것이다.