베이지안 통계 강의를 듣고 있다. 요즘 매사에 의욕이 없다. 금융치료를 받고 싶다… 이렇게라도 안 쓰면 정말 공부를 안 할 것 같아서 과제 제출하는 것이라도 마크다운이라도 작성하고 있다. 금융치료를 받고 싶다…

교재 : R과 JAGS 몬테칼로와 함께하는 베이지안 통계추론

Ch1

R 설치

파이썬을 쓰려면, 원하는 버전에 맞는 파이썬을 설치하고, 쉽게 코드를 작성할 수 있는 파이참도 설치해야하듯이 r 도 제대로 쓰기 위해서, r & r 스튜디오를 깔아야한다.

https://cran.r-project.org/mirrors.html 접속

Korea 에 뜨는 링크 하나 클릭하기

Download R for Linux 클릭

그러면 아래 명령어를 그대로 치라고 나온다 !

# update indices
apt update -qq
# install two helper packages we need
apt install --no-install-recommends software-properties-common dirmngr
# add the signing key (by Michael Rutter) for these repos
# To verify key, run gpg --show-keys /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc 
# Fingerprint: 298A3A825C0D65DFD57CBB651716619E084DAB9
wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
# add the R 4.0 repo from CRAN -- adjust 'focal' to 'groovy' or 'bionic' as needed
add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
apt install --no-install-recommends r-base

r 이 정상적으로 설치되었다 !

선택 영역_363

R 스튜디오 설치

R 스튜디오 다운페이지 접속

https://www.rstudio.com/products/rstudio/download

맞는 os,버전 찾은 다음에 설치하기 (혹은 우분투의 경우 바로 우분투 소프트웨어에서 검색해도 나오는 것 같다)

선택 영역_364

연습문제 1-1

  1. 학생들의 키와 체중 데이터

선택 영역_365

1-1-1. 이를 변수 height 와 weight 자료로 입력하여라

-> 연속형 자료 , 반복되는 자료가 아니므로 c 함수를 써서 일반 벡터를 만들어준다

height <- c(163,157,178,190,150,167,183,153,160,172,168)
weight <- c(57,42,67,85,40,55,72,43,55,67,69)

1-1-2. 각 학생의 BMI 지수를 계산하라. BMI = 체중 / 키 * 키 이다.

-> 이미 벡터 두 개를 잘 만들었으므로 공식에 맞게 연산자만 잘 작성하여 벡터 연산을 하면 된다

이 때 키는 m 단위이므로 다시 맞게 바꿔준다.

BMI <- weight/(height*height)
BMI <- BMI * 10000

1-1-3. height, weight, BMI 를 합쳐 physical 이란 data frame 을 만들어라

-> data.frame() 을 이용하면 된다.

physical <- data.frame(height,weight,BMI)

1-1-4. physical 에서 BMI<20 인 학생들의 자료를 따로 모아 under 에 저장하라.

-> 조건에 맞는 데이터만 추출하기 위해서 dplyr 패키지 설치

install.packages("dplyr")

-> dplyr 패키지 import (이제 filter 함수 이용 가능 !)

library(dplyr)

-> dplyr 패키지는 %>% 이라는 기호를 통해 함수를 나열하는 방식으로 코드를 작성

under <- physical%>% filter(BMI<20)

연습문제 1-3

1-3-1. 공부시간과 성적의 산점도를 그려라.

-> 쉽게 그래프를 그릴 수 있는 ggplot2 패키지를 설치한다

install.packages("ggplot2")
library(ggplot2)

-> 시간, 점수 변수 편의를 위해 만들어주기

time <- c(12,13,9,4,4,7,10,3,8,3,5,9,14,10,3,6,6,8,9)
score <- c(97,90,89,85,63,75,80,55,78,42,63,78,88,92,82,72,45,72,80)
study <- data.frame(time,score)

-> x축에 time 을, y 축에 score 을 놓은 배경을 만든다

ggplot(data=study,aes(x=time,y=score))

선택 영역_366

-> 잘 되는 걸 확인하면, 배경에 산점도 추가 ; ggplot2 패키지 함수들은 + 기호로 연결

geom_point()

ggplot(data=study,aes(x=time,y=score))+geom_point()

선택 영역_367

1-3-2. 공부시간을 x로, 점수를 y로 하는 선형회귀직선 y = b0 + b1*x 을 구하라. 참고로, weight b의 경우 (X’X)^-1*X’Y 이다

최소제곱법을 이용한 파라미터 추정 복습

선택 영역_368

bias <- rep(1,times=length(time))
X <-cbind(bias,time)
Y <- score
  • 행렬 연산 : %*%
  • 전치행렬 : t(x)
  • 역행렬 : solve(x)
b <- solve(t(X)%*%X)%*%t(X)%*%Y

1-3-3. (1-3-1) 의 산점도 위에 (1-3-2) 의 회귀식을 겹쳐그려라

result <- b[2]*time +b[1]
study[,"result"]<-result
ggplot(data=study,aes(x=time,y=score))+geom_point()+geom_line(aes(x=time,y=result))

선택 영역_369

연습문제 2-1

⭕️ ; 검사 결과 색맹

❌ ; 검사 결과 정상

P(색맹)= 0.002

P(정상)= 0.998

P(⭕️| 색맹 ) = 0.98

P(⭕️| 정상) = 0.001

2-1-1. 어떤 주민이 검사 결과 색맹일 때, 이 사람이 진짜 색맹일 사후확률을 구하여라. P(색맹 |⭕️) = ?

-> P(색맹 |⭕️) = P(⭕️| 색맹 ) * P(색맹) / P(⭕️| 색맹 )*P(색맹) + P(⭕️| 정상)*P(정상)

#s; 색맹 , n;정상
s <- 0.002
n <- 0.998
s_given_s <-0.98
s_given_n <-0.001
(s_given_s*s)/((s_given_s*s)+(s_given_n*n)) # 0.6626099

2-2-2. 위의 주민이 두 번째 검사를 실시한 결과 또 색맹. 사후확률을 다시 구하여라. P(색맹 |⭕️) = ?

-> prior : 0.6626099 로 바뀜 !

#s; 색맹 , n;정상
s <- 0.6626099
n <- 1-s
s_given_s <-0.98
s_given_n <-0.001
(s_given_s*s)/((s_given_s*s)+(s_given_n*n)) # 0.9994807

연습문제 2-4

일란성 쌍둥이 (M) ; 항상 같은 성

이란성 쌍둥이 (D); 성이 다를 수 있음

B = 남자아이 , G = 여자아이

쌍둥이 ; {BB,GG,(BG,GB) -> GB}

2-4-1. P(BB | M ) = ? , P(GG | M) = ? , P(GB | M) = ?

일란성 쌍둥이 ; {BB,GG,(BG,GB) -> GB}

  • p (BB | M)
1/2
  • P(GG | M)
1/2
  • P(GB | M)
0

2-4-2. P(BB | D) = ? , P(GG | D) = ? , P( GB | D) = ?

이란성 쌍둥이 ; {BB,GG,(BG,GB) -> GB}

  • P(BB | D)
1/4
  • P(GG | D)
1/4
  • P(GB | D)
1/2 #(BG,GB) -> GB

2-4-3. P(GG) 을 P(M) 의 식으로 표시하라. 참고 ; P(D) = 1-P(M)

P(GG) = P(GG|M)P(M) + P(GG|D)P(D)

= 1/2 P(M) + 1/4(1-p(M))

= 1/4(P(M)+1)