• Home

내가 쓰는 맥용 .Rprofile

금일 서울대학교 강좌를 진행하면서 필자 맥북의 .Rprofile공유를 요청하셔서 이렇게 올려본다.
아래 스크립트의 앞부분은 링크에서 설명을 하지만 맥에서 기본 그래픽 디바이스인 quartz디바이스의 한글 설정을 해주는 스크립트 이다.

그리고 마지막 라인은 자바 설정으로 KoNLP를 맥에서 사용할때 권장하는 설정 내용이다. 물론 다른 OS에서도 설정해주면 좋다. -Xmx8g부분은 본인의 시스템 메모리를 고려해서 적당하게 설정하면 된다.

stringsAsFactors 부분은 데이터를 읽어들일때 R이 임의로 문자열을 factor로 변환시켜 골탕을 먹이는 일이 종종일어나는데 R임의대로 변환을 시키지 말라는 명령어다.

#https://stat.ethz.ch/pipermail/r-sig-mac/2009-October/006731.html
setHook(packageEvent("grDevices", "onLoad"),
        function(...){
        if(capabilities("aqua"))
            grDevices::quartzFonts(
              sans =grDevices::quartzFont(rep("AppleGothic",4)),
              serif=grDevices::quartzFont(rep("AppleMyungjo",4)))
        grDevices::pdf.options(family="Korea1")
        grDevices::ps.options(family="Korea1")
        }
)
attach(NULL, name = "KoreaEnv")
assign("familyset_hook",
       function() {
            macfontdevs=c("quartz","quartz_off_screen")
            devname=strsplit(names(dev.cur()),":")[[1L]][1]
            if (capabilities("aqua") &&
                devname %in% macfontdevs)
                    par(family="sans")
       },
       pos="KoreaEnv")
setHook("plot.new", get("familyset_hook", pos="KoreaEnv"))
setHook("persp", get("familyset_hook", pos="KoreaEnv"))




options(prompt = "R > ")

options(stringsAsFactors=FALSE)

options(java.parameters=c("-Xmx8g", "-Dfile.encoding=UTF-8"))

Resampling으로 회귀계수 검정

re-sampling 방법으로 회귀모형 파라메터를 검정해보기로 한다. 개인적으로는 리샘플링 방법이 직관적이고 설명이 편한 장점이 있어서 자주 쓰고자 하는 소망을 가지고 있고 금번 포스팅도 그 일환이다. 무엇보다 우리 주변의 컴퓨팅 파워는 놀고 있으니 요즘들어 안쓸 이유가 없는 방법이라 생각한다. …

suppressPackageStartupMessages(library(UsingR))
suppressPackageStartupMessages(library(data.table))
suppressPackageStartupMessages(library(extrafont))

data(father.son)

coeffs <- data.table()

#2만번 re-sampling 
for(i in 1:20000){
  rfheigh <- sample(father.son$fheight)
  rsheigh <- sample(father.son$sheight)

  mdl <- lm(rfheigh ~ rsheigh)
  coeffs <- rbind(coeffs, data.table(inte=mdl$coefficients[1], b0=mdl$coefficients[2]))
}

plot(density(coeffs$b0), main="density plot of b0(H0)")

plot of chunk unnamed-chunk-1

xval <- seq(range(father.son$fheight)[1],range(father.son$fheight)[2], length=100)

rows <- as.data.frame(coeffs[sample(1:nrow(coeffs), 30)] )
plot(father.son, main="H0")

for(i in 1:30){
  lines(xval, rows[i, 'b0'] * xval + rows[i, 'inte'], col = "gray")
}

plot of chunk unnamed-chunk-1

#귀무 가설 공간에서 0.05% 미만으로 나올 극단적인 b0값은?
coeffsdec <- coeffs$b0[order(coeffs$b0, decreasing = T)]
coeffsdec[which.max(cumsum(abs(coeffsdec))/sum(abs(coeffsdec)) > 0.0005)]
## [1] 0.1064
rmdl <- lm(fheight ~ sheight, father.son)

rmdl$coefficients
## (Intercept)     sheight 
##     34.1075      0.4889

이미 b0는 0.4889로 귀무가설 공간에서의 극단적인 값(10000번중에 5번 미만)을 상회하는 값이 나와 b0추정치가 유의미하다는 것을 알 수 있다.

베이지언 책에 대한 이야기

뭔가 새로운걸 배울땐 여러 책을 구입해 겹쳐읽기를 하는 패턴으로 학습을 하곤한다. 이 방법의 장점은 같은 주제의 설명을 다른 저자로부터 들을 수 있다는 것이고 이 덕분에 빨리 제대로된 이해를 할 수 있게 된다. 

이번 전반기에 구입한 베이지언 책들은 크게 국내서와 해외서로 나눌 수 있는데 개인적으로 가장 만족감을 느꼈던 국내서 한권과 해외서 한권을 소개한다. 물론 개인의 여건에 따라 다른 책들이 더 의미있게 다가올 수 있을거라 생각하며 전적으로 개인적인 평임을 강조하는 바이다. 

국내서 한권은 오만숙 교수님의 베이지안 통계추론이다. 다른 베이지언 책과 유사하게 수식이 상당히 많으나 모두 필요한 설명이며, 적절한 코드 예시는 실제 구현을 하는데 큰 도움이 되었다.  필자는 이 책의 연습문제까지 풀어볼 정도로 한때 이 책을 끼고 살았으며 상당히 만족하면서 책을 탐독했다.  뒷 부분으로 갈수록 앞에서 느꼈던 간략하고 명확한 설명이 부족한 측면이 있었으나 그런 부분은 개인적으로 더 공부해야될 부분들이라 생각에 크게 신경쓰지 않았다.  베이지언 계층(Hierarchical)모델 이전까지의 기초를 확실하게 잡는데 가장 탁월한 책이라 생각한다. 기회가 된다면 교수님 강의도 들어보고 싶다는 강한 욕구도 느낄 수 있었다. 

외국의 경우도 베이지언 책에 대한 추천 논의가 있는데, 이 리스트에서 가장 많은 표를 얻은 Doing Bayesian Data Analysis를 본인 역시 추천한다. 

이 책의 경우 통계학 개론 정도만 뗀 사람이라도 차근차근 탐독한다면 충분히 섭렵할 만한 내용과 난이도를 가지고 있다. 그렇다고 책이 커버하는 영역이 한정적인 것은 절대 아니다. 대부분 베이지언에서 언급되는 내용은 모두 포함하고 있고, 특히나 jags나 Bugs 코드가 제공되고 있어 실제 코드레벨에서의 구현을 바로 해볼 수 있는 장점이 있다. 개인적으로는 수식이 주는 간결함과 명확함이 좋기도 하지만 실제 코드를 실행하고 데이터를 넣어보면서 체내화 되는 그 알고리즘의 느낌 역시 중요하다고 생각한다.  많은 내용을 쉽게 설명해 주려는 저자의 노력이 많은 부분에 숨겨져 있어 보는 내내 감동 비슷한 느낌을 받기도 한다. 

외서의 경우 많은 사람들이 추천하는 Gelman의 책은 정말 이쪽 영역의 바이블같은 느낌을 주기에 충분하나 연구자가 아닌 실무영역에서 베이지언을 사용하는데 너무 많은 내용을 포함하고 있는게 사실이다. 이 책이 주는 그 가치(특히 예제)가 정말 어마하다는 것을 알고 있으나 개념에 대한 직관적인 체내화를 하는데 너무 긴 시간이 걸리는 단점이 있다. 따라서 이 책은 베이지언에 대해서 특정 내용을 찾아볼 수 있는 레퍼런스 북 같은 역할을 하고 있다. 거의 베이지언에 대한 모든 것을 다룬 책이라 베이지언을 하다보면 반드시 옆에 두고 봐야될 책이라 생각하나 처음부터 이 책을 기반으로 공부하는건 아마도 큰 각오를 해야될 것이다. 

책이라 하는건 시간이 지나고 본인의 경험이 쌓여 가면서 선호도가 갈리는 특징을 가지고 있다. 따라서 지금 현재 자신에게 가장 맞는 책을 만나는게 뭔가를 처음 배울때 가장 중요한 부분이라 생각한다. 따라서 지금 올리는 글 조차도 내일이 되면 다른 느낌으로 다가올지 모르겠지만 뭔가를 배우는 사람 입장에서는 오히려 반겨야 될 상황이 아닐까 한다.