티스토리 뷰
[R] 선형회귀 / cor (), lm(), abline(), predict(), summary() / 상관계수
Happyoon ~ 2022. 1. 26. 00:04R로 단순선형회귀를 하는 방법을 알아보자.
R에서 선형회귀는 lm 함수를 사용한다.
선형회귀를 시도하기 전에 두 변수 간의 인과관계 여부를 우선 파악해야한다.
다음의 예시로 선형회귀를 알아보자.
부모의 키와 자녀의 키의 상관관계를 알아보고 선형회귀 분석을 하려 한다.
다음은 부모와 자녀의 키 데이터이다.
x<-c(160, 170, 155, 181, 175) #부모의 키
y<-c(165, 173, 160, 175, 170) #자녀의 키
1. 상관관계 분석 (cor)
x와 y의 상관관계를 알아보자.
우선, 상관계수란 변수들 간의 통계적 관계 표현을 위해 특정한 상관관계의 정도를 수치적으로 나타낸 계수로, 공분산을 표준화한 것이다.
값은 -1 ~ 1 사이이고 -1 혹은 +1에 가까울수록 상관관계가 높다고 판단할 수 있다.
상관계수를 구하는 방법에는 여러가지가 있는데 그 중 하나가 cor()을 이용하는 것이다.
cor(x,y)
#0.9305463 =>양의 상관관계
출력값이 0.9305463으로 1에 매우 가깝고, 양수이므로 x와 y가 양의 상관관계를 띔을 알 수 있다.
따라서, 우상향 직선이 그려짐을 추측할 수 있다.
2. 데이터 시각화하기
주어진 데이터를 시각화해보자.
plot(x,y)
3. 선형회귀 모델 만들기 (lm)
R에서 선형회귀는 lm()을 사용한다.
model<-lm(formula = y~x)
model
#Coefficients:
#(Intercept) x
# 78.953 0.533
모델의 결과로, y = wx + b에서 w는 0.533, b는 78.953임을 확인할 수 있다.
4. abline()
위의 그래프에 구한 모델을 선으로 표시해보자.
abline(model,col='red')
양의 상관관계를 가지므로 우상향하는 직선이 그어짐을 확인할 수 있다.
5. predict()
그러면, 위의 부모의 키에 따라 해당 모델을 활용하여 예측한 자녀의 키를 알아보자.
predict()를 사용한다.
predict(model)
# 1 2 3 4 5
#164.2296 169.5594 161.5646 175.4222 172.2243
실제 값은 165, 173,160, 175, 170이고 예측 결과는 위와 같다.
6. 모델 평가 (summary)
위의 모델을 평가해보자.
summary()를 이용한다.
summary(model)
#Residuals:
# 1 2 3 4 5
# 0.7704 3.4406 -1.5646 -0.4222 -2.2243
#Coefficients:
# Estimate Std. Error t value Pr(>|t|)
#(Intercept) 78.9525 20.3997 3.870 0.0305 *
#x 0.5330 0.1211 4.402 0.0217 *
#---
#Signif. codes:
#0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#Residual standard error: 2.582 on 3 degrees of freedom
#Multiple R-squared: 0.8659, Adjusted R-squared: 0.8212
#F-statistic: 19.37 on 1 and 3 DF, p-value: 0.02174
p-value부터 살펴보자.
p-value는 유의 확률로, 관찰된 데이터가 가설과 양립하는 정도를 0과 1 사이의 수치로 표현한 값이다.
즉, 가설이 옳다고 가정할 때 얻은 결과보다 극단적인 결과가 실제로 관측될 확률이다.
95%의 신뢰구간에서, p-value가 0.05보다 작으면 유의한 모델이라 판단한다.
현 모델의 p-value 값은 0.02174로 0.05보다 작으므로 유의한 모델임을 확인할 수 있다.
R-squared는 결정계수로, 상관계수를 제곱한 값인데 독립변수가 종속변수의 분산을 얼마나 잘 설명하는지 즉, 설명력을 뜻한다.
현 모델의 결정계수는 0.8212로 독립변수, 즉 부모의 키가 자녀의 키를 82.12% 설명하고 있다고 말할 수 있다.
Adjusted R-squared는 독립변수가 2개 이상일 경우 사용한다. 현재는 독립변수가 1개이므로 multiple R-squared 값을 확인한다.
Pr(>|t|)는 t분포를 사용해 각 변수가 얼마나 유의한지 판단할 수 있는 p-value를 알려준다.
현 모델의 모든 변수의 Pr 값은 0.05보다 작으므로 귀무가설을 기각하고 각 계수가 0이 아님을 결론 내릴 수 있다.
0.05보다 작은 계수 옆에는 '*' 표시가 나타난다.
Residuals는 실제 데이터에서 관측된 잔차를 보여준다.
7. 모델을 이용하여 새로운 데이터 값 예측하기
이제 위의 모델을 이용해 새로운 부모의 키로 자녀의 키를 예측해보자.
예측은 predict()를 사용한다.
new_x = 190
predict(model,data.frame(x=c(190)))
# 1
#180.219
부모의 키가 190일 때 자녀의 키는 180.219로 예측될 수 있다.
'데이터 분석 > R' 카테고리의 다른 글
[R] mysql 연동하기 (0) | 2022.01.25 |
---|---|
[R] 데이터를 파악할 때 사용되는 함수들 / head(), tail(), View(), dim(), str(), summary() (0) | 2022.01.24 |
[R] 파생변수 만들기 / rename()으로 변수명 바꾸기 (0) | 2022.01.24 |
[R] 데이터 프레임 Data Frame / excel, csv 파일 읽고 쓰기 (0) | 2022.01.24 |
- Total
- Today
- Yesterday
- bootstrap
- 백준
- 정렬
- 장고
- 스프링
- baekjoon
- CSS
- Django
- brute force
- append
- 큐
- web
- 문자열
- jQuery
- 고득점 키트
- 덱
- html
- 자바
- jsp
- javascript
- 프로그래머스
- 단계별로풀어보기
- Oracle
- Java
- 자바스크립트
- R
- 브루트 포스
- Case When
- 파이썬
- python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |