ADP (R)

[Adp 실기 기출 풀이] 26회 - 베이지안 회귀분석(2nd)

멋쟁이천재사자 2023. 1. 14. 21:53

0. 들어가며

27회 ADP 실기를 76.7 점 (기계학습 28.7/통계학습 48)으로 간신히 합격했습니다.

불합격했던 첫 번째 도전인 26회 시험에 나왔던 문제를 복원하고, 연구하는 과정이 이번 27회 시험의 quantile regression 풀이에 큰 도움이 되었습니다.

 

베이지회귀 문제는 5+5=10 점 중 3+0=3점 정도 획득했을 것 같습니다.

 

시험 본 직후에 복기를 했던 글 입니다.

[Adp 실기 기출 풀이] 26회 - 베이지안 회귀분석

 

help.search 를 이용하여 bayesreg 라는 패키지를 찾았는데, 회귀계수는 대충 뽑았었고(추측 점수 3점) 예측에는 실패(추측 점수 빵점)했었습니다.

 

추측 점수가 3점이라고 한 이유는, 회귀분석 모델이 문제에서 원하는 것과는 거리가 있기 때문입니다.

문제에서는 역감마함수를 사전분포로 하라고 했는데,bayesreg 의 prior 나 model 옵션 중에 그에 맞는 값을 찾을 수 없습니다. MCMCpack 패키지도 살펴보았지만 문제에 딱 맞는 부분을 찾지 못했습니다.

 

예측은 predict 함수를 이용하여 시도했지만 실패했습다.

한 달 정도 연구한 끝에 얻은 결론이 workaround (쉬운 말로 표현하면 꽁수)입니다.

[R] length of 'dimnames' [2] not equal to array extent

그냥 하나의 행을 갖는 dataframe 을 인수로 넘기면 에러가 나니, 똑 같은 행을 두 개로 만들어 인수로 넘겨 결과를 보는 허접한 꽁수였습니다.

 

그런데 당연하면서도 놀라운 답을 우연히 알게 되었습니다.

직접 회귀식을 작성하고 독립 변수를 대입해서 예측하면 되지 않겠느냐는 의견을 채팅방(https://open.kakao.com/o/gJl1ud2c)에서 보았습니다.

가장 기본적인 방법을 떠올리지 못했던 것입니다. 감사합니다. 소니님~

 

베이즈회귀 문제를 education 과 prestige 변수로 income 을 예측하는 문제라고 하는 것을 보니,채팅방 질문자가 제 복원문제 글을 보았을 것 같습니다.

 

이번 답안에는 set.seed 를 추가하였습니다.

결과가 매번 달라진다는 점을 몰랐는데, 오랜만에 다시 풀어보니 결과가 실행할 때마다 달라지는 군요. MCMC 그러니깐 몬테칼로 시뮬레이션이 돌아가니 결과가 매번 달라지겠지요.

model = "normal" 그리고 prior = "ridge" 는 bayesreg 에서 제공하는 디폴트이며 더 적합한 것을 찾지 못해 그대로입니다. 이 부분은 다른 패키지를 찾거나 해야 하는 남겨진 숙제입니다.

 

1. 문제

7. car 패키지의 Prestige 데이터에서 독립변수를 education, prestige로 하여 종속변수 income을 예측하는 베이지안 회귀 모델을 생성하라. (실제 문제는 몸무게 키 허리둘레 3개 칼럼으로 구성된 weight.csv 파일을 읽어서 다음을 구하라.)


7-1 회귀계수를 소수점 2자리에서 반올림하여 구하라.

단, 회귀모델 수립시 burnin 은 1000 으로 하고 MCMC는 10000 이상 되게하고 prior 분포는 역감마함수를 사용하고 Improper XXX XXX XXX 를 사용해라 (조건을 엄청 많이 주었는데 잘 모르는 내용이라 기억이 부실합니다.)
7-2 주어진 식을 이용하여 education이고 17이고 prestige가 90 일 때 income을 예측하라

 

2. 풀이

7-1 회귀계수

education prestige 절편의 회귀계수는 각각 -73.23 181.33 -884.48 임

 

#데이터
data(Prestige,package = "carData")
head(Prestige)

#풀이
library(bayesreg)
set.seed(1234)
m <- bayesreg(
  income ~ education+prestige ,
  data=Prestige,
  model = "normal",
  prior = "ridge",
  n.samples = 1000,
  burnin = 1000,
  thin = 5,
  t.dof = 5
)

summary(m)

7-2 예측

education이고 17이고 prestige가 90 일 때의 income은 14190.31 임
17 * -73.23 + 90 * 181.33 -884.48