# 회귀분석
회귀분석은 하나의 변수가 나머지 다른 변수들과의 선형관계를 갖는가의 여부를 분석하는 방법
하나의 종속변수(예측하고자 하는 값)와 독립변수 사이의 관계를 명시하는 것이 목적이다
ex) 집 값에 영향을 주는 요소
- 독립변수 : 종속변수에 영향을 주는 변수 (평수, 역세권, 학군, ....)
- 종속변수 : 독립변수의 영향을 받아 다르게 나타나는 변수 (집값)
# 최소 제곱 추정법
최적의 기울기 a와 절편 b를 결정하기 위해 최소 제곱으로 알려진 추정 기법을 사용한다.
실제값과 예측값 사이의 수직 직선이 오차(잔차)를 제곱해서 구한 총합을 알아야한다.
예제 : 어느 실험실에서 10,20,30,40시간 마다 물질의 방사능 수치를 측정한 자료가 있을 때,
35시간의 방사능 수치는 무엇인가?
x=c(10,20,30,40) # 시간
y=c(300,250,200,150) # 방사능 수치
x_mean=mean(x) # 25
y_mean=mean(y) # 225
a=cov(x,y)/var(x) # x,y 공분산 / x 분산
b =y_mean+a*x_mean
func_nuclear <- function( x_num ) {
x = c(10, 20, 30, 40)
y = c(300, 250, 200, 150)
a = cov(x,y) / var(x)
x_mean = mean(x)
y_mean = mean(y)
b = y_mean - a * x_mean
y_hat = b + a * x_num # y=b+ax
print ( y_hat )
}
func_nuclear(35) # 35 시간일 때
예제 : 탄닌 함유량과 애벌레의 성장 간의 실험표를 이용하여
탄닌 함유량이 9일 때 성장률이 어떻게 되는지 예측하기
- 이렇게 생긴 데이터이다.
reg<-read.table("regression.txt",header=T)
reg
func_nuclear <- function( x_num ) {
x<-reg[,2]
y<-reg[,1]
a = cov(x,y) / var(x)
x_mean = mean(x)
y_mean = mean(y)
b = y_mean - a * x_mean
y_hat = b + a * x_num # y = b + ax
print ( y_hat )
}
func_nuclear(9) #0.8055556
탄닌 함유량이 9라면, 성장률은 0.8로 계산하는 것이 최소 제곱 추정법이다.
# R 함수 lm을 이용해서 단순 회귀분석 실습
- 탄닌 함유량과 애벌레 성장 간의 관계에 대한 회귀식 도출
1. 데이터 로드
reg<-read.table("regression.txt",header=T)
reg
2. 데이터 시각화 (산포도 그래프)
attach(reg)
plot(growth~tannin, data=reg, pch=21, col='blue', bg='blue')
- plot(y~x, data=데이터프레임 이름)
음의 관계인 것을 확인
3. 회귀분석을 통해 회귀 계수인 기울기와 절편 구하기
model<-lm(growth~tannin,data=reg)
# lm -> 회귀 분석함수 ( 종속변수~독립변수 )
model
기울기 : -1.217
절편 : 11.756
y= -1.217x + 11.756
아까 직접 만든 함수에서, tannin이 9일때, 0.805를 예측했는데,
이 식의 x에 9를 대입해서 계산시켜보면, 0.803이 나온다.
소수점을 잘라서 계산의 결과에 약간의 차이가 있지만 동일한 식이라는 것을 알 수 있다.
4. 2번에서 시각화한 산포도 그래프에 회귀 직선을 겹쳐 그리기
plot(growth~tannin, data=reg, pch=21, col='blue', bg='blue')
model<-lm(growth~tannin,data=reg)
abline(model,col='red')
5. 그래프 제목 바꾸기
model$coefficients[2] # 기울기
model$coefficients[1] # 절편
title( paste( '성장률=', round(model$coefficients[2],2), 'x탄닌 + ', round(model$coefficients[1],2) ) )
'나 취준생 > R' 카테고리의 다른 글
R 신경망 (0) | 2021.02.05 |
---|---|
R 회귀분석 - 2 (0) | 2021.02.01 |
R 규칙 기반 분류 (OneR/Ripper) (0) | 2021.02.01 |
R 의사결정트리 (0) | 2021.01.30 |
R 나이브 베이즈 알고리즘 (0) | 2021.01.30 |