Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
Tags
more
Archives
Today
Total
관리 메뉴

BASEMENT

R 프로그래밍 6주차 본문

Programming/R

R 프로그래밍 6주차

2_34 2020. 7. 20. 18:56

 

 

두 집단의 비교

1. 독립표본과 대응표본

 

독립표본 : 서로 관련이 없는 두 모집단으로부터 얻어짐

대응표본 : 한 모집단으로부터 얻어진 대상에 대하여 두 번 반복 측정하여 얻어짐​

 

2. 일표본 평균

 

하나의 모집단으로부터 표본을 추출하고 표본으로부터 모집단 평균의 신뢰 구간을 구함

가설검정 : t.test() 함수 사용 (귀무가설 : 모평균이 mu와 같다)

x <- rnorm(30, mean=0)	# 평균0
t.test(x)

x <- rnorm(30, mean=10)	# 평균10
t.test(x, mu=10)	# mu=10 모평균이 10인지에 대한 가설 검증. p-value>0.05이므로 mu=10이라는 귀무가설 기각x

3. 독립 이표본 평균

 

두 모집단에서 각각 표본 추출하고 두 모집단의 평균이 같은지 구함

가설검정 : t.test()

 

var.equal : 두 집단의 모분산이 같은지 여부

paired=T 짝지은 이표본 검정 / paired=F 독립 이표본 검정

alternative = "two.sided" or "greater" or "less". 기본값은 two.sided (양측검정)

t.test(x,y, var.equal=T, alt="greater", paired=T)

 

분산분석

 

1. 일원배치 분산분석(ANOVA)​

 

하나 이상의 모델을 평가하거나 모델 간의 비교를 위해 사용
독립성, 정규성, 등분산성의 3가지 가정을 만족해야 함​

  • 독립성 : 변수간 독립성
  • 정규성 : 정규분포에 따르는지. t-test 실행 
  • 등분산성 : 분산이 균등한지

# anova를 사용하여 완전모델과 축소모델 비교

data(cars)

full <- lm(dist~speed, data=cars)	# 완전모델
full
reduced <- lm(dist~1, data=cars)	# 축소모델 : speed변수 제외, dist를 상수값으로 예측
reduced

anova(reduced, full)	# full과 reduced 비교
# p-value < 0.05이므로 reduced모델과 full모델 간 유의한 차이가 있음
# speed열이 유의미한 설명 변수임을 의미함

 

2. 그 밖의 분산분석(ANOVA)​

 

측정하고자 하는 값에 영향을 미치는 요인의 수에 따라서 구분​

요인이 1개이면 one-way ANOVA, 요인이 2개이면 two-way ANOVA ​

 

cf) RM-ANOVA : 반복해서 ANOVA 측정함

 

 

단순 회귀 분석

1. 단순 회귀 분석

  • 독립변수와 종속변수가 선형의 관계에 있을때, 선형회귀식을 추정

  • 회귀계수 : 회귀분석에서 추정하는 값​ (변수 X 앞의 βi)

  • 잔차 : 표본집단에서 관측값과 회귀선에 의한 예측값 사이의 차이(εi)

  • 오차항 : 모집단에서 실제값과 회귀선 사이에 차이가 나는 부분 

2. 단순 선형 회귀

 

종속 변수 Y를 하나의 독립 변수 X로 설명

선형회귀 : lm() 함수로 수행

lm(y~x, data)

data(cars)
(m <- lm(dist~speed, data=cars))

1) 선형 회귀 결과 추출

  • coef() : 회귀계수 (해당되는 x값의 기울기)
  • fitted() : 적합된 값 (y값 예측)
  • residuals() : 잔차
  • confint() : 회귀 계수의 신뢰 구간
  • 잔차 제곱 합 : 데이터와 추정된 모델 간의 불일치 정도를 표현

cf) 최소 제곱법 : 선형회귀의 회귀계수는 최소제곱법으로 추정함. 오차의 제곱합이 최소가 되도록 회귀계수를 정함

data(cars)

m <- lm(dist~speed, data=cars)
coef(m)
fitted(m)
residuals(m)
confint(m)

2) 선형 모델을 사용한 예측

 

새로운 데이터에 대한 예측값을 구함

predict(선형모델, newdata)

# 자동차의 주행속도와 제동거리에 대한 선형회귀모델, 주행속도가 3인 경우 제동거리 예측

data(cars)

m <- lm(dist~speed, data=cars)
predict(m, newdata=data.frame(speed=3))	# 예측값 : -5.781869
coef(m)
-17.579095 + 3.932409 * 3	# 실제값 : -5.781868
# 예측값과 실제값이 일치함

predict(m, newdata=data.frame(speed=c(3)), interval="confidence")
# interverl="confidence" : 제동거리의 평균 신뢰구간을 구할 수 있음

3) 모델 평가

 

summary() : 주어진 인자에 대한 요약정보를 보여줌

m <- lm(dist~speed, data=cars)
summary(m)

# R-squared 값이 높을수록 좋음

cf) 결정계수 (R-squared)

R 제곱

회귀제곱 합 / 총 제곱 합

범위는 0 이상 1이하 이며, 1에 가까울수록 회귀 모델이 데이터를 더 잘 설명함

 

3. 회귀모형의 기본 가정

 

1) 선형성

  • 독립변수와 종속변수의 관계는 선형관계

  • 산점도로 확인

  • cf) 비선형회귀 : 직선이 아님. 포아송 분석 사용

2) 오차항의 정규성

  • 모든 독립변수의 값에서 종속변수는 정규분포를 이룸

  • 정규 P-P 곡선으로 확인

3) 오차항의 독립성

  • 개별 잔차들은 서로 독립

  • 잔차산점도, Durbin-Watson 통계량으로 확인

4) 오차항의 등분산성

  • 모든 독립변수 값에서 종속변수의 분산은 다음과 같음

  • 잔차산점도로 관리

4. 모델 진단 그래프

 

plot(m) : 선형 회귀 모델을 평가하는 데 필요한 다양한 차트를 볼 수 있음

 

5. 회귀 직선의 시각화

 

데이터의 산점도와 회귀 직선을 그릴 수 있음

plot() 함수 사용

plot(cars$speed, cars$dist)
abline(coef(m))	# coef: 절편과 기울기 추출, abline : 절편과 기울기로 그래프를 그리는 함수

speed <- seq(min(cars$speed), max(cars$speed), .1)
ys <- predict(m, newdata=data.frame(speed=speed), interval="confidence")  # 신뢰구간을 구함    
matplot(speed, ys, type='n')
matlines(speed, ys, lty=c(1,2,2), col=1)

 

다중 회귀 분석 (중선형분석)

1. 다중 회귀 분석

  • 예측변수(독립변수 or 설명변수) 2개 이상인 회귀분석

  • 예측변수의 개수가 많을 경우, 적절한 회귀 모형 선택이 필요

data(iris)
head(iris)
(m <- lm(iris$Sepal.Length~., data=iris[,-5]))  # ~. 종속변수를 제외한 모든 변수를 가져옴
summary(m)

 

2. 중선형 회귀 - 범주형 변수

data("Boston")

m <- lm(Boston$medv~., data=Boston)
summary(m)

# 단계적 방법
m2 <- step(m, direction="both")
formula(m2)
m3 <- lm(Boston$medv ~ crim + zn + chas + nox + rm + dis + rad + tax + 
         ptratio + black + lstat, data=Boston)
summary(m3)

# stepwise를 사용하여 변수 제거/추가 등 선택 가능
# age를 삭제하거나 추가하여도 r-squared 값 차이가 없음

중선형 회귀 예제

data(Boston)

m <- lm(medv~., data=Boston.train)
summary(m)
m2 <- step(m, direction="both")
formula(m2)
m3 <- lm(medv ~ crim + zn + chas + nox + rm + dis + rad + tax + ptratio + 
           black + lstat, data=Boston.train)
summary(m3)

m4 <- predict(m3, newdata = Boston.test)
summary(m4)
mean((Boston.test$medv-m4)**2)  
# MSE (평균오차곱합) => 회귀식을 평가하는 지표중 하나. 낮을수록 더 좋은 모델(보통 20이하)
# rmse

 

변수선택법

 

1. 변수선택법

 

후진제거, 전진제거, 단계적 제거

  • 후진제거 (backward) = 변수소거법 : 모든 변수가 포함된 모델에서 기준 통계치에 가장 도움이 되지 않는 변수를 하나씩 제거하는 방법​
  • 전진선택 (forward) : 절편에 있는 모델에서 기준 통계치에 가장 도움이 되지 않는 변수를 하나씩 제거하는 방법
  • 단계적 선택 (stepwise) : 모든 변수가 포함된 모델에서 출발하여 기준 통계치에 가장 도움되지 않는 변수를 삭제하거나, 모델에서 빠져있는 변수 중에서 기준 통계치를 가장 개선시키는 변수를 추가하는 방법​. 주로 사용함

step(모델, direction="both")  -> direction은 변수 선택의 방향 ("both", "forward", "backward")

formula() : 포뮬러 함수. 최적 모델의 포뮬러를 알려줌

data(Boston)

m <- lm(medv~., data=Boston.train)
summary(m)
m2 <- step(m, direction="both")
formula(m2)
m3 <- lm(medv ~ crim + zn + chas + nox + rm + dis + rad + tax + ptratio + 
           black + lstat, data=Boston.train)
summary(m3)

 

데이터 샘플링

1. 전수조사 vs 표본조사

 

모집단의 특성을 측정하기 위한 방법으로는 전수조사와 표본조사로 구분​

표본조사는 확률적 방법과 비확률적 방법을 이용하여 모집단으로부터 표본을 추출함​

 

1) 전수조사 

  • 관심의 대상이 되는 집단을 이루는 모든 개체들을 조사하여 모집단(조사하고자 하는 대상이 되는 집단 전체)의  ​특성을 축정하는 방법​

  •  장점 : 정확한 모집단 특성 측정 가능 ​

  •  단점 : 비용 과다 소요, 조사에 장시간 소요​

2) 표본조사

  •  관심의 대상이 되는 전체 모집단 중 일부(표본)를 선택하고, 조사를 실시하여 이로부터 전체 모집단의 특성을 추정​

  •  장점 : 시간 및 비용 절감, 심도 있는 조사 가능​

  •  단점 : 모집단에 대한 정확한 특성 측정이 아닌 추정 

   2-1) 확률적 방법

  • 모집단의 개체가 표본으로 선정될 가능성이 모두 동일한 표본추출방법(Equally Likely)​

  • 표본오차 계산 가능

  • 단순임의추출, 계통추출, 층화추출, 집락추출

   2-2) 비확률적 방법

  •  조사(분석)자가 편의를 위하여 표본 대상자를 임의로 선정하는 방법

  •  객관적 타당성이 제시되어야 함 

 

2. 표본추출법

 

단순임의추출, 계통추출, 층화추출, 집락추출

보통 층화임의추출을 자주 사용함

구분​구분

방법​방법

장점​장점

단점​단점

단순임의추출
(Simple Random Sampling)

  •  표본프레임 개체에 일련번호를 부여

  •  난수를 이용하여 원하는 표본크기만큼 추출 

  •  난수 생성은 엑셀에서 가능

  •  모집단을 대표하는 표본 추출 가능 

  •  가장Ideal한 방법

  •  실제 표본 프레임을 구하는 것이 불가능한 경우가 많음 

  •  가장 이상적인 방법이지만 표본 프레임 리스크가필요하므로 현실적이지 못해 설문조사에서는 거의이용되지 않는 방법

계통추출
(Systematic Sampling)

  •  대상 건에 대한 유일키 부여

  •  대상 건(N)을 표본의 수(K)로 나눈다

  •  모집단을 대표하는 표본 추출 가능 

  •  매번 난수를 찾는 번거로움 없음

  •  실제 표본 프레임을 구하는 것이 불가능한 경우가 많음

  •  일련 번호에 따른 체계적 차이가 존재 시 조사 왜

층화추출
(Stratified Sampling)

  •  모집단을 인구학적 특성에 의해 그룹화 한후 각 그룹()에서 일정한 크기의 표본을 선택 : 확률비례추출 

  •  각 층에서 표본 추출 시에는 단순임의추출이나 계통추출 사용

  •  표본 추출 비용과 시간 절약

  •  그룹화를 위하여 고려한 특성에 따라 그룹간 응답의 차이가 없다면 조사 비용 증가

집락추출
(Clustering Sampling)

  •  모집단을 그룹화 한다는 면에서는 층화추출 방법과 동일하지만 그룹(군집)간에는 응답의 차이가 없다는 점이 다르다. 그룹 간응답의 차이가 없으므로 한 그룹이 임의로선택되면(단순임의추출) 그 그룹에 속한 사람만을 대상으로 표본 크기 만큼 추출

  •  추출 비용과 시간 절약 

  •  층화추출 방법보다는 비용과 시간더 절약

  •  나눈 그룹간 응답 성향의 차이가 있다면   조사결과 왜곡 

  •  일반적으로 자주 사용하지 않는 방법

 

3. 단순임의추출

data(iris)
data(Boston)

t.idx <- sample(1:150, 105) # 복원추출
iris.train <- iris[t.idx,]
str(iris.train)
iris.test <- iris[-t.idx,]
str(iris.test)

l.idx <- sample(1:506, 350)
Boston.train <- Boston[l.idx, ]
str(Boston.train)
Boston.test <- Boston[-l.idx, ]
str(Boston.test)

 

4. 층화임의추출

install.packages("sampling")
library(sampling)
data(iris)

tr.idx <- strata(c("Species"), size=c(35,35,35), method="srswor", data=iris)  # srswor : 비복원 추출
te.idx <- iris[-tr.idx$ID_unit,]
train <- getdata(iris, tr.idx)
test <- getdata(iris, te.idx)


library(MASS)
data(Boston)

str(Boston)
Boston$chas <- as.factor(Boston$chas) # as.factor : factor로 변환
table(Boston$chas)
x <- strata(c("chas"), size=c(400,30), method="srswor", data=Boston)
getdata(Boston, x)

 

실습

보스톤 집값 데이터

506개 타운의 13개 변수로 해당 타운의 주택가격을 예측하는 문제

data("Boston")

l <- lm(Boston$medv~., data=Boston)
summary(l)

mpg와 상관관계가 가장 높은 데이터 회귀분석

data(mtcars)
str(mtcars)
                
c.idx <- sample(1:32, 22)       # 1. 데이터 샘플링 (1~데이터갯수, 선택할 갯수)      
mtcars.train <- mtcars[c.idx,]  # 2. 데이터를 train(모델훈련), test(모델검증) set으로 나눔
mtcars.test <- mtcars[-c.idx,]

c <- lm(mpg~., data=mtcars.train) # 3. train모델로 전체 회귀분석
summary(c)                      
c2 <- step(c, direction="both") # 4. stepwise로 변수 선택
formula(c2)  # 최적값을 보여줌
c3 <- lm(mpg ~ wt + qsec + am, data=mtcars.train) #5. 선택한 변수로 다시 train
summary(c3)
c4 <- predict(c3, newdata=mtcars.test)   #6. 새로운 데이터 성능 확인
summary(c4)
mean((mtcars.test$mpg-c4)**2)      # 7. mse값(오차의 곱)이 낮을수록 좋음

 

 

 

 

 

 

 

'Programming > R' 카테고리의 다른 글

R 프로그래밍 - 8주차  (0) 2020.08.11
R 프로그래밍 - 7주차  (0) 2020.08.11
R 프로그래밍 5주차  (0) 2020.07.18
R프로그래밍 4주차  (0) 2020.07.06
R프로그래밍 3주차  (0) 2020.07.05
Comments