생각 작업실 The atelier of thinking

103. R을 이용한 회귀분석 본문

통계학 이야기

103. R을 이용한 회귀분석

knowledge-seeker 2024. 8. 6. 17:35

Chapter 103. R을 이용한 회귀분석(Regression Analysis)

 

1. 자료 불러오기

 

◈ 예제 : 올림픽 100미터 우승 기록

Andrew Tatem 등이 2004년 9월 Nature에 발표한 논문으로, 1896~2004년까지의 남자와 여자의 육상 100m 우승 기록을 분석한 자료입니다. 그 자료에 2016년까지 자료를 추가하였습니다.

 

연도 우승기록 연도 우승기록 연도 우승기록
남자 여자 남자 여자 남자 여자
1896 12   1936 10.3 11.5 1988 9.92 10.54
1900 11   1948 10.3 11.9 1992 9.96 10.82
1904 11   1952 10.4 11.5 1996 9.84 10.94
1908 10.8   1956 10.5 11.5 2000 9.87 10.75
1916 10.8   1960 10.2 11.0 2004 9.85 10.93
1920 10.8   1964 10.0 11.4 2008 9.69 10.78
1924 10.6   1968 9.9 11.0 2012 9.63 10.75
1928 10.8 12.2 1976 10.14 11.07 2016 9.81 10.71
1932 10.3 11.9 1984 10.06 10.97      

 

100m.csv
0.00MB

 

olympic <- read.csv("100m.csv", header = TRUE, fileEncoding = "CP949",
                    encoding = "UTF-8")
head(olympic)

 

  year record gender
1 1896   12.0      M
2 1900   11.0      M
3 1904   11.0      M
4 1908   10.8      M
5 1912   10.8      M
6 1920   10.8      M

 


2. 산점도

 

남녀 구분없이 모든 자료에 대한 산점도입니다.

plot(record~year,data=Olympic,ylab="기록(초)",xlab="연도",
     main="올림픽 육상 100m 우승기록")

 


남녀를 구분하여 산점도를 그려보겠습니다.

male <- subset(olympic,gender=="M")
female <- subset(olympic,gender=="F")
with(male,plot(year,record,col="blue",ylim=c(9,13),pch=16,cex=1.2,
     xlab="연도",main="올림픽 육상 100m 우승기록"))
with(female,points(year,record,col="red",pch=16,cex=1.2))
legend(2000,13,legend=c("남자","여자"),col=c("blue","red"),
       pch=c(16,16),bty="n")

 


3. 선형회귀분석

 

선형회귀분석에는 lm( ) 함수를 사용합니다.

lm(formula, data)

formula: 분석할 모델을 지정하는데 사용됩니다. 
일반적으로 종속 변수와 독립 변수 간의 관계를 나타내는 공식으로 지정됩니다.
data: 분석에 사용할 데이터 프레임을 지정합니다.

 

(1) 선형회귀분석 - 남자

 

male <- subset(olympic,gender=="M")
lm(record~year,data=male)

 

Call:
lm(formula = record ~ year, data = male)

Coefficients:
(Intercept)         year  
    34.9884      -0.0126


남자 기록은 기울기는 -0.0126 이고, 절편은 34.9884 입니다. 남자의 기록은 년도에 따라 감소하는 선 그래프로 나타납니다.


회귀분석모형을 그래프로 나타내면,

 

male.lm<-lm(record~year,data=male)

plot(record~year,data=male,col="blue",ylim=c(9,12),pch=16,xlab="연도")
abline(male.lm,col='green',lwd=2)

(2) 선형회귀분석 - 여자

 

female <- subset(olympic,gender=="F")
lm(record~year,data=female)
Call:
lm(formula = record ~ year, data = female)

Coefficients:
(Intercept)         year  
   40.54323     -0.01488


여자기록은 기울기는 -0.01488 이고 절편은 40.54323 입니다. 여자 기록 역시 연도에 따라 감소하는 기울기를 보이고 있습니다.
이를 그래프로 표현하면 아래와 같습니다.

 

female.lm <- lm(record~year,data=female)

plot(record~year,data=female,col="red",ylim=c(10,13),pch=16,xlab="연도")
abline(female.lm,col='green',lwd=2)


위 남녀 우승기록를 합쳐서 나타내면,

 

male <- subset(olympic,gender=="M")
male.lm<-lm(record~year,data=male)
female <- subset(olympic,gender=="F")
female.lm <- lm(record~year,data=female)
with(male,plot(year,record,col="blue",ylim=c(9,13),pch=16,
      xlab="연도", main="올림픽 육상 100m 우승기록"))
with(female,points(year,record,col="red",pch=16))
abline(male.lm,col='green',lwd=2)
abline(female.lm,col='green',lwd=2)
legend(2000,13,legend=c("남자","여자"),col=c("blue","red"),
       pch=c(16,16),bty="n")