R 에서 단순회귀분석 결과 보는 법

R 에서 단순회귀분석 결과 보는 법

How to interpret simple regression summary in r

실습

회귀분석하는 법

head(faithful)

R에서 내장데이터 faithful을 불러와 head() 함수를 통해 확인해보자.

2.png 데이터만 봐서는 두 변수 사이에 선형관계가 있는지 확인하기 어려우므로 그림을 그려 확인해보자.

win.graph(6,3)
par(mfrow=c(1,2))
plot(faithful, main ="faithful",asp=T)
plot(faithful, main ="faithful")
points(head(faithful),col='red',pch=19)

12.png 왼쪽은 가로세로의 비율이 일정하도록 맞춰놓은 것인데, 정확한 그래프지만 보기가 어렵다. 오른쪽은 보기 편하도록 비율을 조정한 그래프로, 그 중에서 빨간 점들은 head() 함수로 확인한 처음 6번째까지의 데이터다.

점이 찍힌 양상을 보면 두 변수가 선형관계를 가진다고 짐작할 수 있으므로 단순회귀분석을 통해 확인해보도록 하자. 회귀분석을 위해서는 lm() 함수에 선형모형을 입력해야하는데, 예제의 경우 eruptionswaiting을 분석하므로 아래와 같이 입력한다.

out1<-lm(waiting~eruptions,data=faithful); summary(out1)

결과해석

summary() 함수를 사용하면 회귀분석 결과에 대한 요약이 출력된다.

3.png

결과에서 사각형으로 강조되지 않은 부분은 상대적으로 중요하지 않고, 특히 단순회귀분석에선 더더욱 신경쓸 필요가 없다.

  • (1) 잔차Residuals: 몰라도 된다. 잔차분석을 위해 회귀분석의 가정을 만족하는지 확인하기 위해 필요하지만, 단순회귀분석에선 신경써야할만큼 중요치 않다.
  • (2) 추정치Estimate: 이것이 바로 회귀계수로, (Intercept)는 회귀직선의 $y$ 절편, eruptions는 기울기를 나타낸다. 수식으로 나타내면 $$ \text{(waiting)} = 33.4744 + 10.7296 \cdot \text{(eruptions)} + \varepsilon $$
  • (3) 표준오차Std. Error: 몰라도 된다. 추정치의 표준오차로써, 이를 사용해서 회귀계수의 신뢰구간을 구할 수 있다.
  • (4) t value: 몰라도 된다. 추정치를 표준오차로 나눈 값으로써, 자유도 $n-2$ 의 t분포를 따르는 검정통계량이 된다. 이를 통해 회귀계수가 통계적으로 유의한지 가설검정을 할 수 있다.
  • (5) p값pr(>|t|): 이게 작다는 것은 회귀계수가 유의하다는 뜻이고, 상관관계가 있다는 것을 보이고 싶다면 값이 작을수록 좋다. 이 값이 얼마나 작은지에 따라 바로 아래에 있는 Signif. codes대로 점이 찍히게 된다. 보통 유의수준은 5%로 잡으므로, 점 하나만 찍혀도 상관관계는 있다고 봐도 무방하다. 만약 이 값이 커서 회귀관계가 없는 것으로 밝혀진다면 회귀계수가 어떻게 구해지든 통계적으로는 의미가 없다. 이 p값은 t분포에서 나온 것이므로 pr(>|t|) 라는 표현이 적절함을 알 수 있다.
  • (6) 설명력Multiple R-squared: 이 분석이 데이터를 얼마나 잘 설명하는가를 나타내는 척도로써, 높을수록 좋다. 이 경우 전체 데이터의 81%를 설명하고 있다고 받아들여도 무방하다.

시각화

그러면 이제 회귀직선을 직접 그어서 회귀분석이 정말 잘 되었는지 눈으로 확인해보도록 하자.

win.graph(6,3)
par(mfrow=c(1,2))
plot(faithful, main ="faithful",asp=T)
abline(out1,col='#47C83E',lwd=2)
plot(faithful, main ="faithful")
abline(out1,col='#47C83E',lwd=2)

34.png

위 그래프에서 녹색이 바로 회귀직선으로써, 데이터들을 적절하게 관통함을 확인할 수 있다.

코드

아래는 전체 예제코드다.

head(faithful)
 
win.graph(6,3)
par(mfrow=c(1,2))
plot(faithful, main ="faithful",asp=T)
plot(faithful, main ="faithful")
points(head(faithful),col='red',pch=19)
 
out1<-lm(waiting~eruptions,data=faithful); summary(out1)
 
win.graph(6,3)
par(mfrow=c(1,2))
plot(faithful, main ="faithful",asp=T)
abline(out1,col='#47C83E',lwd=2)
plot(faithful, main ="faithful")
abline(out1,col='#47C83E',lwd=2)

같이보기

댓글