Author: byun1114

  • Propensity score matching

    대조군과 실험군의 차이를 최대한 줄이기 위하여 사용하는 방법 중 하나. 다른 방법이 더 있는지는 모르겠으나 통계를 잘 모르는 사람이 하기에 쉬운 방법은 맞을 것이다. 물론, 처음에 진입 장벽은 존재한다. 다음 주 부터 적어도 이 기법은 확실히 이용해야 하는 절박한 마음에 공부를 해보았다.

    https://doi.org/10.17085/apm.2016.11.2.130
    대한마취과학회 학술지에 투고된 내용이다. 실전에 맞게 필요한 내용만 편집하였다. 🙂

    • PSM에서 score를 구해야 한다. 원래는 CART기법을 이용한 것 같으나, 쉽게 적용하는 방법은 이항(binary) 로지스틱 분석이다.
    • score를 구하는 방법을 알지 못해도 괜찮은 경우가 더 많다. R의 ‘MatchIt’ 패키지를 이용하는데, 통계 분석이 되는 곳은 이 패키지 정도는 반입이 되어 있거나 설치가 가능한 상태이다.
    • score를 구할 수 있으면 나중에 설명할 IPW (inverse probability weighting) 기법에 필요한 weight를 별도의 패키지 없이도 시도해 볼 수 있다.
    • standardized mean difference가 줄어들면 덜 이질적이라고 할 수 있다. 0.1미만이면 관습적으로 차이가 없다고 받아들여 질 수 있다고 한다. 다만, 음수값이어도 유효한지는 모르겠다.

    ‘MatchIt’ 패키지를 설치하면 이용할 수 있는 lalonde 데이터를 기준으로 설명해 본다. 실제 자료 이용할 경우에는 결과 변수는 0과 1로 설정해 두는게 좋다. 다음과 같이 기본적 옵션으로 실행할 수 있다.

    m.out1 <- matchit(treat ~ age + educ + race + nodegree +
                       married + re74 + re75, data = lalonde)
    summary(m.out1)

    이용해 볼 수 있는 옵션으로는 optimal matching 여부, N:N matching 에서 비율, exactm caliper 정도가 있다. 기본 옵션으로 matching 시켰을 때 standardized mean difference가 별로 줄어들지 않는 것이 있다면 좀 더 튜닝하는게 좋을 것 같다.

    매칭 후 해당 자료만 추출하여 추가 분석을 하려면 match.data() 를 이용한다.

    match.data(m.out1)
  • PMCMRplus

    정규 분포를 만족하지 않거나 ordinal 속성의 자료의 사후 분석까지 필요할 때 사용할 수 있다. 쉽게 말해서 ANOVA.

    패키지 설치 과정 중에서 라이브러리가 필요하다. 나의 경우에는 아래의 2개와 의존성이 있는 추가 패키지가 설치되었다.

    sudo apt install libgmp-dev libmpfr-dev
  • XGBoost without ‘caret’

    caret 없이 XGBoost (이하 XGB) 실행해보기. Hyperparameter 튜닝은 RF(random forest)에 비하면 훨씬 많다. 주로 참고한 블로그 링크는 다음과 같음.

    https://apple-rbox.tistory.com/6

    library('xgboost')

    xgboost()와 xgboost.train()은 기능은 거의 같다. xgboost.train()이 옵션이 좀 더 자세하다고 한다. 기본적으로 신경써 주어야 하는 것은 다음과 같다.

    • 데이터와 라벨이 분리가 되어야 한다.
    • 데이터는 매트릭스 형태로 지정되어야 한다.
    • 라벨은 벡터(쉽게 말해 정수형태)로 입력이 되어야 하는데 0부터 시작해야 한다.
    • cross validation (CV)을 위하여 xgb.cv() 함수를 제공해 주고 있다. 별도의 코딩이 없어도 된다는 것은 장점인데, 다른 모델과 비교해야 한다고 하면 단점이 될 수 도 있다.

    참고한 블로그에서는 iris 데이터를 이용하였다. 데이터를 분할한다.

    x = iris %>% select(-Species) %>% data.matrix
    y = iris$Species

    어짜피 CV 방법을 무엇인가는 지정해 주어야 한다. 여기서 N-fold CV를 이용하고 있으니까, 그냥 이걸 이용한다. early stopping 옵션도 있다.

    cv_model1 = 
    xgb.cv(
    data = x, 
    label = as.numeric(y)-1, 
    num_class = levels(y) %>% length,
    nfold = 5, 
    nrounds = 200, 
    early_stopping_rounds = 150,
    objective = 'multi:softprob',
    eval_metric = 'mlogloss',
    verbose = F, 
    prediction = T)

    xgboost 의 설명서(vignette)를 찾아보면 더 많은 옵션이 있는 것을 알 수 있다. 나는 아마 objective에 ‘binary:logistic’을 실제로 이용하지 않을까 싶다. eval_metric dms ‘error’나 ‘auc’를 이용할 것 같다.

    만들어진 모델로 결과를 예측하려면 predict()를 이용한다. 설명서의 예시는 다음과 같다.

    bst <- xgboost(data = train$data, label = train$label, max_depth = 2,
    eta = 0.5, nthread = 2, nrounds = 5, objective = "binary:logistic")
    pred <- predict(bst, test$data)

    하이퍼파라미터 튜닝 항목은 많다. eta, gamma, max_depth 등등등… 보통은 eta와 gamma를 이용하는 것 같다. 편하게 for 문을 이용한다. 이게 불편한 방법이지만 분석 환경을 고려해야 한다. 모델을 생성하면 evaluation_log 부분이 있는데 여기에서 수치를 추출한다. 앞에는 train 2개, 뒤에는 test 2개가 있다. 평균값을 선택한다.

    XGB에서는 변수 중요도를 확인할 수 있다고 한다. xgb.cv()는 결과를 받을 수 없고, xgboost의 모델을 이용해야 한다고 한다. 즉, CV로 평가된 결과가 아니라 원자료들로만 구성된 그런 모델만 쓸 수 있다는 의미.

    > xgb.importance(model = bst)
                       Feature       Gain     Cover Frequency
    1:               odor=none 0.67615471 0.4978746       0.4
    2:         stalk-root=club 0.17135375 0.1920543       0.2
    3:       stalk-root=rooted 0.12317236 0.1638750       0.2
    4: spore-print-color=green 0.02931918 0.1461960       0.2
  • 우상의 황혼, 프리드리히 니체, 최순영 옮김

    지난번에 읽은 빅터 프랭클의 죽음의 수용소에서를 읽어보지 니체의 말이 몇 번 언급되었다. 그 중에서 주로 언급된 내용이 있는 ‘우상의 황혼’을 읽어 보려고 했다.

    책은 얇으나 내용이 산만한 것 같아, 1/3도 겨우 읽었다. 그리고 그만 읽었다. 다행히도 ‘우상의 황혼’에 언급된 니체의 구절은 가장 앞쪽 부분에 위치하고 있었다. Sprüche (잠언 혹은 말) und Pfeile (화살) 이다. 8번에 그 유명한 구절인 나를 죽이지 않는 것은 나를 강하게 만든다가 있다.

    Was mich nicht umbringt, macht mich stärker

    사람이 삶에 대해 자신의 ‘왜’를 가지고 있다면, 거의 모든 ‘어떻게’에 대해서 견딜 수 있다. 이런 문구는 이 책에서는 12번에 있다고 되어 있는데, 실제 12번의 구절은 구글 번역기로 번역하면 이 뜻이 아닌 것 같다. 그리고 놀라운 사실은 이 구절의 유래를 찾기 위하여 수 많은 사람들이 해당 질문을 여러 곳에 남겼다는 사실이다.

    그래서 이 문장의 영어 표현을 찾아서 남겨둔다.

    He who has a why to live for can bear with almost any how.