앞선 분석을 살펴보면 프림(FF_CREAM)의 섭취가 BMI지수(HE_BMI)에 영향을 미치는 것으로 보인다.



- 아래의 그림은 프림 섭취 빈도와 BMI지수의 상자그림을 표현한 것이다.

그림만으로는 추세의 여부를 확인하기 힘들어 보인다.



따라서 프림의 섭취 빈도가 BMI지수에 미치는 영향에 대한 회귀분석을 실시한다.


> summary(mdl)


Call:

lm(formula = HE_BMI ~ FF_CREAM, data = x)


Residuals:

    Min      1Q  Median      3Q     Max 

-8.9189 -2.5522 -0.4539  2.1444 18.2344 


Coefficients:

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

(Intercept) 23.58922    0.10966 215.114  < 2e-16 ***

FF_CREAM     0.05587    0.02065   2.705  0.00686 ** 

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 3.669 on 3224 degrees of freedom

Multiple R-squared:  0.002265, Adjusted R-squared:  0.001955 

F-statistic: 7.318 on 1 and 3224 DF,  p-value: 0.006861




1) 회귀계수의 검정 및 추정

- 회귀계수의 t검정 결과 p-value가 0.00686이기 때문에 BMI 지수에 대해 프림의 섭취빈도는 유의미한 영향을 미친다.

회귀계수의 추정값은 0.05587로 섭취빈도가 한 수준 증가할수록 BMI지수는 양 0.056만큼 증가한다. 이에 대해 산점도를 살펴보자.



- 위의 그림에서 빨간색 선은 추정한 회귀직선이다. 유의미한 선형추세를 가지지만 추정된 회귀계수는 아주 완만하다.


- 또한, 단순 선형회귀분석에서 설명변수에 대한 계수의 추정이 유의미하기 때문에 모형또한 유의미하다고 할 수 있다.(F값과 그 p-value 참고) 







2) 추정한 모형이 자료의 변동을 얼마나 설명하는가?(R-squared)

- R-squared 값이 0.002265로 아주 작은 것을 확인할 수 있다. 

만약 위의 산점도에서 모든 관측값이 추정한 회귀 직선(빨간 선) 위에 놓인다면 R-squared 값은 1이고 모형은 자료의 변동을 잘 설명한다고 할 수 있을 것이다.

하지만 위의 산점도를 보면 직선에서 많이 떨어져있는 값이 존재한다. 위에서 모형은 유의하지만 R-squared 값이 낮게 나온 이유는 이것 때문이다.







3) 잔차분석

(이미지를 클릭하면 확대해서 볼 수 있습니다.)



 - 왼쪽의 그림은 추정한 BMI지수와 잔차 사이의 산점도를 나타낸 것이다. 특정한 패턴을 보인다면 모형이 적절하지 않음을 나타낸다. 설명변수의 특성상 추정값은 단 9개의 범주로 나타날 수 밖에 없는 점을 고려하면 특정한 패턴을 보이지 않는다는 것을 확인할 수 있다. 단, 2786, 3028, 839에 해당하는 관측치들은 이상치일 수도 있음을 유의하자.


 - 오른쪽 그림은 수정된 잔차의 QQ plot을 나타낸 것이다. 정규성을 따르지 않는 것처럼보인다. 이는 앞선 분석에서도 고려했던 것이다. 모형해석에 주의를 요한다.



   만약 BMI지수의 log를 취한 값을 반응변수로 사용한다면 더 개선된 모형을 가질 수 있을 것이다. 이 경우 log(HE_BMI)에 대한 FF_CREAM의 계수의 추정값은 0.002464007이고 이 값을 다시 바꾸어주면 


> exp(mdl3$coefficients[2])

FF_CREAM 

1.002467 

  즉, 프림섭취빈도가 한 단위 증가할 수록 BMI지수는 1.002467만큼 증가한다는 것을 알 수 있다.







4) 결론

 - 프림 섭취여부는 BMI지수에 유의미한 영향을 미친다. 즉, 프림 섭취가 많을 수록 BMI지수가 증가하는 경향이 있다.

하지만 자료의 특성 상 각 섭취 빈도에서 BMI의 변동이 크다. 따라서 프림 섭취를 통한 BMI지수의 예측은 무의미할 것으로 예상할 수 있다.


 - 빈도수에 대해 정확한 회수로 재코딩하여 모형을 세우는 것 또한 한 가지 방법일 것이다. 두 모형 모두 유의할 것이므로 여기서는 다루지 않았다.

 - 우리는 특정 변수에 중요한 영향을 미치는 변수들을 찾고, 그들이 각각 목표로하는 변수에 어떻게 영향을 미치는지 파악하고, 나아가 이를 예측하기 위해서 회귀분석을 사용한다.


   하지만 만약 우리가 비만의 정도인 BMI 지수에 영향을 미치는 요인과 그 정도를 파악하고자 하는데 "BMI 지수는 커피를 마신 양의 세제곱을 한 값에 크림을 마신 양의 제곱을 한 것과 미약한 정도의 관련이 있습니다." 라고 이야기한다면 말하는 자신도 그것이 의미하는 것을 이해하기 힘들 것이다.


   그래서 가장 단순하게 생각할 수 있는 것은 단순한 선형 관계이다.

   단순한 선형 관계는 변수들 사이의 관계를 이해하기 쉽게 나타낼 수 있기 때문에 다소 정밀한 예측이 아니라도 많이 사용된다. (정밀도 또한 그렇게 나쁘지 않은 경우가 많다.)


   그렇게 해서 회귀분석을 수행하면 패키지에서 필요한 값들을 출력해준다. 남은 것은 이 값들을 해석하는 것이다. 여기서 어떤 변수가 유의한지, 그 변수에 대한 추정값은 무엇이며 추정값에 대한 표준오차는 어느정도인지, 모형은 적절한지 등을 확인할 수 있다.


   그 중에서 모형이 잘 적합되었는지 판단할 때 R-squared 또는 adjusted R-squared를 사용하고, 모형이 통계적으로 적절한지 판단할 때 F-통계량을 사용한다고 알려져있다.


   사실 이 내용으로 보았을 때, 그 의미가 잘 구분이 되지 않는다. 그냥 보면 R제곱 값이나 F값이나 다 모형이 적절한지 보는 것 같은데 왜 둘을 따로 쓸까? 

   특히 F값은 유의한 정도로 크지만 R-squared 값은 작은 경우는 무엇을 의미할까?


  결론부터 말하자면 두 값은 모형이 적절한지를 말해주는 값이지만 각각 의미하는 바가 다르다.  

  • F-통계량 값은 자유도로 조정된 설명된 변동과 설명되지 않는 변동의 비를 나타낸 것이다. 이 값은 결국 이 관계를 선형으로 볼수 있는가 없는가를 의미한다(즉, 회귀 계수가 유의한가?).
  • R-squared 값은 전체 변동에 대해 모형이 설명하는 변동의 비를 나타낸다. 이 값은 자료들이 우리가 설정한 회귀 직선 주위에 얼마나 밀집되어 있는지를 의미하는 것이다. 이 값이 낮다는 것은 선형에서 많이 퍼져있는 것이다.


   그래서 F값은 유의하지만, R-squared 값이 아주 낮은 경우에는 

1) X가 Y에 미치는 영향은 여전히 유의하다. 


2) 하지만 우리가 추정한 회귀식에서 각 값들의 분산이 커서 예측에 대해서는 신뢰하기 힘들다.

   라고 결론 지을 수 있겠다.



참고) 

http://blog.minitab.com/blog/adventures-in-statistics-2/how-to-interpret-a-regression-model-with-low-r-squared-and-low-p-values

 데이터를 살펴보면, 교과서를 제외한 대부분의 데이터는 결측값을 포함하고 있다.

실제로 처음 분석과제를 접했을 때 이 결측값을 어떻게 처리해야 할까? 에 대해서 많이 고민했고, 그에 대한 합리적인 결과를 내리지 못했던 것 같다.

지금도 머리 속에 정확하게 결측값을 어떻게 다루어야 한다는 체계는 잡히지 않았으나, 이 때까지 생각한 바를 조금 정리해볼 것이다.


< 특정 참고서에 있거나, 연구를 통해 밝혀진 내용이 아닌 뇌피셜임을 밝힙니다! >

   틀린 내용이 있다면 건설적인 피드백을 부탁드립니다.

====================================================================



0. 정확한 예측이 필요한 것이 아니다.

  - 원하는 변수에 대한 (통계적) 예측은 정확할 수 없다. 그래서 대부분의 통계 방법은 (이론적으로) 오차를 최소한으로 하는 방법을 채택한다.


    결측값을 보정하는 것도 이러한 관점에서 접근해야 한다고 생각한다. 우리가 하는 분석은 적절한 insight를 얻거나 Target을 적절히 예측하기 위함인데, 결측값에 대한 보정값으로 예측한 것이 맞는 지 알 수 없는 상황에서 우리가 선택할 수 있는 것은 오차를 최소로 하는 방안일 것이다.


    이러한 관점에서 결측값을 평균(연속형 자료), 최빈값(범주형 자료), 중앙값 등으로 보정하는 것은 합리적이다.


    특히 결측값의 비율이 낮을 때, 이런 방법으로 보정하는 것은 (시간이라는) 비용을 절약할 수 있는 좋은 방법일 것이다.


    당연히 변수에 대한 사전 지식을 가지고 있어 이를 채울 수 있는 경우 (주로 전문가의 자문을 구한다던가...)에는  이것이 오차를 최소로하는 방법이 될 수도 있다. 이렇게 우리는 오차를 최소로 하면서 해당 관측값이 가지는 다른 변수의 정보를 추가해서 모형을 구축할 수 있다.


    중요한 것은 결측값을 정확하게 예측하기 위해 많은 시간을 들이는 것이 과연 필요한 것인지가 중요한 것 같다. 최대한 자료를 끌어모아 결측값을 보정하면 오차를 더욱 줄일 수 있겠지만, 평균이나 최빈값으로 대체했을때의 오차에 비해 그 차이가 그리 크지 않을 수도 있다.






1. 결측 자체가 의미를 지니는가?

  - Kaggle의 House Prices data는 부동산 거래 정보 데이터에서 부동산 가격을 예측하는 competition이다. 여기서 데이터는 약 3,000개의 관측값과 80여개의 변수로 구성되어있다. 처음 데이터를 살펴볼 때, 결측값의 비율을 살펴보았다. PoolQC는 수영장의 품질을 의미하는데 이 변수는 약 2900개의 결측값을 가지고 있었다. 처음에는 결측값의 비율이 너무 높아서 이 변수를 사용할 수 없을 것이라고 생각했지만, 대부분의 가구가 수영장을 가지고 있지않기 때문에 이 값은 사실 상 "수영장을 가지고 있지 않다."를 의미하는 결측이였다. 


    이처럼 결측 자체가 어떤 의미를 가지는 경우가 존재하기 때문에, 결측의 비율이 어떻든 그 의미와 형태를 고려해보는 것은 중요하다.







2. MICE algorithm(?)의 효율성 or 신뢰성



 - 지난 번에 회의한 내용을 토대로 집단을 규정하고 그에 대한 검정을 실시할 것이다.




  1. 데이터 구성

    1) 원시자료 : 전과 동일하게 제7기 1차년도 국민건강영양조사 데이터를 활용

    2) 변수는 다음 게시글과 같다.
        http://statart.tistory.com/29 





  2. 그룹 규정 & 새로운 데이터 셋 소개

    1) 새로운 그룹변수 지정

  3. 구분 

    내용 

    코딩 

     control

    커피를 거의 마시지 않는 집단 

     FF_COFFEE==1

     coffee

    프림과 설탕을 추가하지 않은 커피만 마시는 집단 

     FF_COFFEE > 1

     FF_CREAM == 1

     FF_SUGAR == 1

     mixed

    프림과 설탕이 모두 포함되어있는 커피만 마시는 집단 

     FF_COFFEE == FF_CREAM

     FF_COFFEE == FF_SUGAR 


    위의 조건을 모두 만족하지 않는 관측값들(discard)은 대상에서 모두 제외한다.
    빈도 수는 다음과 같다.
       coffee control   mixed discard 
          942     401    1203     680 
    해당 그룹의 변수명을 그룹을 뜻하는 grp로 둔다.

    2) 데이터 셋 소개
      - 검정을 위해 추려낸 데이터 셋은 다음과 같다.
         HE_BMI  HE_obe FF_COFFEE FF_CREAM FF_SUGAR    grp
      2 21.25836      2         8               8        8         mixed
      3 26.76157      3         7               1        1         coffee
      4 23.26214      2         7               7        7         mixed
      5 18.54905      2         9               1        1         coffee
      6 21.05693      2         9               1        1         coffee
      7 28.43173      3         9               1        1         coffee





3. 데이터 살펴보기
  1) boxplot 
     - Y축은 HE_BMI를 나타낸다.
     - control 집단은 coffee와 mixed집단에 대해 차이가 있어보인다.



  2) histogram
     - 각 집단은 비슷한 분포를 따르는 것으로 보인다.
     - 또한, 정규성에서 크게 벗어나지 않는 것으로 보인다.







4. 검정

  1) ANOVA
    (1) 등분산검정
       - 집단별 분산의 차이가 유의미하다면 분산분석의 결과를 신뢰할 수 없다.
         따라서 bartlett의 등분산 검정을 실시한다.

> bartlett.test(HE_BMI~grp, data)

        Bartlett test of homogeneity of variances

data:  HE_BMI by grp
Bartlett's K-squared = 0.77593, df = 2, p-value = 0.6784

       - p-value가 0.6784로 귀무가설을 기각할 수 없다.
         따라서 집단별 등분산 가정을 만족한다. 이제 분산분석을 실시한다.


    (2) ANOVA

> summary(anova)

              Df Sum Sq Mean Sq F value   Pr(>F)    
grp            2    299  149.30   11.02 1.72e-05 ***
Residuals   2543  34453   13.55                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

       - F-값이 11.02이고 p-value는 0에 아주 가까운 값을 갖는 것을 확인할 수 있다.
         따라서 집단 별 HE_BMI의 평균차이가 유의미하다.


    (3) 사후 검정

> scheffe.test(anova, "grp", group=TRUE, alpha=0.05, console=TRUE)

Study: anova ~ "grp"

Scheffe Test for HE_BMI 

Mean Square Error  : 13.54831 

grp,  means

          HE_BMI      std    r      Min      Max
coffee  23.87418 3.728651  942 14.72621 39.54818
control 23.03551 3.594389  401 15.21665 37.07538
mixed   24.02228 3.671507 1203 15.78353 41.41637

Alpha: 0.05 ; DF Error: 2543 
Critical Value of F: 2.999264 

Groups according to probability of means differences and alpha level( 0.05 )

Means with the same letter are not significantly different.

          HE_BMI groups
mixed   24.02228      a
coffee  23.87418      a
control 23.03551      b

      - 통제집단은 커피를 마신 집단과 유의미한 차이가 있다.
      - 하지만 커피만 마신 집단과 프림과 설탕을 모두 마신 집단 간의 차이는 유의미하지 않다.





  2) 적합도 검정
    (1) 카이제곱 적합도 검정
        - 카이제곱 적합도 검정은 두 범주형 변수 사이의 연관성을 파악하는 통계적 기법이다.
          이를 위해서 HE_BMI 변수 대신 HE_obe 변수를 사용할 것이다.
          HE_obe 변수는 HE_BMI 변수를 일정한 기준에 대해 구간화한 변수이다.
          검정의 결과는 다음과 같다.

 1

 HE_BMI < 18.5

 저체중 

 2

 18.5 < HE_BMI < 25 

 정상 체중

 3

 25 < HE_BMI

 비만


> chisq.test(data$HE_obe, data$grp)

        Pearson's Chi-squared test

data:  data$HE_obe and data$grp
X-squared = 20.376, df = 4, p-value = 0.0004209
        - p-value가 0.05보다 작기 때문에 귀무가설을 기각한다.
          따라서 집단과 비만 여부는 관련이 있다.
          위의 ANOVA를 통해 통제집단과 그 외의 집단의 차이가 유의미함을 확인했다.
          동일한 결과를 지지함을 확인할 수 있다.

         이제 통제집단을 제외한 coffee와 mixed 두 집단을 비교해볼 것이다.

> chisq.test(data$HE_obe[w], data$grp[w])

        Pearson's Chi-squared test

data:  data$HE_obe[w] and data$grp[w]
X-squared = 4.5854, df = 2, p-value = 0.101

        - p-value가 0.101로 0.05보다 크다. 즉, 귀무가설을 기각할 수 없다.
          통제집단을 제외했을 때, 집단과 비만 여부는 관련이 있다고 할 수 없다.


    (2) 빈도표와 모자이크 플랏을 이용한 시각화
        - 빈도표
    coffee control mixed
  1     34      30    54
  2    603     265   717
  3    305     106   432








        - mosaicplot

       a. 통제집단의 관측도수는 다른 집단에 비해 적다.

       b. 통제집단은 비교적 저체중이 많다.

       c. coffee집단과 mixed 집단은 정상과 과체중을 합한 비율은 거의 비슷한다.

       d. 과체중인 관측값의 수는 통제집단, coffee, mixed 순으로 점점 증가하는 것처럼 보인다.






5. 결론

    - 검정의 결과, 커피의 섭취가 비만도에 영향을 미치는 것을 확인할 수 있다.

       즉, 커피를 섭취한 집단은 통제집단에 비해 체중이 높은 것을 확인할 수 있다.


    - 하지만 커피만 섭취하는 집단과 프림 및 설탕을 함께 섭취하는 집단 간의 차이가 있다고 할 근거는 없다.


    - 마지막의 mosaic plot을 보면 어느정도 증가하는 추세는 확인할 수 있으나, 이는 엄밀한 근거가 되기는 힘들어보인다.

 - FF_COFFEE, FF_CREAM, FF_SUGAR : 변수를 전처리해서 집단을 3가지로 재분류


1) control : 커피를 거의 마시지 않는 집단

               데이터에서는 FF_COFFEE==1 에 해당하는 집단


2) coffee : 다른 성분을 추가하지 않고 커피만 섭취하는 집단

              데이터에서 1이 아닌 FF_COFFEE값이 존재하지만, FF_CREAM과 FF_SUGAR는 입력되어 있지 않은 경우(또는 1(거의안함)으로 분류된 경우) 해당 집단으로 분류


3) mixed : 커피에 프림과 설탕이 모두 포함되어있는 집단

              데이터에서는 FF_COFFEE, FF_CREAM, FF_SUGAR가 모두 동일한 관측값을 해당 집단으로 분류


  - 이에 해당하지 않는 관측값은 모두 제외한다.

    ex) FF_COFFEE와 FF_CREAM, FF_SUGAR가 일치하지 않는 관측값 등은 모두 제외


1. 이 데이터 셋에 대해 HE_BMI를 ANOVA 및 사후분석 처리

2. 또는 적합도 검정(HE_OBE)

3. HE_BMI를 타겟으로 하는 회귀분석 유도하기

* 커피 섭취는 우리가 생각하는 비만도(BMI 지수) 에 영향을 미칠까?



1. 데이터 형성

- 원시자료 : 국민건강영양조사 제7기 1차년도 조사자료 


- 필요한 변수 선택 : 


names(data)

 [1] "ID"        "HE_BMI"    "HE_obe"    "FF_COFFEE" "FA_COFFEE" "FS_COFFEE"

 [7] "FF_CREAM"  "FA_CREAM"  "FF_SUGAR"  "FA_SUGAR"  "FQ_COFFEE"

  # ID 변수는 제거해도 상관 없음.



- 변수 처리와 결측치 파악(sas data file을 불러왔기 때문에 결측치에 대한 입력이 필요하다.)

> data$FF_COFFEE <- ifelse(FF_COFFEE==99, NA, FF_COFFEE)

> data$FA_COFFEE <- ifelse(FA_COFFEE==99 | FA_COFFEE==88, NA, FA_COFFEE)

> data$FF_CREAM <- ifelse(FF_CREAM==99, NA, FF_CREAM)

> data$FA_CREAM <- ifelse(FA_CREAM==99 | FA_CREAM==88, NA, FA_CREAM)

> data$FF_SUGAR <- ifelse(FF_SUGAR==99, NA, FF_SUGAR)

> data$FA_SUGAR <- ifelse(FA_SUGAR==99 | FA_SUGAR==88, NA, FA_SUGAR)


# 결측치 파악하기

> apply(data, 2, function(x) sum(is.na(x)))

       ID    HE_BMI    HE_obe FF_COFFEE FA_COFFEE FS_COFFEE  FF_CREAM  FA_CREAM 

        0       145       145         0       424      3065         0      1301 

 FF_SUGAR  FA_SUGAR FQ_COFFEE 

        0      1278         0


FF_ : (커피, 프림, 설탕 등을) 마시는 주기

FA_ : (커피, 프림, 설탕 등을) 1회 마실 때 첨가하는 양

FS_COFFEE : 하루에 커피를 몇 잔 마시는가? (3잔 이상인 대상자만)

  * 각 변수의 의미를 보면 FA와 FS는 결측이 존재할 수 있음을 알 수 있다.

  * 다행히 FF_에는 결측이 전혀 존재하지 않는다.






2. 탐색


  1) 상자그림을 보고 수준이 올라갈수록 중심위치의 이동이 있을거라고 예상해볼 수 있다.


  2) 정규성을 확인


      ANOVA test는 정규성에 대해 꽤 robust한 분석이다. 

      따라서, ANOVA를 수행하는데 큰 문제는 없을 거라고 생각해볼 수 있다.


  3) 등분산성 확인

> bartlett.test(HE_BMI~FF_COFFEE, data)


Bartlett test of homogeneity of variances


data:  HE_BMI by FF_COFFEE

Bartlett's K-squared = 7.3375, df = 8, p-value = 0.5007


> bartlett.test(HE_BMI~FF_CREAM, data)


Bartlett test of homogeneity of variances


data:  HE_BMI by FF_CREAM

Bartlett's K-squared = 7.0387, df = 8, p-value = 0.5325


> bartlett.test(HE_BMI~FF_SUGAR, data)


Bartlett test of homogeneity of variances


data:  HE_BMI by FF_SUGAR

Bartlett's K-squared = 8.9488, df = 8, p-value = 0.3466


      등분산성을 확인하기 위해 bartlett.test를 수행했다.

      이 때의 귀무가설 H0는 "자료가 등분산을 따른다." 이다.

      유의수준이 0.05라고 했을 때, 세 종류 모두 귀무가설을 기각할 수 없다.

      즉, 등분산의 문제 없이 ANOVA를 수행할 수 있다.






3. 분산분석


> aov_coffee <- aov(HE_BMI~FF_COFFEE, data)

> aov_cream <- aov(HE_BMI~FF_CREAM, data)

> aov_sugar <- aov(HE_BMI~FF_SUGAR, data)


> summary(aov_coffee)

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

FF_COFFEE      8    518   64.73   4.845 5.92e-06 ***

Residuals   3217  42980   13.36                     

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

145 observations deleted due to missingness


> summary(aov_cream)

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

FF_CREAM       8    239   29.93   2.226  0.023 *

Residuals   3217  43258   13.45                 

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

145 observations deleted due to missingness


> summary(aov_sugar)

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

FF_SUGAR       8    353   44.14   3.291 0.000954 ***

Residuals   3217  43144   13.41                     

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

145 observations deleted due to missingness

     세 가지 결과 모두 귀무가설을 기각한다.

     ANOVA의 귀무가설 H0는 "각 집단의 모평균이 동일하다."를 지지하기 때문에 커피, 프림, 설탕은 각각 BMI 지수에 영향을 끼친다고 할 수 있다.





4. 사후분석

     

* 집단 수가 많고, 집단별 표본 수가 동일하지 않기 때문에 Scheffe의 방법을 사용해 사후분석을 실시해보자.


  1) FF_COFFEE

> scheffe.test(aov_coffee, "FF_COFFEE", group=TRUE, alpha = 0.05, console = TRUE)


Study: aov_coffee ~ "FF_COFFEE"


Scheffe Test for HE_BMI 


Mean Square Error  : 13.36014 


FF_COFFEE,  means


    HE_BMI      std   r      Min      Max

1 23.03551 3.594389 401 15.21665 37.07538

2 23.51493 4.059175  73 16.92901 36.08853

3 23.73982 3.939739  87 17.73744 35.37101

4 23.18744 3.649865 113 14.72621 38.37715

5 23.84708 3.875124 291 15.87577 38.11602

6 23.89695 3.900598 127 16.73081 39.54818

7 23.65714 3.585331 642 15.78353 38.22888

8 24.09519 3.608761 816 16.29307 41.99118

9 24.27338 3.584534 676 16.11203 37.81432


Alpha: 0.05 ; DF Error: 3217 

Critical Value of F: 1.94128 


Groups according to probability of means differences and alpha level( 0.05 )


Means with the same letter are not significantly different.


    HE_BMI groups

9 24.27338      a

8 24.09519      a

6 23.89695     ab

5 23.84708     ab

3 23.73982     ab

7 23.65714     ab

2 23.51493     ab

4 23.18744     ab

1 23.03551      b

     - 3가지 그룹으로 유의한 차이를 분류할 수 있다.

     - 전반적으로 더 많은 양의 커피를 섭취할 수록 BMI 지수는 증가하는 것을 확인할 수 있다.



  2) FF_CREAM

> scheffe.test(aov_cream, "FF_CREAM", group=TRUE, alpha = 0.05, console = TRUE)


Study: aov_cream ~ "FF_CREAM"


Scheffe Test for HE_BMI 


Mean Square Error  : 13.44667 


FF_CREAM,  means


    HE_BMI      std    r      Min      Max

1 23.70397 3.672077 1241 14.72621 39.54818

2 23.42212 3.888203  141 16.38891 36.08853

3 23.91030 3.934407  153 16.29307 41.99118

4 23.72214 3.534492  183 16.23205 38.37715

5 23.88857 3.898432  252 15.87577 38.11602

6 23.36210 3.715863   60 17.39854 33.34422

7 23.59222 3.526478  428 15.78353 41.54292

8 24.15068 3.588591  399 16.89932 41.41637

9 24.38576 3.584984  369 16.35906 36.48608


Alpha: 0.05 ; DF Error: 3217 

Critical Value of F: 1.94128 


Groups according to probability of means differences and alpha level( 0.05 )


Means with the same letter are not significantly different.


    HE_BMI groups

9 24.38576      a

8 24.15068      a

3 23.91030      a

5 23.88857      a

4 23.72214      a

1 23.70397      a

7 23.59222      a

2 23.42212      a

6 23.36210      a

      - group을 분류할 수 없다.

      - ANOVA의 결론은 평균 차이가 유의하다는 것을 지지하지만 사후검정의 결과 그 차이가 크지 않은 것으로 보인다.


      - 일반적으로 프림의 섭취가 많아 질수록 비만도가 높아질 것이라는 통념을 고려해보면, 이에 대해서는 자료의 구성과 분석의 타당성을 다시 한 번 생각해볼 필요가 있다. *



  3) FF_SUGAR

> scheffe.test(aov_sugar, "FF_SUGAR", group=TRUE, alpha = 0.05, console = TRUE)


Study: aov_sugar ~ "FF_SUGAR"


Scheffe Test for HE_BMI 


Mean Square Error  : 13.41135 


FF_SUGAR,  means


    HE_BMI      std    r      Min      Max

1 23.56415 3.726787 1218 15.21665 39.54818

2 23.31761 3.828601  128 16.73081 36.08853

3 23.93112 4.010568  137 16.23205 41.99118

4 23.90935 3.329878  146 14.72621 35.13736

5 24.06747 3.675423  248 15.87577 38.11602

6 23.88976 3.626571   60 17.39854 33.34422

7 23.61175 3.495242  449 15.78353 37.28467

8 24.20216 3.696068  432 16.89932 41.54292

9 24.40664 3.543703  408 16.35906 36.48608


Alpha: 0.05 ; DF Error: 3217 

Critical Value of F: 1.94128 


Groups according to probability of means differences and alpha level( 0.05 )


Means with the same letter are not significantly different.


    HE_BMI groups

9 24.40664      a

8 24.20216     ab

5 24.06747     ab

3 23.93112     ab

4 23.90935     ab

6 23.88976     ab

7 23.61175     ab

1 23.56415      b

2 23.31761      b

      - FF_COFFEE와 유사하게 세 가지 그룹이 형성되었으며, 설탕의 섭취가 많은 집단이 BMI 지수 또한 높은 것을 확인할 수 있다.







1) factor의 수준이 많아질수록 검정은 불완전해진다.

    - 9개의 수준을 다른 기준에 의하여 묶어보고, 더 작은 수준을 가지고 다시 분석해볼 필요가 있다.


2) scheffe 검정 

   - FF_CREAM 변수의 경우 분산분석의 결과는 유의했지만, 사후 검정에서 집단을 분류할 수 있었다. 그 이유에 대해서 다시 살펴볼 필요가 있다.

   참고) http://gofood.tistory.com/424 *


3) 범주형태의 자료(HE_OBE)를 사용한 독립성 검정을 실시하는 것도 방법일 수 있다.


 * 이 글은 

    http://thestatsgeek.com/2013/09/28/the-t-test-and-robustness-to-non-normality/

   의 글을 보고 참고한 내용을 작성한 포스트입니다.


* 항상 T-test를 할 때 궁금한 점이 있었다.

  1) 대표본인 경우 sample의 정규성을 고려하지 않아도 좋은가? (중심극한정리에 의해)

  2) 중심극한정리는 sample의 수가 많을 때, 표본평균의 분포가 근사적으로 정규분포를 따른다는 것을 의미한다. 하지만, T분포의 경우 표준정규분포와 sqrt(S/df)의 비의 분포이므로 카이제곱분포를 또한 근사적으로 sample mean으로 만들 수 있는지를 살펴봐야 한다.

      내가 생각한 바로는 카이제곱 분포의 경우 sample mean 뿐만이 아니라 각각의 Xi들 또한 필요하기 때문에 t분포가 중심극한정리에 의해 대표본 근사하기 어렵다고 생각한다.


이러한 의문을 해결하지 못해서, 검색하던 중 발견한 포스팅이다.


===================================================


 - T-test는 기본적으로 두 집단의 평균이 같은지에 대해서 검증할 수 있는 방법이다.

   이 때 기본적인 가정이 필요하다.


   1) 두 집단은 각각 정규분포를 따른다.

   2) 두 집단은 분산이 동일하다.

   

   가정을 만족하지 않는 경우, 귀무가설이 사실임에도 이를 잘못 기각할 여지가 생긴다.


 - 이 가정에 대한 확장을 고려해볼 수 있다.

   왜냐하면, 기본적으로 raw data는 완전한 정규성이나 등분산성을 만족하기 어렵기 때문이다.


 - 실제로, 이 포스팅은 대표본일 때 t-test가 타당하다는 것을 지지한다.

    (즉, the type 1 error rate 가 0.05로 통제되어진다는 것을 지지한다.)

    이에 대한 근거로 t-test는 각 그룹의 sample mean에 기반한 검정이라는 것을 들고있다.(중심극한정리)

     또한, 표본평균의 표준 오차에 사용하는 추정량이 X의 분포에 관계 없이 일관성이 있고, 그에 따라 자료의 정규성에 영향을 받지 않는다고 말한다.


 - 위 포스팅의 결론 : 

      sample size가 너무 작지 않다면, 데이터의 정규성에 대해서 심하게 걱정할 필요가 없다.(신뢰구간을 구할 때도 마찬가지)

      물론 sample size가 아주 작거나 highly skewed distributions인 경우에는 고려해야한다.


===================================================


 * 이에 다른 이의 댓글이 달린다.

    - 엄격한 정규성에 대한 제한은 효율성을 낮춘다?

    - 비모수적인 검정방법은 교호작용에 대한 검정을 수행할 수 없다?


    - 다른 논문을 언급하며 해당 댓글을 지지한다.

(https://www.annualreviews.org/doi/pdf/10.1146/annurev.publhealth.23.100901.140546)

       < THE IMPORTANCE OF THE NORMALITY ASSUMPTION IN LARGE PUBLIC HEALTH DATA SETS - Thomas Lumley, Paula Diehr, Scott Emerson, and Lu Chen > 


       대표본인 경우 정규성이 대해 크게 걱정할 필요가 없다는 결과를 지지한다.


===================================================


 * 결론은 아직도 뭐가 맞는지 정확하게 모르겠음...














+) 다음은 미니탭 trainer의 포스팅이다.


http://blog.minitab.com/blog/understanding-statistics-and-its-application/what-should-i-do-if-my-data-is-not-normal-v2


    - 시뮬레이션을 통해 non-normal data에 대한 처리를 이야기한다.

       어떤 test는 non-normal에 대해 어느정도 robust하며, 다른 test는 그렇지 않다.

       그중 t-test나 ANOVA는 non-normal에 대해 비교적 robust한 test라고 한다.




+) 회귀분석에 대한 reponse variable의 normaliy


https://stats.stackexchange.com/questions/75054/how-do-i-perform-a-regression-on-non-normal-data-which-remain-non-normal-when-tr


    - LSE 회귀계수를 추정하고, 그것의 유용성을 밝혀낼 때(BLUE, Gauss-Markov theorem) 정규성에 대한 가정이 존재하지 않는다.

    - 이러한 가정은 오직 회귀계수의 추정값이 MLE임을 밝히는데 필요한 것이다.

    - 따라서, 반응 변수의 정규성은 회귀분석에 있어 필수가 아니다.


    - 또한, 독립성이나 등분산성이 훨씬 중요한 가정이며

       위에서 t-test의 경우에도 그렇듯 robust하다.

       적합 후에 residual plot을 확인하는 것이 훨씬 도움된다.



국민건강영양조사에는 커피와 비만 이외의 많은 변수가 존재하기 때문에, 내가 원하는 변수만 추출해올 필요가 있다.


- 제7기 1차년도 원시자료 이용지침서를 확인하고 필요할만한 데이터를 요약했다.


번호

변수코드

변수명

내용

1

HE_BMI

체질량지수

수치형

2

HE_OBE

비만 여부

1. 저체중

2. 정상

3. 비만

3

FF_COFFEE

[커피]의 최근 1년간 평균섭취빈도

1. 거의 안 먹음

2. 1

3. 2-3

4. 1

5. 2-4

6. 5-6

7. 1

8. 2

9. 3

99. 무응답

4

FA_COFFEE

[커피]1회 평균 섭취량

1. 1ts

2. 2ts

3. 3ts

88. 비해당

     (1회 미만)

99. 무응답

5

FS_COFFEE

[커피]의 하루 3회 초과 섭취 시

하루 평균 섭취 회수

단위 : /

6

FF_CREAM

[프림]의 최근 1년간 평균섭취빈도

위의 커피와 동일

7

FA_CREAM

[프림]1회 평균 섭취량

8

FF_SUGAR

[설탕]의 최근 1년간 평균섭취빈도

9

FA_SUGAR

[설탕]1회 평균 섭취량

10

FQ_COFFEE

[커피]의 주당섭취빈도

단위 : /

11

FQ_CREAM

[프림]의 주당섭취빈도

단위 : /

12

FQ_SUGAR

[설탕]의 주당섭취빈도

단위 : /



서로 다른 테이블(HN16_ALL.sas7bdat , HN16_FFQ.sas7bdat ) 대상에 대한 변수 정보와 커피와 관련한 변수를 추출하여 inner join한 최종 데이터셋을 형성했다.


이러한 과정에서 체질량지수인 HE_BMI 변수는 만 19세 이상을 대상으로 측정하기 때문에 나이가 어려서 대상이 아닌 관측값들은 모두 제외했다.



 > dim(X)

[1] 3371   21


> X <- X[ !is.na(X$HE_BMI),]

> dim(X)

[1] 3226   21

    # 145개의 결측값을 제외한 결과 총 3226개의 관측값을 보유


t.test와 ANOVA 등의 통계적인 평균 검정 방법은 모집단에 대한 정규성이 가정된다.

따라서 관심있는 변수인 HE_BMI에 대한 정규성을 살펴보자.





우선 변수 HE_BMI를 시각화해서 살펴보았다.

히스토그램은 정규분포라고 하기엔 왼쪽으로 조금 치우친 것으로 보이며, 이에 따라 QQplot 또한 이론적인 정규분포에서 떨어진 곳에 위치했음을 알 수 있다.


HE_BMI가 정규성을 만족하도록 하기 위해 로그 변환을 시도해보자.







로그 변환한 데이터는 비교적 정규분포에 가까운 형태를 띄고있다.

수리적으로 계산한 값을 보자.


* 정규성에 대한 test

  1) shapiro wilks test


> shapiro.test(log(HE_BMI))


        Shapiro-Wilk normality test


data:  log(HE_BMI)

W = 0.99549, p-value = 2.422e-08


  2) AD test    


> ad.test(log(HE_BMI))


        Anderson-Darling normality test


data:  log(HE_BMI)

A = 2.3618, p-value = 5.62e-06


  3) K-S test


> ks.test(unique(log(HE_BMI)), "rnorm")


        One-sample Kolmogorov-Smirnov test


data:  unique(log(HE_BMI))

D = 4.4523, p-value < 2.2e-16

alternative hypothesis: two-sided


3가지 정규성 검정의 결과 모두 p-value가 아주 작아 귀무가설을 기각한다.

즉, 해당 자료의 log값은 정규성을 따른다고 할 수 없다.




 - 앞으로의 진행 방향


  1) 대표본이므로 정규성을 따른다고 생각하고 t.test, ANOVA 등을 수행할 수 있다. (가장 편한 방법)

  2) 안타깝게도 가정을 만족하지 않아 모수적인 검정방법을 사용할 수 없다. 따라서 비모수적은 Wilcoxon Rank Sum test or Kruskal 등의 방법을 사용한다.

    - 이 때, 표본 수에 따른 비모수적 검증 방법의 효율을 생각해봐야한다.


  +) 모형식을 구상할 수 있는 방법에 대해서 생각해보자.

  +) 다른 차시로의 확장은 7차시의 방법론이 정리가 되었을 때 시행해도 될 듯


   >>>> t-test의 경우 표본의 크기가 크다면 정규성에 크게 영향을 받지 않는다.

            등분산 가정의 경우도 s.e의 식을 고려하면 sqrt( s1/n1 + s2/n2 )인데 n의 크기가 커질수록 s1과 s2의 차이에 덜 민감하다.

            통계 모형의 경우 결국 exact하게 정규성을 따를때만 그러하다를 말하는 것이 아님을 기억하자.

'분석 > 비만과 커피' 카테고리의 다른 글

[비만과커피] 회귀분석  (0) 2018.05.05
[비만과커피] 빈도에 따른 그룹 만들기와 그에 대한 검정  (0) 2018.05.01
[ 진행 방향 논의 ]  (0) 2018.04.28
분산분석(ANOVA)  (0) 2018.04.25
개요  (0) 2018.04.18


- 깃허브를 하려고 마음먹은지 약 2~3달이 지나고....

  잘 안돼서 막 미루다가, 중간고사 끝나고 다시 하기로 결심했다.


- 이리저리 기억을 되살리다가...

  기본 명령어를 다시 학습했다.


기본적인 git 명령어

* clone : remote repo를 복제하여 local repo를 생성

           서버에 저장되어 있는 git으로 관리되는 소스와 개발이력을 전부 가져와 

            local에서 작업 시작을 준비하는 단계

* checkout : 브랜치를 전환 / 해당 소스 또한 브랜치의 것으로 전환

                실제로 작업을 할 수 있는 상태

* pull : 현재 브랜치의 최신 상태를 remote repo로부터 가져온다.

         local repo내의 현재 checkout된 브랜치 소스를 최신상태로 만들어 준다.

* add : modified 상태에 있는 변경 내용들을 staged 상태로 만들어준다.

* commit : staged 상태에 있는 변경 내용들을 repo에 저장

              commit message를 통해 변경에 대한 decription 기입 가능

* push : local repo에 commit된 내용들을 remote repo에 보낸다.



 - 그런데 문제는 commit 과정까지는 잘 되었으나 push를 하는 과정에서 다음과 같은 오류가 떴다.




곰곰히 생각해보니 약 2달 전에 깃허브를 하다가 말았던게 이 문제를 해결하지 못해서였다.


검색을 하던 와중에 알게된 사실은 

이 문제는 기존 remote repo에 존재하는 자료를 받아오고 다시 push하기 전에 다른 누군가가 수정을 했을 때 생기는 원 자료의 달라짐 때문인 것을 알게 되었다.

따라서 다시 pull 명령을 한 번 해주고 push를 해주면 된다.


이제 깃을 처음 시작하는 나의 계정에 왜 이런 현상이 나타난 건지는 모르겠지만 시키는 대로 해보았다.


< 출처 : https://stackoverflow.com/questions/24114676/git-error-failed-to-push-some-refs-to



git pull --rebase origin master

git push origin master


(다른 브랜치가 없기 때문에, origin master를 꼭 붙여줘야하는듯?)


무튼 이렇게 해결했고, 이제 잘 활용하는 일만 남은 것 같다.


 * 커피 섭취와 비만은 어떤 관련이 있을까?


introduction)

  1) 일반적으로 커피는 건강에 안 좋고, 비만 정도를 높인다고 기대되어 진다.

  2) 하지만, 커피를 마신 후 입맛 없음을 느낀 경우가 있을 것이다. 이에 따라 커피의 적절한 섭취가 비만을 해소해줄 수 있는지 알아볼 필요가 있다.



data) [ 질병관리본부 - 국민건강영양조사 ]

  - 다운로드 경로 : http://cdc.go.kr/CDC/contents/CdcKrContentView.jsp?cid=60599&menuIds=HOME001-MNU1130-MNU1639-MNU1640-MNU1642








데이터 불러오기)


libname  'C:\Users\twins\Desktop\KSB\이하 경로';


data health.coffee;

  set health.Hn16_ffq;

  keep mod_d ID ID_fam sex age FF_COFFEE FA_COFFEE FS_COFFEE FF_CREAM FA_CREAM FF_SUGAR FA_SUGAR FQ_COFFEE;

run;


data health.bmi;

  set health.hn16_all;

  keep mod_d ID BO1 BO1_1 BO1_2 BO1_3 BO2_1;

run;


proc sort data=health.coffee; by ID; run;

proc sort data=health.bmi; by ID; run;


/* 두 테이블에서 필요한 변수만 가져온 분석테이블 */

data health.dataset;

  merge health.bmi(in=bmi) health.coffee(in=cof);

  by ID;

  if BO1_1=8 | BO1_1=9 then delete; /* 무응답과 비해당을 제외 */

  if cof;

run;


* 수치형인 것 같지만 범주형 자료임

   그래서 대응분석 또는 적합도 검정이 필요할 듯; 







< 1년간 체중변화 여부와 커피 섭취 빈도 사이의 연관성을 평가하기 위한 카이제곱 적합도 검정의 결과 > 


proc freq data=health.dataset;

  tables BO1_1*FF_COFFEE / chisq nocol norow nopercent;

run;





* 두 변수는 서로 연관성이 없음을 알 수 있다.




next) 

  커피 섭취 빈도 변수는 1회당 섭취량을 고려하지 않은 것이다.

  또한 설탕, 프림 등의 함유량도 상관이 존재할 수 있다. 

  이러한 변수들을 정리하여 다시 한 번 적합도를 살펴볼 필요가 있어보인다.

+ Recent posts