R 컴퓨팅
지음 : 장영재
목차
제1장 입문제2장 활용도구
제3장 데이터 입력과 출력
제4장 데이터 구조
제5장 프로그래밍 구조
제6장 함수의 생성
제7장 데이터 탐색
제8장 그래프
제9장 시뮬레이션
제10장 통계모형
제1장 입문
홈페이지 : http://www.r-project.org
- 수학함수 : abs(x), ceiling(x), choose(x, y), sin(x), cos(x), tan(x), exp(x), factorial(x), floor(x), log(x), log10(x), log2(x), pi, round(x, digits=n), signif(x, digits=n), trunc(x), min/max()
- 통계함수: IQR(x), max(x), mean(x), median(x), min(x), quantile(x, q), range(x), diff(range(x)), sd(x), sum(x), var(x)
- 명령어 : ls(), rm(x), rm(list=ls()), is.na(), setwd(), getwd(), source(“file name”, echo=TRUE), save.image(file=“file name”), load(file=“file name”), data(), library(), help(), detach(), example(). help.search(), RSiteSearch()
- 벡터 : 숫자, 문자, 논리형 벡터 가능 (한 벡터에 여러 형태가 섞일 수는 없다, 합치는 문자형으로 됨) – c(), mode() 함수
- 패키지 : install.packages("xlsx"), library(xlsx), data(), detach(package="Name")
ex)
mean(1, 2, 3, 4, 5) // 결과는 1, 벡터를 입력하지 않았으므로 1의 평균을 구하게 됨.
mean(c(1, 2, 3, 4, 5)) // 결과는 3
º R은 Console 창에 명령문을 직접 입력하거나, 스크립틀 이용하여 명령문을 실행시킬 수 있다.
º R에서 벡터는 'c()' 함수를 통해 만들 수 있으며, 기본 수학함수와 통계함수를 사용할 수 있다.
º R에서 작업공간을 설정하여 작업기록 및 결과를 저장할 수 있다.
º R에서 base 패키지와 recommended 패키지는 자동 설치된다. 그 외 패키지는 사용자가 직접 설치하고 활성화 시켜야 한다.
º R에서는 도움말을 찾는 다양한 방법이 있다.
제2장 활용도구
- R Studio : 효과적인 IDE(통합개발환경) http://www.rstudio.com
- R Commander : R GUI (패키지 설치하고 실행하여 사용) SPSS의 메뉴 방식 install.packages(“Rcmdr”), library(Rcmdr)
º R은 여러 가지 장점에도 불구하고 사용자 편의성 면에서는 다소 부족한 점이 있다.이러한 이유로 많은 개발자들이 IDE 방식이나, 메뉴방식 활용 등을 이용하여 R의 활용을 더욱 쉽게 할 수 있도록 돕는 여러 가지 도구들을 개발하여 왔다.
º IDE란 기본적으로 편집기, 컴파일러, 프로그램 디버거, 그래픽 사용자 인터페이스 설치기 등으로 구성된 애플리케이션 패키지의 프로그래밍 환경을 의미한다.
º R 스튜디오는 R 프로그램을 구동하기 위한 효과적인 IDE (integrated development environment; 통합개발환경) 소프트웨어이다.
º R commander는 R을 GUI(Graphic User Interface; 그래픽 사용 환경)에서 활용할 수 있는 패키지이다.이 패키지를 설치하고 실행하면 마치 SPSS의 메뉴 방식(menu driven)과 유사한 형태로 R을 활용할 수 있다.
º R Commander는 여러 가지 형태의 자료를 불러들일 수 있다. 가장 일반적이라할 수 있는 텍스트 파일은 물론이고 Minitab, SPSS, 또는 Stata 등 다양한 통계 패키지나 Excel, Access, 또는 dBase 등 여러 가지 소프트웨어로부터 데이터셋을 불러들일 수 있다.
제3장 데이터 입력과 출력
키보드 입력 : c(), scan(), edit()
외부파일 입력 :
- read.table(file=“file name”, header=TRUE, na.strings=“miss”, sep=“,”)
- read.csv(file)
- scan(file=“file name”, what=list(Current=0, Innov=0, Loc=“”), skip=1, sep=“”, na.strings=“miss”) : header 옵션이 없다
- read.xlsx() … install.packages(“xlsx”), library(xlsx)
데이터 출력 :
- sink(“file name”) ~ sink() : 결과를 외부 파일로 저장 시작 ~ 끝
- cat() 줄 단위로 결과 저장
- write.table( iris, “iris5.txt”, row.names=FALSE, quote=FALSE, sep=“,”)
- write.csv(), write.xlsx()
º 키보드를 이용하여 데이터를 입력하는 방식은 c() 함수, scan() 함수, edit() 함수 등이 있다.
º 외부파일을 읽어서 R로 불러들이는 방식으로는 read.table(), read.csv(), scan(), read.xlsx() 함수 등이 있다.
º 웹사이트에 위치해 있는 외부파일의 데이터도 read.table() 명령문에 의해서 R에서 불러 읽을 수 있다.
º sink() 함수는 명령문 결과를 R에서 출력되는 형태대로 파일로 저장하는 명령문이고, cat() 함수는 명령문 결과를 파일에 저장하되 줄 단위로 저장하는 명령문이다.
º R에서 생성된 데이터프레임을 외부 파일로 저장하는 방식은 write.table(), write.csv(), write.xlsx() 등의 함수가 있다.
제4장 데이터 구조
R에서 다루는 데이터의 기본적인 형태는 벡터, 행렬, 배열과 리스트로 나눌 수 있다.
1. 벡터 : 한 개 이상의 원소로 구성된 자료 구조로, 가장 기본이 되는 자료 객체를 의미한다. 하나의 벡터의 원소는 한 가지 형태만 가능 (수치/문자/논리)
- 생성: c(), scan(), seq(), rep()
- 편집: [ ], replace(), append(), sort(), rev(), rank(), order(), :,
- 초기화 : vector(), logical(), numeric(), complex(), character()
2. 행렬 : 동일한 형태로 구성된 2차원의 데이터 구조 (벡터의 확장)
- 생성 : matrix(), as.matrix(), is.matrix()
- 속성 : length(), mode(), dim(), dimnames()
- 생성 : matrix(), cbind(), rbind(), dim()
- 연산 : [ ], apply(), sweep()
- 연산자 : t(), %*%, crossprod(), outer(), svd(), qr(), solve(), eigen(), chol()
3. 배열 : 행렬을 2차원 이상으로 확장시킨 객체를 의미한다.
- 생성 : array(), dim()
- 속성 : length(), mode(), dim, dimnames()
4. 리스트 : 서로 다른 형태의 데이터로 구성된 객체를 의미한다. 행렬과 배열 등이 동일한 형태의 원소로 이루어진 객체인 반면 리스트를 구성하는 성분은 서로 다른 형태의 원소를 가질 수 있고, 길이도 다를 수 있다.
- 추출 : [[ ]], $연산자, [ ]
- 속성 : length(), mode(), names()
5. 데이터 프레임 : 행렬과 비슷한 형태로 되어 있으나, 형렬을 차원으로 표시되며 같은 형태의 객체를 가지는 반면, 데이터 프레임은 각 열들이 서로 다른 형태의 객체를 가질 수 있다.
- 특징 : 형태(mode)가 일반화된 행렬, 하나의 객체에 여러 종류의 자료가 들어갈 수 있음,
각 열은 각각 변수와 대응하고 분석이나 모형 설정에 적합한 자료 객체이다.
- 생성 : read.table(), data.frame(), as.data.frame()
- 결합 : cbind(), rbind(), merge()
º 벡터를 생성하는 가장 간단한 방법으로는 scan() 함수를 이용하여 직접 자료를 입력하는 방법이 있다.
º 조건에 따른 벡터를 생성하는 방법으로는 seq() 함수를 이용하여 수열을 지정하거나 rep() 함수를 이용하여 자료 값들을 반복하여 생성하는 방법 등이 있다.
º 벡터에서 자료를 삽입하고 삭제와 관련된 다양한 함수들로 replace(), append(), order(), sort() 함수 등이 있다.
º 행렬을 생성하기 위해서는 matrix() 함수를 사용하며 행렬과 관련된 여러 함수와 성분의 추출과 삭제 관한 관련 함수 ncol(), nrow() 등이 있다.
º 배열을 생성하기 위한 함수로 array() 함수와 dim() 함수가 있다.
º 같은 크기의 배열간의 사칙연산 및 같은 위치의 원소간의 연산과 숫자와 배열간의 산술 연산도 가능하다.
º 리스트(List)는 다른 형태(mode)의 자료를 포함하는 하나의 객체이며, 리스트를 생성하는 함수는 list()이다.
º read.table() 함수를 이용하면 외부 텍스트 파일을 불러들여 데이터 프레임을 생성할 수 있다.
º data.frame() 함수를 이용하면 여러 종류의 자료객체들을 서로 결합시키면서 데이터 프레임을 생성할 수 있다.
º as.data.frame() 함수를 사용하면 다른 형태의 자료객체를 데이터 프레임의 형태로 변환할 수 있다.
제5장 프로그래밍 구조
- 산술연산자 : +, -, *, /, ^, %/%, %*%,
- 비교연산자 : ==, !=, <=, < , >, >=,
- 논리연산자 : &&, ||, |,
- 집합연산자 : union(), intersect(), setdiff(), setequal(), %in%, choose(n, k)
- 기본 함수: pi, log(x), log10(x), exp(x), sqrt(x),
- 삼각 함수 : sin(x), cos(x), tan(x), asin(x), acos(x), atan(x),
- 범위 함수 : min(x), max(x), range(x), pmin(x, y), pmax(x, y)
- 통계 함수: mean(x), sd(x), var(x), median(x), quantile(x, p), cor(x, y)
- 조건문 : if (조건) 실행문 else 실행문, ifelse, switch
- 반복문 : for(변수 in 반복횟수), while(조건) 실행문, repeat 실행문
- 무조건 분기문 : break, next
º R은 프로그래밍 언어라고 할 수 있다. 다른 언어들과 마찬가지로 기본적인 연산자 및 함수의 기초 위에 반복문, 조건문 등을 이용하여 다양한 프로그래밍이 가능하다.
º R에서는 벡터나 행렬, 배열 뿐만 아니라 리스트와 데이터 프레임 등의 각 원소에 대해서도 적절한 연산자를 활용하여 연산을 수행할 수 있다.
º 비교연산자는 대상이 되는 두 객체를 비교하여 그에 알맞은 값을 출력하는 연산자이다. 비교의 결과가 참인지 거짓인지를 밝히는 연산을 수행하며 결과값으로 논리값을 출력하게 된다.
º 논리연산자는 논리값을 결합하여 논리 구조를 설정하는 연산을 수행하게 된다.
º R에는 이용자들이 자주 사용하는 수치적 함수, 통계함수 등이 기본함수로 지정되어 따로 패키지를 설치하지 않더라도 사용할 수 있도록 탑재되어 있다.
º 조건문이라는 것은 특정한 조건을 만족했을 경우에만 프로그램 코드를 수행하는 제어 구문을 의미하며 반복문은 유사한 패턴을 갖는 작업을 여러 번 반복해서 수행하는 제어 구문을 의미한다.
º 무조건 분기문은 프로그램의 흐름을 강제로 제어할 목적으로 만들어진 분기문이다. 일반적으로 반복문의 루프 안에서 반복문을 빠져나올 때 사용된다.
제6장 함수의 생성
함수란 특정한 작업을 독립적으로 수행하는 프로그램 코드의 집합체
- 구조: 함수이름 = function(매개변수) { 함수의 몸체 }
- 변수: 매개변수, 전역변수, 지역변수
- 함수의 편집 : fix(), edit()
- 함수는 다른 이름의 객체로 다시 저장할 수 있다. 또한 다른 함수의 매개변수처럼 사용될 수도 있다.
- 매개변수의 기본값을 줄 수도 있다.
- 함수를 위한 함수 : is.function(), args(), attributes(),
- 연산자 생성: > “%a2b%” = function(a, b) return(a+2*b) > 3 %a2b% 3 = 13
- 함수는 객체이므로 함수 내에서 다른 함수를 정의할 수 있다.
º 함수(function)란 특정한 작업을 독립적으로 수행하는 프로그램 코드의 집합체라고 할 수 있다.
º 전역변수는 어떤 변수의 영역 내에서도 접근할 수 있는 변수를 의미한다. 프로그램이 종료될 때까지 사용 가능한 상태로 존재하다가 프로그램이 종료되면 소멸된다.
º 지역변수란 전역변수와는 다르게 함수 내부에서만 사용이 가능한 변수이다. 지역 변수는 함수 내에서 정의된 후 함수가 호출되면 생성되었다가 함수가 종료되면 함께 소멸이 되는 변수이다.
º R에서 함수를 생성하는 방법은 크게 세 가지로 나뉜다. R 콘솔에서 직접 입력하여 생성하는 방법과 fix 함수를 이용하는 방법, 그리고 외부파일에 저장하여 읽어 들이는 방법 등이다.
제7장 데이터 탐색
모의 실험 : 확률변수의 값을 컴퓨터로 생성하여 가상의 실험을 하는 것
복원 및 비복원 추출 : sample(), sample.int()
특정 분포에서의 확률밀도함수, 누적분포함수, 분위수, 확률 난수
- 균일분포 : dunif(), punif(), qunif(), runif()
ex) dunif(1) # U(0,1)의 f(1)의 값
ex) punif(0.5) # U(0, 1)에서 0.5보다 같거나 작을 확률
ex) mean( runif(100) ) # 100개의 U(0,1)분포의 난수를 생성하여 이들의 평균
- 정규분포 : dnorm(), pnorm(), qnorm(), rnorm()
ex) qnorm(0.025) # 표준정규분포에서 2.5% 백분위수
ex) dnorm(c(-1, 0, 1)) # 표준정규분포의 확률밀도 함수 f(-1), f(0), f(1)의 값
ex) pnorm(c(-2.54, 0, 1.96)) # 표준정규분포에서 P[Z<-2.54], P[Z<0], P[Z<1.96] 의 확률
- 이항분포 : dbinom(), pbinom(), qbinom(), rbinom()
- 초기하분포 : dhyper(), phyper(), qhyper(), rhyper()
기술통계함수 : quantile(), mean(), median(), sd(), var(), range(), max(), min(), IQR(), cov(), cor(),
도수분포표 또는 교차표 : table(), ftable(), prob.table(), addmargins()
- table() : 매개변수가 한 개이면 도수분포표, 둘 이상이면 교차표를 출력, 셋 이상이면 ftable() 함수가 더 효율적
- prop.table() : 도수분포표나 교차표의 상대도수 값을 알고자 할 때 사용
- addmargins() : table, ftable, prop.table 함수의 행과 열의 합을 계산한다.
º 모의실험이란 컴퓨터 프로그램 등을 사용하여 실제 실험을 대신한 가상의 실험을 하는 것을 의미한다.
º 확률난수란 통계학에서 특정한 분포를 갖는 확률변수를 컴퓨터 프로그램 등으로 생성한 것을 의미한다.
º 복원추출이란 한번 관찰한 값을 다시 관찰할 수 있도록 모집단에 다시 포함시키는 추출방법이고 비복원추출이란 한번 관찰한 값은 다시 모집단에 포함하지 않는 추출방법이다.
º R에서는 일양분포, 정규분포, 이항분포 및 초기하분포에서의 확률, 분위수 등을 계산할 수 있다.
º 기술통계(descriptive statistics)란 데이터를 이해하기 쉬운 수치로 요약하는 기법을 말한다.
º R 함수를 이용하면 중심, 흩어짐의 정도 및 상관의 측도를 산출할 수 있다.
º 범주형 자료의 경우 도수분포표 및 교차표 등으로 자료를 요약할 수 있다.
제8장 그래프
막대그래프 : barplot() ~ 범주형(순서형, 명목형) 자료의 빈도수 또는 상대도수를 기둥의 높이로 표현하기 위한 그림
ex) par(mfrow=c(1,2)) # 그래픽 장치 한 화면에 그릴 그림 개수
ex) barplot( table(BMI$religion))
ex) barplot( table(BMI$gender, BMI$religion))
원그래프 : pie() ~ 범주형 자료의 상대빈도수를 원의 면적(또는 각도)에 비례하게 그려서 전체적인 분포를 확인
상자그림 : boxplot() ~ 사분위에 해당하는 부분은 상자로 표현하고, 그 밖의 범위를 선으로 연결하는 그림
줄기잎그림 : stem() ~ 자료의 수가 많지 않을 때 전체 자료를 줄기와 잎으로 표현한 그림
점도표 : stripchart() ~ 자료의 수가 많지 않을 경우 자료의 분포를 확인
히스토그램 : hist() ~ 연속인 변수의 분포를 알기 위해서 변수의 값을 적절한 범위로 구분하여 해당 범위에 속하는 자료의 빈도 또는 상대도수를 기둥의 높이로 표현하는 그림
산점도 : plot() ~ n개의 짝으로 얻은 자료를 x-y 평면에 점으로 나타내는 것을 산점도 또는 상관도라 한다
- plot(x, y, type=, main=, sub=, pch=, lty=, lwd=, xlab=, ylab=, ...) # y는 생략 가능
선 그리기 : 기존의 그림에 점이나 선을 추가로 그린다. 즉, plot 등과 같은 함수로 그래픽 장치가 열려 있어야 한다
- points(), lines(), abline(), arrows(), segments()
- abline(a=NULL, b=NULL, h=NULL, v=NULL, coef=NULL, ...)
- 기존 그림에 추가로 선분과 화살표 그리기 : arrows(), segments() 함수
다중 산점도 : matplot(), matpoints(), matline()
산점도 행렬 : pairs() 함수
함수 그리기 : curve()
- curve(expr, from=NULL, to=NULL, n=101, add=FALSE, type="l", xname="x", xlab=xname, ylab=NULL, xlim=NULL, ...)
- par(mfrow=c(1,2))
- curve(sin(x), xlim=c(-pi, pi), main="sin curve")
- hist(rnorm(100), freq=F)
- curve(dnorm(y), from=-3, to=3, add=T, col="red", xname="y")
별그림과 레이더 그림 : stars()
3차원 그림 : persp()
등고선 그림 : contour(), filled.contour()
- 그래프 개수 : par()
- 색 : rainbow(n), heat.colors(n), topo.colors(n)
- 점(pch), 색(col), 문자 크기(cex), 선종류(lty)
- 겹체 그리기 : lines() ~ 새로운 창을 만들지 않고 기존의 plot 그림 위에 lines에서 지정한 그림을 겹쳐 그려준다.
- text() ~ 그림 속에 필요한 텍스트를 삽입
º 자료가 하나일 때 점도표, 원 그래프, 히스토그램 등으로 요약할 수 있다.
º 막대 그래프와 원그래프는 범주형 자료의 분포를 막대 또는 원을 이용하여 그린 그림이다.
º 히스토그램은 측정형자료의 분포를 연속된 상자로 표현할 수 있는 그림이며 상자그림은 최대, 최소 및 사분위수로 분포를 표현한 표시한 그림이다.
º 산점도는 자료가 짝으로 얻어졌을 때 이 자료를 평면에 점으로 표현한 그림이다.
º 산점도는 자료가 짝으로 얻어졌을 때 이 자료를 평면에 점으로 표현한 그림이며 산점도 행렬은 두 개 이상의 변수에 대해 모든 가능한 산점도를 그리는 것을 의미한다.
º 별 그림은 행렬 등의 형식으로 주어진 자료의 각 행의 값의 크기를 별모양으로 만들어 각 행의 원소값의 크기가 어느 정도인지 그림으로 비교할 수 있도록 제시한 그림이다.
º 삼차원 이상의 자료는 등고선, 투시도 형태의 그래프로 요약할 수 있다.
제9장 시뮬레이션
통계적 시뮬레이션은 수리적인 계산으로 원하는 답을 얻는 것이 불가능하거나 아주 힘들 때 사용하는 방법론이다.
몬테카를로 시뮬레이션(MC 시뮬레이션) : 대수의 법칙
- 수리적으로 적분을 구하기 어려울 때, 원하는 분포에서 충분히 많은 랜덤 변수를 생성하여 평균, 분산 등을 추정하는 방법
- 어떤 랜덤 변수 X가 확률밀도함수 f(x)를 가진다고 가정
- X의 함수 h(x)의 평균 E(h(x))를 계산 :
- 확률밀도함수 f(x)를 가지는 랜덤변수를 n개 X1, … Xn 발생시킬 수 있다고 가정
- 그러면 평균에 대한 몬테카를로 추정값은,
- h(Xi)들의 표본평균을 구하는 것이된다.
- 만약, 충분히 많은 랜덤변수를 발생시킬 수 있다면 이 추정값을 대수의 법칙에 의해 참값과 아주 가까워질 수 있다. (매우 간단)
- 핵심 : 주어진 분포에서 랜덤변수를 발생시킬 수 있느냐?
중심극한정리 :
- 표본의 수가 커지면 표본평균의 분포가 모집단의 분포에 상관없이 정규분포로 근사한다는 것이다.
- 표본평균을 이용해서 모집단의 평균에 대한 신뢰구간을 구하거나 모집단의 평균에 대한 통계적 검정
수치 적분 : integrate(function, lower, upper, ...)
- 아이디어 : 적분 구간을 나눈 다음에 구간 내에서 적분해야 하는 함수를 다항식 함수로 근사한 다음에 적분하는 것이다.
- 다항식 함수를 이용하는 이유는 적분이 쉽게 되고, 짧은 구간 안에서는 대부분의 함수를 아주 잘 근사할 수 있기 때문
최적화 기법 : optimize(function, interval_vector)
- 통계학이나 수학에서 최적화란 어떤 함수의 최대값이나 최소값을 찾는 것이다.
- 미분가능한 함수에 대한 최대값이나 최소값을 찾는 방법
- 최대우도추정량은 우도를 최대화하는 추정량이므로, optimzie(f, interval, maximum=T) 함수를 이용하여 구하는 것과 같다.
º MC 시뮬레이션은 특정 분포에서 랜덤 변수를 발생시켜서 여러 가지 통계량을 계산하는 방법이다. 주로 평균과 분산의 계산에 사용되지만 그 외에도 다양한 통계량을 계산하는데 사용될 수 있다.
º 중심극한 정리란 표본평균의 분포가 표본의 수가 커지면 모집단의 분포에 상관없이 정규분포로 근사할 수 있다는 것이다.
º R에서 수치적분은 integrate 함수를 이용하면 계산할 수 있으며, 수리적으로 계산이 불가능한 많은 함수도 수치적분을 이용하면 계산할 수 있다.
º 최적화란 어떤 함수의 최대값이나 최소값을 구하는 것으로 R에서는 optimize함수를 이용하면 계산할 수 있다.
제10장 통계 모형
회귀모형 : lm(), summary(), predict(), step()
- 회귀분석에 사용되는 자료는 반응변수(종속변수, Y)와 설명변수(독립변수, X)가 짝으로 관측되는 경우
- 처음으로 할 일은 두 변수 사이의 산점도를 그려보는 것 : 선형관계(선형회귀분석), 아니면 (비선형회귀분석)
단순선형회귀분석 : 설명변수가 하나인 경우
- β0는 회귀직선의 y 절편이고, β1은 기울기, εi는 오차항
- 오차항들은 평균이 0이고 분산은 σ2이라고 가정한다.
- 가장 좋은 직선 : 잔차제곱합을 최소로 하는 직선
- 회귀직선 계산 : lm(formula, data, subset), ex) lm1 = lm(Y~X)
- 회귀분석 결과 확인 : summary( lm1 ) # 절편, 기울기, 분석 정확도(결정계수, F값, p-value) 등
- 선형모형을 이용하여 예측 : predict(적합된 모형, 설명변수와 같은 이름의 데이터 프레임)
~ 회귀모형에서 새로운 자료에 대해 예측값을 구할 때, 그 자료는 원래 모형을 적합할 때 사용한 자료와 비슷한 범위에 있는 자료를 사용해야 한다.
- 중회귀모형 : 설명변수가 두 개 이상인 경우, 단순회귀분석과 같이, lm() 함수로 분석 가능
회귀진단 : 기본적으로 주어진 자료가 선형모형을 사용하기에 얼마나 적합한지를 알아보는 것
- 반응변수와 설명변수는 선형관계를 가지고 있다. 오차항은 평균이 0이고, 등분산을 가지는 지 확인 : 설명변수와 종속변수의 산점도, 잔차와 설명변수와 산점도 확인
- 상관계수 : cor() ~ 선형적인 관계를 확인
- 잔차산점도 : 랜덤하게 분포 – 선형관계를 의미 / 명백한 곡선 형태가 나오는 경우는 선형관계가 아님을 의미함. (비선형 회귀모형을 사용해야 한다)
- 잔차산점도 : 설명변수의 값이 증가하면서 분산이 커지거나 작아지는 경우를 흔히 볼 수 있다. (등분산성 아님)
- 회귀계수에 대한 분산 추정이 정확하지 않게 되므로 회귀계수에 대한 유의성 검정이나 전체 모형에 대한 F-test에서도 부정확한 결과를 가져올 확률이 높아진다
- 이런 경우 보통 변수 변환을 통해서 등분산성 가정을 지키려고 할 수 있는데, 일반적으로 반응변수 Y에 대해서 log변환을 많이 이용한다.
- 중회귀모형인 경우에는 잔차산점도를 그릴 때 설명변수가 두 개 이상이므로 잔차와 예측값의 산점도를 그리는 것이 일반적이다
- 이상적인 잔차산점도는 0 근방에서 아무런 곡선의 패턴이 없고 퍼짐의 정도도 설명변수나 예측값의 값에 상관없이 비슷해야 한다.
- 실제 데이터의 잔차산점도는 아주 이상적인 형태를 보이긴 힘들지만, 일단 이상적인 잔차산점도가 무엇인지 알고 그렇지 못한 경우에 어떻게 대처해야하는 지를 아는 것이 무엇보다 중요하다
변수 선택 : 설명변수의 수가 많은 경우에 어떻게 최적의 변수를 선택하는 방법
- 좋은 회귀모형 : 모형이 간단하면서 예측오차가 작은 모형
- AIC 척도 = n log(RSS/n) + 2P (선형모형의 경우, RSS 잔차제곱합, n 관측값의 개수, P 설명변수의 개수)
- stepwise regression 알고리즘 : 각각의 스텝에서 설명변수를 하나씩 모형에 포함시키거나 하나씩 제거해 가면서 AIC 값이 가장 작은 모형을 찾는 방법 ~ step() 함수 사용
ex) lm1 = lm(mpg~. , data=mtcars)
ex) lm1.step = step( lm1, direction=both)
- stepwise regression 방법론을 사용한다고 해서 최소의 AIC값을 가지는 모형을 늘 찾을 수 있다는 것은 아니다
- 설명변수의 수가 많더라도 짧은 시간에 상당히 경쟁력있는 모형을 찾을 수 있다는 장점이 있다.
- 유의할 점은, AIC 값을 최소화하는 모형에 포함된 설명변수가 모두 유의할 필요는 없다는 것이다.
º 선형회귀모형은 설명변수와 반응변수사이에 선형관계가 있는 경우에 사용할 수 있는 방법론이다.
º R-squared 또는 결정계수는 반응변수의 총변동량중에서 회귀모형에 의해서 설명되는 변동량의 비율을 말하는 것으로 0에서 1사이의 값을 가진다. 결정계수가 클수록 회귀모형의 설명력이 커지므로 좋은 모형이라고 할 수 있다.
º 회귀진단은 선형모형의 기본가정이 맞는 지를 알아보는 것으로 주로 잔차산점도를 이용해서 이루어진다. 잔차산점도가 0 근방에서 아무런 패턴도 없어야 이상적인 것이다.
º 변수선택 방법론은 최적의 선형모형을 찾고자 할 때 사용될 수 있으며 stepwise regression 방법론을 이용해서 AIC값이 최소가 되는 모형을 찾는다.
º 회귀분석은 그림에서 시작해서 그림으로 끝난다고도 할 수 있다. 우선 원 자료의 설명변수와 반응변수의 산점도를 보고 정말 선형관계인지를 파악하고 모형적합이 끝난 다음에서 잔차산점도를 통해서 이 모형이 얼마나 선형모형에 대한 가정을 충실히 지키고 있는 지를 확인하는 과정이 꼭 필요하다.