전체 글 (312)

반응형

R - 질적변수의 교호작용을 고려한 회귀모델

/* 2017.5.21  */


데이터의 형식은 아래와 같습니다.


  case gram weeks smoke

1    1 3147    40     0

2    2 2977    41     0

3    3 3119    38     0

4    4 3487    38     0

5    5 4111    39     0

6    6 3572    41     0


gram : 태아의 몸무게 

weeks : 임신주차

smoke : 임신기간 중 흡연 여부 



임신주차와 흡연여부 별로 태아의 몸무게가 어떻게 변하는지 설명하는 회귀식을 찾는 것입니다. 임신주차가 길 수록 태아의 몸무게는 무겁고, 흡연을 안할 수록 태아의 몸무게가 무겁다는 것을 예상해볼 수 있습니다.



이 때, smoke는 질적변수이며, 회귀모델을 구축하는 것에는 두 가지 종류가 있을 수 있습니다.



첫 번째는 smoke라는 질적변수에의해 회귀모델의 절편만 차이가 나는 경우

두 번째는 smoke라는 질적변수에 의해 절편과 기울기가 둘 다 차이가 나는 경우 (교호작용을 고려한 경우)



즉, 흡연여부에 의해 임신주차에 따른 태아의 몸무게의 변화가 영향을 주는 것까지 고려한 경우입니다.  이처럼 한 변수가 다른변수의 종속변수에 대한 효과에 영향을 끼치는 것을 다른말로 교호작용이라고 합니다. 예를 들어 흡연을 하는 경우, 임신주차에 따른 태아 몸무게의 증가 폭이 완만할 수 있겠죠.



두 번째 경우에 대해서만 R을 이용하여 모델을 구축하여보겠습니다.




data <- read.csv("C:/태아몸무게.csv") head(data) # 교호작용도 고려한 질적변수 처리 model2 <- lm(gram~weeks*smoke, data=data) coef <- coefficients(model2) inter <- coef[1] weeks <- coef[2] smoke <- coef[3] # 절편의 차이 weeks_smoke <- coef[4] # 기울기의 차 y1 <- inter+weeks*0:50 # non-smoker y2 <- inter+(weeks+weeks_smoke)*0:50+smoke # smoker plot(data$weeks, data$gram) lines(y1, col="red") lines(y2, col="blue")





  • model2 <- lm(gram~weeks*smoke, data=data) 라고하면 weeks와 smoke의 모든 경우에 수를 고려하여 회귀식을 만들겠다는 것입니다.
  • 그러면 weeks의 회귀계수(beta1)와 smoke의 회귀계수(beta2), weeks*smoke(beta3)의 회귀계수가 생기게 됩니다.
  • beta2는 smoke효과로 인한 절편의 차이이며, beta3는 smoke효과로 인한 기울기의 차이입니다.
  • 일반적인 모델에서는 beta3가 없고 절편의 차이만 있는데 교호작용까지 고려하면 기울기의 차이도 고려하는 것입니다.


결과




붉은색은 smoke=0 즉 비흡연자이고, 파란색은 smoke=1 즉 흡연자입니다. 흡연자는 임신주차가 증가하더라도 태아의 몸무게가 완만하게 증가하는 경향을 볼 수 있습니다. 절편값은 흡연자가 더 높은 것을 볼 수 있는데, 이것은 의미가 없습니다. (0주차에 출산하는 경우는 없기 때문) 절편의 효과를 보고 싶다면 centering 기법을 사용하면 됩니다.




반응형

Tools/R

R - 단순회귀분석

2017. 5. 21. 01:16
반응형

R 단순회귀분석



단순회귀모형 만들기 코드



weight <- c(64,75.3,73,82.1,76.2,95.7,59.4,93.4,82.1,78.9,76.7,82.1,83.9,73,64.4,77.6) blood <- c(108,109,104,102,105,121,79,107,101,85,99,100,108,104,102,87) model <- lm(blood~weight) summary(model) # 회귀분석 결과 요약 anova(model) # anova table confint(model) # 회귀계수의 confidence interval




summary(model)의 결과



Residuals: ## 잔차정보 요약

     Min       1Q   Median       3Q      Max 

-17.0962  -2.9774   0.8138   5.5072  13.4990 


Coefficients:  ## 회귀계수의 추정과 회귀계수의 유의성 검정

            Estimate Std. Error t value Pr(>|t|)   

(Intercept)  61.8769    19.1890   3.225  0.00611 **

weight        0.5098     0.2462   2.070  0.05740 . 


F-statistic: 4.286 on 1 and 14 DF,  p-value: 0.0574      ## 모델이 유의한지에 대한 F-Test (분산분석)






anova(model)의 결과



Analysis of Variance Table


Response: blood

          Df Sum Sq Mean Sq F value Pr(>F)  

weight     1  368.8  368.80  4.2861 0.0574 .

Residuals 14 1204.6   86.05                 



  • ANOVA F-test의 p-value와 회귀계수에 대한 t-test의 p-value가 같다. (0.0574)
  • 또한 단순회귀분석에서는 모델이 유의한지에 대한 F-test의 p-value도 위의 p-value와 같다.



confint(model)의 결과



2.5 %     97.5 %

(Intercept) 20.7205466 103.033319

weight      -0.0183444   1.037845


  • 회귀계수의 confidence interval을 구할 수 있다.



Prediction



newdata <- data.frame(weight=95)
predict(model, newdata, interval="predict")
predict(model, newdata, interval="confidence")


  • weight=95일 때, blood의 값을 예측한다. 만약 여러개의 값을 예측하고 싶은경우는 weight=c(95,90,80, ...) 처럼 vector 형식으로 값을 주면 된다.
  • interval=prediction으로 하면 예측구간이고 interval=confidence로하면 신뢰구간이다.



Prediction 결과



 fit      lwr      upr

1 110.3032 87.77959 132.8269

  fit      lwr      upr

1 110.3032 99.74413 120.8623


  • fit이 예측값이고, lwr, upr은 각각 신뢰구간의 lower bound와 upper bound이다.
  • 위와 같이 예측구간과 신뢰구간을 구할 수 있다. 예측구간이 신뢰구간에 비해 넓다. 예측구간은 y에 대한 95% interval이고 신뢰구간은 E(y|x) 에 대한 95% interval이다. 따라서 예측구간이 신뢰구간에 비해 넓은 것이다.


반응형
반응형

회귀분석의 가정


회귀분석에는 데이터에 대하여 어떠한 가정을 합니다. 그 가정하에서만 회귀분석은 유효하다고 할 수 있습니다. 가정이 틀리면 아무리 분석을 하더라도 그것이 타당하지 않게 되는 것입니다.


회귀분석의 가정에는 아래와 같은 것들이 있습니다.


 

  1. 독립변수 X는 사전에 주어진 값으로 간주한다. 즉 독립변수는 미리 결정된 값이거나 고정된 값이다. 이를 비확률변수라고 한다.

  2. 독립변수 X는 측정오차가 없다고 가정한다.

  3. 독립변수 X 별로 Y의 부분모집단이 존재한다고 가정한다. 예를 들어 X=1일 때 Y의 부분모집단이 존재하며 이 부분모집단은 정규분포를 따른다.

  4. Y의 부분모집단의 분산은 같고 이를 라고 한다. (등분산성)

  5. Y의 부분모집단의 모평균은 일직선상에 있다. 이를 선형성의 가정이라고 한다.

  6. Y는 서로 독립이다. e ~ N(0,) 라고 정리할 수 있다. (독립성)



반응형
반응형

데이터분석 준전문가 시험


국가 공인 데이터 분석 관련 자격증으로 관련 정보는 이곳에서 얻을 수 있습니다.


준비기간 


준비 기간은 4주 정도 천천히 준비했던 것 같습니다. 1주일에 4시간 정도씩 공부해서 책을 쭉 한 번 훑고 시험을 보았습니다. 근데 저 같은 경우는 Data Science에 원래 관심이 있어서 특히 "데이터 분석" 파트는 상식선에서 풀 수 있었습니다. 그래서 잘 아는 부분은 정독을 안하고 빠르게 훑기만 해서 책을 빨리 볼 수 있었던 것 같네요. 원래 데이터 분석 분야에 관심이 있던 분들은 저처럼 빠르게 1회 훑고, 모르는 부분만 집중해서 보시면 무난하게 붙으실 수 있고, 원래 관심이 없던 분들은 한 2달 정도 하루에 2시간 정도씩 책 공부하시면 붙을 수 있을 거라 생각합니다. 



교재





http://www.yes24.com/24/goods/34764883?scode=032&OzSrank=1 이 책을 사용하였습니다.




결과




시험 볼 때 데이터 분석 기획에서 헷갈리는게 많아 과락 맞을까봐 걱정을 했는데 다행히 90점이 나왔네요. 데이터 이해는 무난하게 풀었던 것 같은데 60점... 그래도 과락은 면했습니다 ㅎㅎ



TIP


우선 데이터분석 준전문가 시험은 합격 기준은 총점 60/100이며, 각 파트별로 40/100 미만이면 과락 처리됩니다. 그래서 다른 파트에서 아무리 점수를 잘 받아도 한 군데서 과락이 뜨면 불합격입니다.. 그래서 원래 통계학이나 데이터 과학 분야를 잘 아시는 분들이라도 "데이터 이해" 파트와 "데이터 분석 기획" 파트는 조금 공부가 필요하다고 생각됩니다.  물론 아예 공부를 안하고 시험을 봐서 붙는 분들도 계시긴 하십니다. 하지만 안전하게 하려면 "데이터 이해" 와 "데이터 분석 기획"은 조금 공부를 하고 가시는게 안전빵일 것 같아요~


그리고 데이터 분석 초심자 분들이나 비 전공자 분들은 "데이터 분석" 파트가 조금 어렵게 느껴질 수도 있을 거라 생각을 합니다. 특히 회귀 분석이나 시계열 분석 같은 파트에서 결과 해석 부분은 헷갈리게 느껴지실 수 있으실 것 같은데요. 가장 빠르게 합격하는 방법은 "데이터 이해" "데이터 분석 기획" 파트에서 과락을 맞지 않을 정도로만 공부하고 데이터 분석 파트만 파는게 가장 합격을 높일 수 있는 방법인 것 같아요. 점수 배분이 20:20:60 으로 데이터 분석 파트가 가장 비중이 크기 때문에 다른 건 좀 못봐도 데이터 분석 파트에서 점수를 많이 받는다면 합격선은 무난히 넘길 수 있을 거라 생각됩니다.


반응형
반응형



validation set은 machine learning 또는 통계에서 기본적인 개념 중 하나입니다. 하지만 실무를 할때 귀찮은 부분 중 하나이며 간과되기도 합니다. 그냥 training set으로 training을 하고 test만 하면 되지 왜 귀찮게 validation set을 나누는 것일까요?


validation set을 사용하는 이유는 간단합니다. 바로 "모델의 성능을 평가하기 위해서" 입니다.  training을 한 후에 만들어진 모형이 잘 예측을 하는지 그 성능을 평가하기 위해서 사용합니다. training set의 일부를 모델의 성능을 평가하기 위해서 희생하는 것입니다. 하지만 이 희생을 감수하지 못할만큼 data set의 크기가 작다면 cross-validation이라는 방법을 쓰기도 합니다. cross-validation은 training set을 k-fold 방식을 통해 쪼개서 모든 데이터를 training과 validation 과정에 사용할 수 있게 합니다. 


그러면 모델의 성능을 평가하면 뭐가 좋을까요? 첫 번째는 test accuracy를 가늠해볼 수 있다는 것입니다. machine learning의 목적은 결국 unseen data 즉, test data에 대해 좋은 성능을 내는 것입니다. 그러므로 모델을 만든 후 이 모델이 unseen data에 대해 얼마나 잘 동작할지에 대해서 반드시 확인이 필요합니다. 하지만 training data를 사용해 성능을 평가하면 안되기 때문에 따로 validation set을 만들어 정확도를 측정하는 것입니다. 두 번째는 모델을 튜닝하여 모델의 성능을 높일 수 있습니다. 예를 들어 overfitting 등을 막을 수 있습니다. 예를 들어 training accuracy는 높은데 validation accuracy는 낮다면 데이터가 training set에 overfitting이 일어났을 가능성을 생각해볼 수 있습니다. 그렇다면 overfitting을 막아서 training accuracy를 희생하더라도 validation accuracy와 training accuracy를 비슷하게 맞춰줄 필요가 있습니다. 예를 들어 Deep learing을 모델을 구축한다면 regularization 과정을 한다거나 epoch을 줄이는 등의 방식으로 overfitting을 막을 수 있습니다. 


/* 2018/03/18 추가 */


validation test set과의 차이점은 test set은 모델의 '최종 성능' 을 평가하기 위해서 쓰이며, training의 과정에 관여하지 않는 차이가 있습니다. 반면 validation set은 여러 모델 중에서 최종 모델을 선정하기 위한 성능 평가에 관여한다 보시면됩니다. 따라서 validation set은 training과정에 관여하게 됩니다. 즉, validation set은 training 과정에 관여를 하며, training이 된 여러가지 모델 중 가장 좋은 하나의 모델을 고르기 위한 셋입니다. test set은 모든 training 과정이 완료된 후에 최종적으로 모델의 성능을 평가하기 위한 셋입니다. 만약 test set이 모델을 개선하는데 쓰인다면, 그건 test set이 아니라 validation set입니다. 만약 여러 모델을 성능 평가하여 그 중에서 가장 좋은 모델을 선택하고 싶지 않은 경우에는 validation set을 만들지 않아도 됩니다. 하지만 이 경우에는문제가 생길 것입니다. (test accuracy를 예측할 수도 없고, 모델 튜닝을 통해 overfitting을 방지할 수도 없습니다.)

반응형
반응형

직접 표준화


  • 비교하고자하는 집단의 연령별 측도(발생률, 유병률, 사망률 등)는 알려져있지만, 표준화된 인구에서는 어떨지 알아보고 싶을 때 사용한다.
  • 표준화된 인구 구조가 미리 정해져있어야한다. 
  • 표준화된 인구 구조를 정하는 방법에도 여러가지가 있는데, 한국이면 주로 한국 표준 인구를 사용한다. 또는 세계인구를 사용할 수도 있다.


방법 )


1. A집단과 B집단의 연령별 사망률을 알아보고자 할 때, 두 집단 별로 사망률을 표준 인구에 대입시켜 표준 인구에서의 연령별 기대 빈도수를 계산한다.

2. 연령별 기대 빈도수를 모두 합한 후, 표준 집단의 총 인구수로 나누어 표준화율을 구한다.

3. 두 집단의 표준화율을 비교하여 어떤 집단의 사망률이 더 높은지를 판단한다.



간접 표준화


  • 간접 표준화의 경우, 특히 어떤 집단의 발생률, 사망률 등이 표준 집단에 비해 높은지, 낮은지를 판단하기 위해서 사용한다.
  • 또는 두 집단의 발생률, 사망률 등을 비교할 때도 쓰인다.
  • 간접 표준화 방법실제 관찰된 사건 수기대사건 수비교하는 방법이다.
  • (실제 관찰된 사건 수) / (기대사건수) = SIR (또는 사망률일 경우 SMR) 이라고 한다.
  • SIR = Standardized Incidence Ratio, SMR = Standardized Mortality Ratio 의 약자이다.
  • 만약 어떤 집단의 발생률이 표준 집단에 비해 높은 경우 SIR > 1일 것이고, 낮은 경우 SIR < 1 일 것이다.
  • 이 SIR에 표준화 발생률을 곱하면 간접 표준화 발생률이 된다.
  • 즉, 간접표준화발생률 = SIR * 표준화발생률

직접 표준화 방법에 비해 간접표준화 방법이 가지는 방법의 이점

  • 특정 집단의 전체 율만 아는 경우
  • 연령별 율의 신뢰도가 적은 경우
  • 사망자수나 발생자 수가 워낙 적어 값이 불안정한 경우

위와 같은 경우에 간접 표준화 방법은 직접 표준화 방법에 비해 더욱 안정적이고 보수적인 값을 제공한다.

직접 표준화 방법과 간접 표준화 방법의 차이를 직관적으로 정리하면 직접 표준화 방법에서는 비교하고자하는 집단의 발생률을 표준 집단에 가져가서 표준집단에서 기대 발생자수를 구하고, 간접 표준화 방법에서는 표준 집단의 발생률을 비교하고자하는집단으로가져가 기대 발생자수를 구한다. 

직접 표준화 방법의 경우 비교하고자하는 집단의 발생률을 표준 집단으로 가져가는 것이기 때문에 비교하고자하는 집단의 발생률이 불안정하면 안된다. 예를 들어 비교하고자하는 집단의 사람 수가 너무 적다면, 예를 들어 희귀병이 3명중 1명이 발생하였으면 발생률이 0.33이 되어서 이 값은 불안정한 값이된다. 따라서 표본의 수, 발생자 수가 적다면 간접 표준화 방법을 쓰는것이 더 안정적이다. 


간접 표준화 방법 예시


그냥 보기에는 Area2가 사망률이 높아보인다. (5.1% vs 4.1%) 그러나 잘 보면 Area2가 전체적인 연령이 높은 것을 알 수 있다. 이 경우 간접표준화 방법을 이용하여 연령을 보정해보자.



표준 인구집단을 선정한다. 표준 인구집단은 많은 경우에 '대한민국 표준인구'를 사용하지만 이 경우에는 Area1+Area2를 통해 표준 인구를 구성한다. 이렇게 구한 표준 인구의 사망률은 4.6%이다.



Area1과 Area2의 연령별 기대 사망자수를 구한다. 기댓값은 (사람수)x(표준화사망률)로 구한다. 
Area1의 기대 사망자수는 37.79 명이고, Area2의 기대 사망자수는 54.21명이다.

따라서, 
Area1의 SMR = 41/37.79 = 1.08
Area2의 SMR = 51/54.21 = 0.94 이다. 

절대적으로는 Area2의 사람이 더 많이 죽었지만 표준화된 인구를 고려했을 때, Area2의 상대적으로 많이 죽었음을 알 수 있다.

마지막으로 간접표준화사망률을 구하면

Area1의 간접표준화사망률 = 4.6% * 1.08 = 5.0%
Area2의 간접표준화사망률 = 4.6% * 0.94 = 4.3%



참고

http://www.dartmouthatlas.org/downloads/methods/indirect_adjustment.pdf



반응형
반응형

이 포스트는 아래 포스팅을 참고한 포스팅입니다.

https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/


Jupyter Notebook


기존에는 IPython Notebook으로 알려졌던 Jupyter Notebook은 코드, 이미지, 분석 결과, 코멘트, 수식 등을 분석자가 "노트북"처럼 Keep할 수 있게하여 다른 사람들이 분석의 흐름을 읽기 쉽게 만들 수 있는 유연하고 강력한 툴입니다. Jupyter Notebook은 여러가지 언어를 지원합니다. (Python, R, Julia 등) 또한 어떤 컴퓨터에서든지 쉽게 호스팅할 수 있습니다. http나 ssh로 접속하기만 하면 됩니다. 또 무엇보다도 Jupyter Notebook은 무료입니다. IPython 프로젝트에서부터 시작된 Juypter Notebook는 Julia, Python, R의 앞 글자를 따시 지어졌고, 파이썬 이외의 여러가지 언어를 지원하기 위하여 시작되었습니다. 주피터에서 파이썬 코드를 실행할 때 내적으로는 IPython Kernel이 돌아가게 됩니다.


1. 키보드 단축키


Help > Keyboard Shortcuts에 가면 키보드 단축키들을 확인할 수 있습니다. 아시다시피 키보드 단축키는 개발에서 시간을 많이 단축해줍니다. 위 메뉴를 주피터가 업데이트될 때마다 확인하시면 좋은데, 키보드 단축키들이 자주 추가되기 때문입니다.


또는 Cmd + Shift + P (또는 Ctrl + Shift + P 리눅스, 윈도우의 경우) 을 누르면 대화창이 뜨는데 키보드 단축키들을 이름으로 검색해서 실행시킬 수 있습니다. 키보드 단축키가 생각나지 않으실 때는 이 기능을 활용하시면 좋습니다.


몇 가지 유용한 단축키롤 소개합니다. 


esc : command 모드로 변경한다.


command 모드 안에서

  • A : 현재 셀의 위에 새로운 셀을 추가한다.
  • B : 현재 셀 밑에 새로운 셀을 추가한다.
  • M : 현재 셀을 markdown 모드로 변경한다. 
  • Y : markdown 모드를 다시 code 모드로 변경한다.
  • D+D : 현재 셀을 삭제한다.
  • Enter : command 모드에서 edit 모드로 변경한다.
  • F : 코드를 find and replace 한다.
  • O : Output을 toggle한다.
shift + tab : 객체의 docstring(documentation)을 출력한다. 

복수의 셀을 선택하기
  • Shift J 나 Shift down(키보드 방향키)을 누르면 아래방향으로 복수의 셀을 선택할 수 있다. Shift K나 Shift Up을 누르면 위 방향으로 복수의 셀을 선택한다. 
  • 복수의 셀이 선택되면 마찬가지로 delete, copy, cut, paste, run을 할 수 있다. 
  • Shift M을 누르면 선택된 셀들을 merge 한다.

2. 변수를 이쁘게 출력하기


가장 널리쓰이는 방법은 print 문을 안 쓰고 그냥 변수명만 셀에 쓴 다음에 run을 하는 것입니다. 그러면 IPython Kernel이 해당 객체를 이쁘게 나타내주는데 예를 들어 pandas DataFrame을 출력할 때 유용한 방법입니다. 


덜 알려진 방법은 kernel 의 세팅을 바꾸면 여러개의 변수명에 대해서 output을 내줄 수 있다는 것인데

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
import pandas as pd


위와 같이 세팅하면


data = pd.DataFrame({'a':("A", "B","C","D","E","F","G"), 'b':(1,2,3,4,5,6,7)}) data.head() data.tail()

Out[11]:
ab
0A1
1B2
2C3
3D4
4E5
Out[11]:
ab
2C3
3D4
4E5
5F6
6G7


위와 같이 여러개의 statement가 있어도 그 statement의 수만큼의 output을 내줍니다. (세팅을 안 하게 되면 가장 마지막 output 만 나타내줍니다.)


~/.ipython/profile_default/ipython_config.py

 

일일이 세팅을 해주기 귀찮으면 위의 코드를


c = get_config()

# Run all nodes interactively
c.InteractiveShell.ast_node_interactivity = "all"

이렇게 바꾸어주면 일일이 코드상에서 세팅해주지 않아도 됩니다.



3. 라이브러리 도큐먼트를 쉽게 찾기


Help 메뉴에 가시면 Scipy, Numpy, Matplotlib, Pandas와 같은 흔히 쓰이는 라이브러이의 도큐먼트를 확인할 수 있습니다. 또한 코드상에서 ? 접두사를 붙여서 라이브러리의 도큐먼트를 확인할 수도 있습니다.


?str.replace()


Docstring:
S.replace(old, new[, count]) -> str

Return a copy of S with all occurrences of substring
old replaced by new.  If the optional argument count is
given, only the first count occurrences are replaced.
Type:      method_descriptor




반응형
반응형

SAS - Signed Rank Sum Test



Dataset


아래 데이터는 대두콩군과 천식군 내에 CD3+ T-cell의 개수를 나타낸 데이터이다.

대두콩군과 천식군의 CD3+ T-cell에 유의미한 차이가 있는지 알아보자.


Code


proc import datafile = '/folders/myshortcuts/myFolders/data/asthma.txt' out=asthma replace;
run;
proc univariate data =asthma normal;
run;
proc npar1way data=asthma wilcoxon;
 class group;
 exact wilcoxon;
 var x;
run;



결과



proc univariate 로 정규성 검정결과 표본이 정규분포를 따르지 않는다고 결론내린다. 또한 두 그룹이 독립적이므로 Wilcoxon rank sum test를 한다.




proc npar1way는 비모수 검정을 위한 프로시져이다. 결과는 위와 같다.

signed rank sum test의 귀무가설은 '그룹간의  값들의 중위수에는 차이가 없다.'이다.

p-value가 0.05보다 작으므로 유의수준 5% 내에서 귀무가설을 기각하고, 그룹간에 유의미한 차이가 있다고 결론 내린다. 



반응형
반응형

SAS를 통한 비모수 검정


1. Paired Sample에 대한 Sign Test와 Signed Rank Test 



위 데이터셋은 특정 공군부대에 배치된 14명 신병들의 치주에서 부착상실을 보인 위치들에 대한 백분율을 비교한 자료이다.

치료전(before)과 치료후(after)의 변화를 보고 해당 치료법이 부착상실을 치료하는 효과가 있는지를 평가해보자. 이 경우 한 사람에 대해 Before과 After를 측정했으므로 해당 sample은 paired 되어있다고 말한다.


two-related sample에 대한 비모수 검정은 sign test signed-rank test가 있다. 이 두 가지 검정을 모두 하는 PROC UNIVARIATE 프로시져를 사용한다. 


proc import datafile = '/folders/myshortcuts/myFolders/data/attachment.txt' out=attachment replace;
run;
data attachment;
 set attachment;
 diff = before-after;
run;
proc univariate data=attachment normal;
 var diff;
run


proc univariate 의 normal 옵션을 주면 data에 대한 정규성 검정을 한다. 정규성 검정의 결과를 보면 p-value < 0.05로 매우 작으므로 유의수준 5% 내에서 정규분포를 따르지 않는다. (p-value가 낮다는 것은 그만큼 귀무가설을 기각하는 쪽으로 힘이 실린다.) 표본이 정규분포를 따르지 않으므로 모수적 검정보다는 비모수적 검정을 하는 것이 좋다.

two-related sample에 대한 비모수 검정은 sign test와 signed-rank test가 있다.


univariate 내부에 var diff; 를 입력하면 diff에 대한 비모수 검정을 하게된다. (diff = before-after)

'부호'라고 표시된 부분이 sign test이고 '부호 순위'라고 표시된 부분이 signed-rank test이다.


sign test와 signed-rank test의 귀무가설은 diff의 중위수 = 0 이다. 이 때의 p 값은 sign test에서 0.0923이고 signed-rank test에서 0.0942 이므로 두 개의 검정 모두 유의수준 5% 내에서 귀무가설을 기각하지 못한다.




반응형
반응형


Data set



위의 Data set에서 age가 0~10일 때는 1, 10~20일 때는 2 ... 90~100 일 때는 9인 새로운 범주형 변수를 생성하고자 한다.


Code


/* 연령 category */
data workshop.data3(replace=yes);
    set workshop.data3;
    do i = 0 to 9;
        if age >= i*10 & age < i*10+10 then cage = i;
    end;
    drop i;
run;




Do end문과 if then 문을 통하여 위와 같이 간단하게 구현할 수 있다. 마지막으로 SAS 는 임시변수도 Data set 내부에 변수로 저장하므로 drop i; 를 통해 임시변수를 없애준다.




반응형
반응형