안녕하세요

모두를 위한 R 데이터 분석 입문 연습문제 11장 본문

Study_exam/모두를 위한 R 데이터 분석 입문 연습문제

모두를 위한 R 데이터 분석 입문 연습문제 11장

godxxy1229 2023. 6. 15. 06:35
library(MASS)

 

01 state.x77 데이터셋에서 문맹률(Illiteracy)을 이용해 범죄율(Murder)을 예측하는 단순선형 회귀모델을 만드시오. 그리고 문맹률이 0.5, 1.0, 1.5일 때 범죄율을 예측하여 보시오.

 

mod <- lm(Illiteracy~Murder, data = data.frame(state.x77))
x <- c(0.5, 1.0, 1.5)
pred.x <- coef(mod)[1] + coef(mod)[2]*x
pred.x


02 trees 데이터셋에서 나무 둘레(Girth)로 나무의 볼륨(Volume)을 예측하는 단순선형 회귀모델을 만드시오. 그리고 나무 둘레가 8.5, 9.0, 9.5일 때 나무의 볼륨을 예측하여 보시오.

 

mod <- lm(Volume~Girth, data = trees)
x <- c(8.5, 9.0, 9.5)
pred.x <- coef(mod)[1] + coef(mod)[2]*x
pred.x


03 pressure 데이터셋에서 온도(temperature)로 기압(pressure)을 예측하는 단순선형 회귀모델을 만드시오. 그리고 온도가 65, 95, 155일 때 기압을 예측하여 보시오.

 

mod <- lm(pressure~temperature, data = pressure)
x <- c(65, 95, 155)
pred.x <- coef(mod)[1] + coef(mod)[2]*x
pred.x

 

04 trees 데이터셋에 대해 다음의 문제를 해결하는 R 코드를 작성하시오.
(1) 나무 둘레(Girth)와 나무의 키 (Height)로 나무의 볼륨을 예측하는 다중선형 회귀모델을 만드시오.
(2) 다중선형 회귀모델을 이용하여 trees 데이터셋의 나무 둘레(Girth)와 나무의 키 (Height)로 나무의 볼륨을 예측하시오.
(3) (2)에서 예측한 볼륨과 실제 trees 데이터셋의 볼륨(Volume)이 얼마나 차이가 나는지 보이시오.(예측값, 실제값, 예측값-실제값을 나타낸다.)

 

#(1)
mod <- lm(Volume~Girth+Height, data = trees)
#(2)
x <- trees[,c("Girth", "Height")]
prd.vol <- coef(mod)[1] + coef(mod)[2]*x$Girth + coef(mod)[3]*x$Height
#(3)
prd.cmp <- prd.vol - trees[,"Volume"]
prd.tot <- data.frame(prd.vol, Actual = trees[,"Volume"], prd.cmp)
prd.tot


05 mlbench 패키지의 Boston Housing 데이터셋은 보스턴 지역의 지역 정보 및 평균 주택가격(medv) 정보가 저장되어 있다. 다른 변수들을 이용하여 medv를 예측하는 모델을 만드시오.(단 chas 변수는 모델을 만들 때 제외한다.)

library(mlbench)
data(BostonHousing)    #데이터셋 불러오기

(1) 전체 변수를 이용하여 평균 주택가격(medv)을 예측하는 회귀모델을 만들고 회귀식을 나타내시오.
(2) 평균 주택가격(medv)을 예측하는 데 도움이 되는 변수들만 사용하여 예측하는 회귀모델을 만들고 회귀식을 나타내시오.
(3) (1), (2)에서 만든 예측모델의 설명력(Adjusted R-squared)을 비교해 보시오.

 

library(mlbench)
data("BostonHousing")
#(1)
mod <- lm(medv~., data = BostonHousing)
#(2)
mod.2 <- stepAIC(mod)
#(3)
summary(mod)
summary(mod.2)
# 무의미한 변수를 제거한 mod.2 의 Adjusted R-square 값이 0.01 만큼 높다.

 

06 mtcars 데이터셋에서 다른 변수들을 이용하여 연비(mpg)를 예측하는 다중 회귀모델을 만드시오.
(1) 전체 변수를 이용하여 연비(mpg)를 예측하는 회귀모델을 만들고 회귀식을 나타내시오.

(2) 연비(mpg)를 예측하는 데 도움이 되는 변수들만 사용하여 예측하는 회귀모델을 만들고 회귀식을 나타내시오.

(3) (1), (2)에서 만든 예측모델의 설명력(Adjusted R-squared)을 비교하시오.

 

#(1)
mod <- lm( mpg~., data =mtcars)
#(2)
mod.AIC <- stepAIC(mod)
#(3)
summary(mod)
summary(mod.AIC)
# stepAIC를 처리하기 전 값은 0.8066, 하고 난 후의 값은 0.8336으로 
# 설명력이 증가했다고 볼 수 있다.


07 UCLA 대학원의 입학 데이터를 불러와서 mydata에 저장한 후 다음 물음에 답하시오.

mydata <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")

 

(1) gre, gpa, rank를 이용해 합격 여부 (admit)를 예측하는 로지스틱 모델을 만드시오(0: 불합격, 1:합격).
(2) mydata에서 합격 여부(admit)를 제외한 데이터를 예측 대상 데이터로 하여 (1)에서 만든 모델에 입력하여 합격 여부를 예측하고 실제값과 예측값을 나타내시오. (3) 만들어진 모델의 예측 정확도를 나타내시오.

 

mydata <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
#(1)
mod <- lm(admit ~., data =mydata)
#(2)
x <- mydata[, -1]
prd.x <- mod$coefficients[1] + mod$coefficients[2]*x$gre +
 			 mod$coefficients[3]*x$gpa + mod$coefficients[4]*x$rank
prd.cmp <- data.frame(actual = mydata[,1], pred = round(prd.x))
head(prd.cmp)
#(3)
mean(prd.cmp[,1] == prd.cmp[,2])


08 mlbench 패키지의 PimalndiansDiabetes 데이터셋은 17개의 변수로 당뇨 여부(diabetes)를 예측하기 위한 정보를 담고 있다. 17개의 변수들을 이용하여 당뇨 여부(diabetes)를 예측하는 로지스틱 회귀모델을 만드시오.

library(mlbench)
data (PimaIndiansDiabetes)    #데이터셋 불러오기

 

(1) set.seed(100)을 실행한 후 전체 데이터(관측값)에서 임의로 60%를 추출하여 train에 저장하고 나머지 40%는 test에 저장하시오.
(2) train의 데이터로 당뇨여부(diabetes)를 예측하는 로지스틱 회귀모델을 만들고 회귀식을 나타내시오. (당뇨여부(diabetes) 변수는 팩터 타입이므로 정수로 바꾸어야 모델을 만들 수 있다.)
(3) 회귀모델에 대해 test의 데이터를 입력하여 당뇨여부(diabetes)를 예측하시오.

(4) 예측한 값과 실제 당뇨여부를 비교하여 모델의 정확도(accuracy)가 어느 정도인지 확인하시오.

 

library(mlbench)
data("PimaIndiansDiabetes")
#(1)
set.seed(100)
idx.train <- sample(x = nrow(PimaIndiansDiabetes), 
 			size = round(nrow(PimaIndiansDiabetes) * 0.6),  replace = FALSE)
train <- PimaIndiansDiabetes[idx.train,]
test <- PimaIndiansDiabetes[-idx.train,]
#(2)
head(PimaIndiansDiabetes)
mod <- glm(diabetes ~., 
 	  data = data.frame(PimaIndiansDiabetes[, -ncol(PimaIndiansDiabetes)],
 	  diabetes = as.integer(PimaIndiansDiabetes[, ncol(PimaIndiansDiabetes)])))
#(3)
pred.test <- predict(mod, test[, -nrow(test)])

#(4)
mean(as.integer(test[,"diabetes"]) == round(pred.test))

 


09 mlbench 패키지의 Glass 데이터셋은 9개의 변수로 잔디의 종류(Type)를 예측하기 위한 정보를 담고 있다. 9개의 변수들을 이용하여 잔디의 종류(Type)를 예측하는 로지스틱 회귀모델을 만드시오.

library(mlbench)
data(Glass)    #데이터셋 불러오기

(1) set.seed(100)을 실행한 후 전체 데이터(관측값)에서 임의로 60%를 추출하여 train에 저장하고 나머지 40%는 test 에 저장하시오.
(2) train의 데이터로 잔디의 종류(Type)를 예측하는 로지스틱 회귀모델을 만들고 회귀식을 나타내시오. (잔디의 종류(Type) 변수는 팩터 타입이므로 정수로 바꾸어야 모델을 만들 수 있다.)
(3) 회귀모델에 대해 test의 데이터를 입력하여 잔디의 종류 (Type)를 예측하시오.
(4) 예측한 값과 실제 잔디의 종류를 비교하여 모델의 정확도(accuracy)가 어느 정도인지 확인하시오.

 

library(mlbench)
data(Glass)
#(1)
set.seed(100)
idx.train <- sample(x = nrow(Glass), size = round(nrow(Glass) * 0.6),  replace = FALSE)
train <- Glass[idx.train,]
test <- Glass[-idx.train,]
#(2)
mod <- glm(Type ~., data = data.frame(Glass[, -ncol(Glass)], 
 							Type = as.integer(Glass[, ncol(Glass)])))
#(3)
pred.test <- predict(mod, test[, -nrow(test)])
#(4)
mean(as.integer(test[,"Type"]) == round(pred.test))