R 회귀분석 (R regression test) Start.
BioinformaticsAndMe
# R을 이용한 단순 선형 회귀분석(simple linear regression test)을 시작해보자.
(회귀분석에 대한 개념정리는 아래의 'Statistic' 카테고리에 있으니, 먼저 선행하고 오면 좋을 듯하다..!)
http://bioinformaticsandme.tistory.com/70?category=808983
# 선형회귀모델 (Linear regression model) 제작
> age=18:29
> age
[1] 18 19 20 21 22 23 24 25 26 27 28 29
> height= 70:81
[1] 70 71 72 73 74 75 76 77 78 79 80 81
# 나이에 따른 키를 plot() 함수를 이용하여, 나이에 따른 키의 scatterplot
> plot(x=age, y=height)
# 선형회귀모델의 최적선 구하기
# 좋은 선형회귀 모델이란것은 예측값과 실제 값의 차이를 뜻하는 잔차(Residual error)가 작은 모델
# R에서 회귀분석은 선형모형(linear model)을 쓴다.
# lm(종속변수(결과) ~ 독립변수(원인),데이터)
> res=lm(height~age)
> abline(res)
> res
Call:
lm(formula = height ~ age)
Coefficients:
(Intercept) age
64.928 0.635
#lm() 함수로 나온 결과는 다음과 같이 해석
intercept (y 절편) : 64.928
age (독립변수의 기울기): 0.635
키 = 0.635 * 나이 + 64.928
height = 0.635*age + 64.928
# Galton 데이터를 예제로 회귀분석을 해보자.
> install.packages("UsingR")
> library(UsingR)
> data(galton) ; str(galton)
# galton 데이터는 928개의 부모의 키와 아이의 키에 대한 자료이다.
# 이 자료에 포함되어 있는 부모의 키는 아빠의 키와 1.08*엄마의 키의 평균이다.
# 이 자료들의 분포를 살펴보기 위해 화면을 둘로 나누고 히스토그램을 그려본다.
> par(mfrow=c(1,2))
> hist(galton$child, col="blue")
> hist(galton$parent, col="blue")
> par(mfrow=c(1,1))
# 부모의 키와 자녀의 키 사이의 수학적 관계를 나타내는 공식은 회귀분석을 통하여 구할 수 있다.
> out=lm(child~parent, data=galton)
> summary(out)
Call:
lm(formula = child ~ parent, data = galton)
Residuals:
Min 1Q Median 3Q Max
-7.8050 -1.3661 0.0487 1.6339 5.9264
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 23.94153 2.81088 8.517 <2e-16 ***
parent 0.64629 0.04114 15.711 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.239 on 926 degrees of freedom
Multiple R-squared: 0.2105, Adjusted R-squared: 0.2096
F-statistic: 246.8 on 1 and 926 DF, p-value: < 2.2e-16
결과의 마지막 세 줄을 살펴보자. Residual standard error(2.239인치) 라는 것은 이 모형을 사용하여, 부모키로부터 자녀키를 예측했을 때 평균 2.239인치의 오차가 생긴다는 뜻이다. Multiple R-squared가 0.210이라는 것은 이 모형은 자녀키 분산의 21.0%를 설명해준다는 뜻이다.
# 결과를 보면 y절편(Intercept)이 23.94이고, parent의 기울기는 0.65인 것으로 나타난다.
# 즉 y=0.65x+23.94이다.
# 이를 그래프로 그려보면 다음과 같다.
> plot(child~parent,data=galton)
> abline(out,col="red")
# 위 그림을 ggplot2를 사용해 다시 그려보자.
> library(ggplot2)
> ggplot(data=galton, aes(x=parent,y=child)) +
geom_count() +
geom_smooth(method="lm")
R 회귀분석 (R regression test) End.
BioinformaticsAndMe