R-코드를 제출하시오. 파일명은 “이름_학번”으로 하시오. 이메일 주소는 입니다. 그리고 프로그램이 실행되지 않으면, 점수가 없습니다. 반드시 확인해보세요. 자료는 코드와 동일한 폴더에 넣고 작업하시오.


Question 1 (30점)

  1. (5점) 1에서 100까지 프린트 하는 for 루프를 짜시오.
for (i in 1:100) {
  print(i)
}
  1. (10점) 위의 예에서 3의 배수인 경우 “3의 배수”라고 표시하시오.
for (i in 1:100){ 
    if(i%%3 == 0) { 
        print('3의배수') 
    } 

    else { 
        print(i) 
} 
} 
  1. (15점) 위의 예에서 3의 배수인 경우 “3의 배수”, 5의 배수인 경우 “5의 배수”, 동시에 3과 5의 배수인 경우 “3,5의 공배수”라고 표시하시오.
for (i in 1:100){ 
  
    if(i%%3 == 0 & i%%5 == 0) { 
        print('3,5의 공배수') 
    } 
    else if(i%%3 == 0) { 
        print('3의 배수') 
    } 
    else if (i%%5 == 0){ 
        print('5의 배수') 
    } 
    else { 
        print(i) 
} 
} 
  1. (보너스 10점) sapply와 함수를 이용해서 위 루프를 짜시오.
count <- function(x) {
      
  if(x%%3 == 0 & x%%5 == 0) { 
        print('3,5의 공배수') 
    } 
    else if(x%%3 == 0) { 
        print('3의 배수') 
    } 
    else if (x%%5 == 0){ 
        print('5의 배수') 
    } 
    else { 
        print(x) 
      } 
  
}

sapply(seq(from = 1, to = 100, by = 1), count)

Question 2 (30점)

링크에 가서 fertility.xlsx를 다운 받아서 다음과 같은 작업을 하시오.

  1. (5점) 자료를 읽어들이시오.
fertility <- readxl::read_xlsx("fertility.xlsx", col_names = TRUE)
  1. (10점) 연도 값을 이용하여 tidy 데이터로 전환하시오. 전국에 대한 관측치는 제외하시오. 필요한 라이브러리를 장착하시오.
library(tidyverse)

df_tidy <- fertility %>% 
  filter(region != "전국") %>% 
  gather(year, fertility, -region)
head(df_tidy)
## # A tibble: 6 x 3
##   region     year  fertility
##   <chr>      <chr>     <dbl>
## 1 서울특별시 2000       1.27
## 2 부산광역시 2000       1.24
## 3 대구광역시 2000       1.38
## 4 인천광역시 2000       1.47
## 5 광주광역시 2000       1.64
## 6 대전광역시 2000       1.50
  1. (15점) 출산율의 분포가 연도별로 어떻게 변하는지 그리시오.
df_tidy %>% 
  ggplot(aes( x = fertility, color = year)) +
  geom_density()  +
  theme(legend.position = "bottom") 


Question 3 (40점)

  1. (5점) seed 를 1로 고정하고 다음과 같이 난수를 추출하시오. 평균 = 2, 표준편차 = 3 인 정규분포를 따르는 \(x\)를 10000개 생성하시오. 그리고, 평균 = 0, 표준편차 = 2 인 정규분포를 따른 \(e\)를 10000개 생성하시오.
library(tidyverse)

n.obs <- 10000

set.seed(1)
x <- rnorm(
  n = n.obs,
  mean = 2, 
  sd = 3
  )

e <- rnorm(
  n = n.obs,
  mean = 0, 
  sd = 2
)
  1. (5점) 위에서 생성된 난수와 아래의 식을 이용하여 \(y\)를 생성하시오.

\[ y_i = \beta x_i + e_i \] \[ \beta = 2 \]

beta <- 2

y <- beta * x + e
  1. (15점) \(\beta\)가 0에서 4사이의 다양한 값을 가질 때 각 \(\beta\)에 대해서 아래의 값을 계산하시오.

\[ SSR(\beta) = \sum_{i=1} ^{n} (y_i - \beta x_i)^2 \]

b <- seq(
  from = 0,
  to = 4,
  by = 0.1
  )

a <- sapply(b, function(i){
  sum.ehat <- sum((y - i*x)^2)
  return(sum.ehat)
})

df <- data.frame(
  beta = b,
  sum.of.residual = a
)
  1. (10점) 위에서 구한 \(SSR(\beta)\)에 대해서 아래와 같은 그림을 그리시오.
df %>% 
  ggplot(aes(x = beta, y = sum.of.residual)) +
  geom_point() +
  geom_line() +
  labs(
    x = expression(beta),
    y = expression("SSR("~beta~")")
  )

  1. (5점) 그리고 위에서 구한 \(SSR(\beta)\)를 최소로 만드는 \(\beta\)는 어떤 값인지 보고하시오. which.min()을 사용하시오.
df[which.min(df$sum.of.residual),1]
## [1] 2