베이지안 통계 강의를 듣고 있다. 요즘 매사에 의욕이 없다. 금융치료를 받고 싶다… 이렇게라도 안 쓰면 정말 공부를 안 할 것 같아서 과제 제출하는 것이라도 마크다운이라도 작성하고 있다. 금융치료를 받고 싶다…
교재 : 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 이 정상적으로 설치되었다 !
R 스튜디오 설치
R 스튜디오 다운페이지 접속
https://www.rstudio.com/products/rstudio/download
맞는 os,버전 찾은 다음에 설치하기 (혹은 우분투의 경우 바로 우분투 소프트웨어에서 검색해도 나오는 것 같다)
연습문제 1-1
- 학생들의 키와 체중 데이터
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))
-> 잘 되는 걸 확인하면, 배경에 산점도 추가 ; ggplot2
패키지 함수들은 +
기호로 연결
geom_point()
ggplot(data=study,aes(x=time,y=score))+geom_point()
1-3-2. 공부시간을 x로, 점수를 y로 하는 선형회귀직선 y = b0 + b1*x 을 구하라. 참고로, weight b의 경우 (X’X)^-1*X’Y 이다
최소제곱법을 이용한 파라미터 추정 복습
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))
연습문제 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)