본 글은 모두를 위한 R 데이터 분석 입문 책을 공부하면서 정리·요약한 내용입니다.
저자 : 오세종
출판 : 한빛아카데미
1. - 3 -
2. - 4 -
3. - 2 - 독립변수의 기울기가 0이면 귀무가설, 0이 아니면 대립가설
4. - 3 -
복습
1. 다중선형 회귀분석
- 두 개 이상의 독립변수들이 종속변수에 미치는 영향을 추정하는 통계기법
1) 모델의 통계적 유의성
- F통계량 : 유의수준 5% 하에서 F통계량의 p-값이 0.05보다 작으면 통계적으로 유의
- 회귀계수 : 모든 회귀계수의 유의성이 통계적으로 검증되어야 모델을 활용할 수 있음
- 설명력 : 수정된 결정계수를 확인
2. 다중선형 회귀모델의 변수 선택
1) 설명변수 선택 : 가능한 범위 내에서 적은 수의 설명변수 포함
2) 모형 선택 : 모든 가능한 조합의 회귀분석
- AIC와 BIC가 가장 작은 값을 갖는 모형을 최적의 모형으로 선택
3) 단계적 변수 선택(Stepwise Variable Selection)
① 전진 선택법(forward selection)
② 후진 제거법(backward elimination)
③ 단계별 방법(stepwise method)
4) stepAIC( ) 함수를 이용하여 변수 선택
# Prestige 데이터셋을 이용해 다중회귀모델 만들기
library(car) # Prestige 데이터셋 제공
library(MASS) # stepAIC() 함수 제공
newdata2 <- Prestige[,c(1:5)] # 모델 구축에 사용할 데이터셋 생성
head(newdata2)
mod <- lm(income ~ ., data=newdata2) # income을 제외한 모든 변수를 독립변수로 선택
mod
mod2 <- stepAIC(mod) # 변수 선택 진행
mod2 # 선택한 변수 확인
summary(mod2) # 회귀모델 상세내용 확인
로지스틱 회귀분석의 개념
회귀분석 : 독립변수-연속형, 종속변수-연속형
로지스틱 회귀분석 : 독립변수-연속형, 종속변수-범주형
연속형 : 숫자 계산가능(ex iris 데이터셋의 꽃받침 길이)
범주형 : 숫자 계산불가능(ex iris 데이터셋의 품종)
로지스틱 회귀분석의 예시 : iris 데이터셋에서 4개의 측정값(연속형)을 통해 품종(범주형)을 예측
R에서 로지스틱 회귀모델은 glm()함수 이용
로지스틱 회귀모델 만들기
로지스틱 회귀도 기본적으로 회귀 기법이기 때문에 종속변수가 숫자로 표현되어야 함
예를 들어 YES와 NO는 0과 1로, setosa, versicolor, virginica는 1, 2, 3과 같이 숫자로 바꾼 후에 로지스틱 회귀를 적용해야 함
iris.new <- iris
iris.new$Species <- as.integer(iris.new$Species) # 범주형 자료를 정수로 변환
head(iris.new)
mod.iris <- glm(Species ~ ., data=iris.new) # 로지스틱 회귀모델 도출
summary(mod.iris) # 회귀모델의 상세 내용 확인
로지스틱 회귀모델을 이용한 예측
수작업으로 계산하여 품종을 예측하는 방법 대신, 구해놓은 회귀모델을 이용하여 보다 편리한 방법으로 품종을 예측
# 예측 대상 데이터 생성(데이터프레임)
unknown <- data.frame(rbind(c(5.1, 3.5, 1.4, 0.2)))
names(unknown) <- names(iris)[1:4]
unknown # 예측 대상 데이터
pred <- predict(mod.iris, unknown) # 품종 예측
pred # 예측결과 출력
round(pred, 0) # 예측결과 출력(소수 첫째 자리에서 반올림)
# 실제 품종명 알아보기
pred <- round(pred, 0)
pred
levels(iris$Species) # levels() : 벡터타입의 자료에 대해 어떤 종류의 값이 있는지 보여줌
levels(iris$Species)[pred]
다수의 데이터에 대한 예측
예측 대상 데이터가 여러 개인 경우에도 유사한 방법으로 예측
test <- iris[,1:4] # 예측 대상 데이터 준비
pred <- predict(mod.iris, test) # 모델을 이용한 예측
pred <- round(pred, 0)
pred # 예측 결과 출력
answer <- as.integer(iris$Species) # 실제 품종 정보
pred == answer # 예측 품종과 실제 품종이 같은지 비교
acc <- mean(pred == answer) # 예측 정확도 계산
acc # (0.9733333)
연습문제
UCLA 대학원의 입학 데이터를 불러와서 mydata에 저장한 후 다음 물음에 답하시오.
mydata <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
(1) gre, gpa, rank를 이용해 합격 여부(admit)를 예측하는 로지스틱 모델을 만드시오(0: 불합격, 1:합격).
mod.ucla <- glm(admit ~ ., data=mydata)
summary(mod.ucla)
(2) mydata에서 합격 여부(admit)를 제외한 데이터를 예측 대상 데이터로 하여 (1)에서 만든 모델에 입력하여 합격 여부를 예측하시오.
test <- mydata[,2:4]
pred <- predict(mod.ucla, test)
pred <- round(pred, 0)
pred
(3) 만들어진 모델의 예측 정확도를 나타내시오.
answer <- mydata$admit
pred == answer
acc <- mean(pred == answer)
acc
dplyr 패키지란?
데이터 가공은 특화된 라이브러리를 사용하는 것이 효율적
dplyr은 필터나 select와 같은 입출력 관계의 함수로 구현함으로써 사용자들이 보다 직관적으로 활용 가능
탐색적 데이터 분석(EDA ; Exploratory Data Analysis) 과정에서 시각화와 데이터 가공은 매우 밀접한 연관이 있음
%>% 연산자(파이프 연산자)
앞의 명령어를 처리한 결과를 다음 명령어로 전달
filter() 함수
조건에 따라 행(row)을 추출
AND 조건문 : "," 또는 "&" 연산자 사용
OR 조건문 : | 연산자 사용
library(dplyr)
library(gapminder)
# 한국의 1952년 데이터 추출
filter(gapminder, country=="Korea, Rep.", year==1952)
gapminder %>% filter(country=="Korea, Rep.", year==1952)
# 한국 또는 중국 데이터 추출
filter(gapminder, country=="Korea, Rep." | country=="China")
gapminder %>% filter(country=="Korea, Rep." | country=="China")
select() 함수
특정 열(column)을 추출
복수의 열을 추출할 때에는 콤마(,)로 구분하며 인접한 열을 추출할때에는 : 연산자를 이용
# country, year, lifeExp 추출
select(gapminder, country, year, lifeExp)
gapminder %>% select(country, year, lifeExp)
# year부터 pop까지 추출
select(gapminder, year:pop)
gapminder %>% select(year:pop)
# year부터 pop을 제외한 나머지 열 추출
select(gapminder, -(year:pop))
gapminder %>% select(-(year:pop))
arrange() 함수
지정한 열을 기준으로 데이터를 정렬
내림차순으로 정렬할 때는 desc() 사용
# continent, country 오름차순으로 정렬
arrange(gapminder, continent, country)
gapminder %>% arrange(continent, country)
# pop 내림차순으로 정렬
arrange(gapminder, desc(pop))
gapminder %>% arrange(desc(pop))
summarise() 함수
mean(), sd(), var(), median() 등의 함수를 지정하여 기초 통계량을 구함
# pop의 평균을 구함
summarise(gapminder, mean_pop=mean(pop))
gapminder %>% summarise(mean_pop=mean(pop))
# pop의 중간값을 구함
summarise(gapminder, med_pop=median(pop))
gapminder %>% summarise(med_pop=median(pop))
group_by() 함수
열의 수준(level)별로 그룹화된 결과
# 대륙별로 gdpPercap의 평균을 구함
gapminder %>% group_by(continent) %>%
summarise(mean_gdp=mean(gdpPercap))
# 대륙별, 국가별로 gdpPercap의 평균을 구함
gapminder %>% group_by(continent, country) %>%
summarise(mean_gdp=mean(gdpPercap))
mutate() 함수
열(column)을 추가
# gdp_billion을 추가
gapminder %>% mutate(gdp_billion=gdpPercap*pop/10^9) %>%
group_by(continent, year)
# gdp_futureExptect를 추가
gapminder %>% mutate(gdp_futureExpect=ifelse(lifeExp > 40, gdpPercap * 1.5, gdpPercap))
'데이터 분석 > R' 카테고리의 다른 글
데이터 분석[R] - 13차시 (0) | 2021.07.13 |
---|---|
데이터 분석[R] - 12차시 (0) | 2021.07.12 |
데이터 분석[R] - 10차시 (0) | 2021.07.08 |
데이터 분석[R] - 9 차시 (0) | 2021.07.07 |
데이터 분석[R] - 8차시 (0) | 2021.07.06 |