JANGUN


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값이 최소가 되는 모형을 찾는다.
º 회귀분석은 그림에서 시작해서 그림으로 끝난다고도 할 수 있다. 우선 원 자료의 설명변수와 반응변수의 산점도를 보고 정말 선형관계인지를 파악하고 모형적합이 끝난 다음에서 잔차산점도를 통해서 이 모형이 얼마나 선형모형에 대한 가정을 충실히 지키고 있는 지를 확인하는 과정이 꼭 필요하다.