1. Survei Indeks Masa Tubuh dan Aktivitas Fisik

Kita semua pernah mengikuti survei, tetapi apakah kita pernah bertanya-tanya apa yang terjadi pada jawaban survey kita? Survei diberikan kepada sampel orang yang dipilih secara cermat dengan tujuan untuk menggeneralisasi hasilnya ke populasi yang jauh lebih besar.

Data National Health and Nutrition Examination Survey (NHANES) adalah survei kompleks terhadap puluhan ribu orang yang dirancang untuk menilai status kesehatan dan gizi orang dewasa dan anak-anak di Amerika Serikat. Data NHANES mencakup banyak pengukuran yang berkaitan dengan kesehatan secara keseluruhan, aktivitas fisik, diet, kesehatan psikologis, faktor sosioekonomi, dan banyak lagi.

Bergantung pada desain pengambilan sampel, setiap orang memiliki bobot pengambilan sampel yang mengukur berapa banyak orang dalam populasi yang lebih besar yang diwakili oleh data mereka. Dalam notebook ini, kita akan menerapkan metode survei yang menggunakan bobot sampling untuk memperkirakan dan memodelkan hubungan antar pengukuran.

Kita akan fokus pada indikator kesehatan yang umum, Indeks Massa Tubuh (BMI) (kg/m2), dan bagaimana indikator ini terkait dengan aktivitas fisik. Kita akan memvisualisasikan data dan menggunakan ukuran pemusatan data (mean, median, modus) serta ukuran standar deviasi untuk menguji hubungan antar variabel.

# Load data NHANES dan package dplyr
library(NHANES)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Load data NHANESraw
data("NHANESraw")

# Tampilkan data NHANESraw
glimpse(NHANESraw)
## Rows: 20,293
## Columns: 78
## $ ID               <int> 51624, 51625, 51626, 51627, 51628, 51629, 51630, 5163~
## $ SurveyYr         <fct> 2009_10, 2009_10, 2009_10, 2009_10, 2009_10, 2009_10,~
## $ Gender           <fct> male, male, male, male, female, male, female, female,~
## $ Age              <int> 34, 4, 16, 10, 60, 26, 49, 1, 10, 80, 10, 80, 4, 35, ~
## $ AgeMonths        <int> 409, 49, 202, 131, 722, 313, 596, 12, 124, NA, 121, N~
## $ Race1            <fct> White, Other, Black, Black, Black, Mexican, White, Wh~
## $ Race3            <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ Education        <fct> High School, NA, NA, NA, High School, 9 - 11th Grade,~
## $ MaritalStatus    <fct> Married, NA, NA, NA, Widowed, Married, LivePartner, N~
## $ HHIncome         <fct> 25000-34999, 20000-24999, 45000-54999, 20000-24999, 1~
## $ HHIncomeMid      <int> 30000, 22500, 50000, 22500, 12500, 30000, 40000, 4000~
## $ Poverty          <dbl> 1.36, 1.07, 2.27, 0.81, 0.69, 1.01, 1.91, 1.36, 2.68,~
## $ HomeRooms        <int> 6, 9, 5, 6, 6, 4, 5, 5, 7, 4, 5, 5, 7, NA, 6, 6, 5, 6~
## $ HomeOwn          <fct> Own, Own, Own, Rent, Rent, Rent, Rent, Rent, Own, Own~
## $ Work             <fct> NotWorking, NA, NotWorking, NA, NotWorking, Working, ~
## $ Weight           <dbl> 87.4, 17.0, 72.3, 39.8, 116.8, 97.6, 86.7, 9.4, 26.0,~
## $ Length           <dbl> NA, NA, NA, NA, NA, NA, NA, 75.7, NA, NA, NA, NA, NA,~
## $ HeadCirc         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ Height           <dbl> 164.7, 105.4, 181.3, 147.8, 166.0, 173.0, 168.4, NA, ~
## $ BMI              <dbl> 32.22, 15.30, 22.00, 18.22, 42.39, 32.61, 30.57, NA, ~
## $ BMICatUnder20yrs <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ BMI_WHO          <fct> 30.0_plus, 12.0_18.5, 18.5_to_24.9, 12.0_18.5, 30.0_p~
## $ Pulse            <int> 70, NA, 68, 68, 72, 72, 86, NA, 70, 88, 84, 54, NA, N~
## $ BPSysAve         <int> 113, NA, 109, 93, 150, 104, 112, NA, 108, 139, 94, 12~
## $ BPDiaAve         <int> 85, NA, 59, 41, 68, 49, 75, NA, 53, 43, 45, 60, NA, N~
## $ BPSys1           <int> 114, NA, 112, 92, 154, 102, 118, NA, 106, 142, 94, 12~
## $ BPDia1           <int> 88, NA, 62, 36, 70, 50, 82, NA, 60, 62, 38, 62, NA, N~
## $ BPSys2           <int> 114, NA, 114, 94, 150, 104, 108, NA, 106, 140, 92, 12~
## $ BPDia2           <int> 88, NA, 60, 44, 68, 48, 74, NA, 50, 46, 40, 62, NA, N~
## $ BPSys3           <int> 112, NA, 104, 92, 150, 104, 116, NA, 110, 138, 96, 11~
## $ BPDia3           <int> 82, NA, 58, 38, 68, 50, 76, NA, 56, 40, 50, 58, NA, N~
## $ Testosterone     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ DirectChol       <dbl> 1.29, NA, 1.55, 1.89, 1.16, 1.16, 1.16, NA, 1.58, 1.9~
## $ TotChol          <dbl> 3.49, NA, 4.97, 4.16, 5.22, 4.14, 6.70, NA, 4.14, 4.7~
## $ UrineVol1        <int> 352, NA, 281, 139, 30, 202, 77, NA, 39, 128, 109, 38,~
## $ UrineFlow1       <dbl> NA, NA, 0.415, 1.078, 0.476, 0.563, 0.094, NA, 0.300,~
## $ UrineVol2        <int> NA, NA, NA, NA, 246, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ UrineFlow2       <dbl> NA, NA, NA, NA, 2.51, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ Diabetes         <fct> No, No, No, No, Yes, No, No, No, No, No, No, Yes, No,~
## $ DiabetesAge      <int> NA, NA, NA, NA, 56, NA, NA, NA, NA, NA, NA, 70, NA, N~
## $ HealthGen        <fct> Good, NA, Vgood, NA, Fair, Good, Good, NA, NA, Excell~
## $ DaysPhysHlthBad  <int> 0, NA, 2, NA, 20, 2, 0, NA, NA, 0, NA, 0, NA, NA, NA,~
## $ DaysMentHlthBad  <int> 15, NA, 0, NA, 25, 14, 10, NA, NA, 0, NA, 0, NA, NA, ~
## $ LittleInterest   <fct> Most, NA, NA, NA, Most, None, Several, NA, NA, None, ~
## $ Depressed        <fct> Several, NA, NA, NA, Most, Most, Several, NA, NA, Non~
## $ nPregnancies     <int> NA, NA, NA, NA, 1, NA, 2, NA, NA, NA, NA, NA, NA, NA,~
## $ nBabies          <int> NA, NA, NA, NA, 1, NA, 2, NA, NA, NA, NA, NA, NA, NA,~
## $ Age1stBaby       <int> NA, NA, NA, NA, NA, NA, 27, NA, NA, NA, NA, NA, NA, N~
## $ SleepHrsNight    <int> 4, NA, 8, NA, 4, 4, 8, NA, NA, 6, NA, 9, NA, 7, NA, N~
## $ SleepTrouble     <fct> Yes, NA, No, NA, No, No, Yes, NA, NA, No, NA, No, NA,~
## $ PhysActive       <fct> No, NA, Yes, NA, No, Yes, No, NA, NA, Yes, NA, No, NA~
## $ PhysActiveDays   <int> NA, NA, 5, NA, NA, 2, NA, NA, NA, 4, NA, NA, NA, NA, ~
## $ TVHrsDay         <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ CompHrsDay       <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ TVHrsDayChild    <int> NA, 4, NA, 1, NA, NA, NA, NA, 1, NA, 3, NA, 2, NA, 5,~
## $ CompHrsDayChild  <int> NA, 1, NA, 1, NA, NA, NA, NA, 0, NA, 0, NA, 1, NA, 0,~
## $ Alcohol12PlusYr  <fct> Yes, NA, NA, NA, No, Yes, Yes, NA, NA, Yes, NA, No, N~
## $ AlcoholDay       <int> NA, NA, NA, NA, NA, 19, 2, NA, NA, 1, NA, NA, NA, NA,~
## $ AlcoholYear      <int> 0, NA, NA, NA, 0, 48, 20, NA, NA, 52, NA, 0, NA, NA, ~
## $ SmokeNow         <fct> No, NA, NA, NA, Yes, No, Yes, NA, NA, No, NA, No, NA,~
## $ Smoke100         <fct> Yes, NA, NA, NA, Yes, Yes, Yes, NA, NA, Yes, NA, Yes,~
## $ SmokeAge         <int> 18, NA, NA, NA, 16, 15, 38, NA, NA, 16, NA, 21, NA, N~
## $ Marijuana        <fct> Yes, NA, NA, NA, NA, Yes, Yes, NA, NA, NA, NA, NA, NA~
## $ AgeFirstMarij    <int> 17, NA, NA, NA, NA, 10, 18, NA, NA, NA, NA, NA, NA, N~
## $ RegularMarij     <fct> No, NA, NA, NA, NA, Yes, No, NA, NA, NA, NA, NA, NA, ~
## $ AgeRegMarij      <int> NA, NA, NA, NA, NA, 12, NA, NA, NA, NA, NA, NA, NA, N~
## $ HardDrugs        <fct> Yes, NA, NA, NA, No, Yes, Yes, NA, NA, NA, NA, NA, NA~
## $ SexEver          <fct> Yes, NA, NA, NA, Yes, Yes, Yes, NA, NA, NA, NA, NA, N~
## $ SexAge           <int> 16, NA, NA, NA, 15, 9, 12, NA, NA, NA, NA, NA, NA, NA~
## $ SexNumPartnLife  <int> 8, NA, NA, NA, 4, 10, 10, NA, NA, NA, NA, NA, NA, NA,~
## $ SexNumPartYear   <int> 1, NA, NA, NA, NA, 1, 1, NA, NA, NA, NA, NA, NA, NA, ~
## $ SameSex          <fct> No, NA, NA, NA, No, No, Yes, NA, NA, NA, NA, NA, NA, ~
## $ SexOrientation   <fct> Heterosexual, NA, NA, NA, NA, Heterosexual, Heterosex~
## $ WTINT2YR         <dbl> 80100.544, 53901.104, 13953.078, 11664.899, 20090.339~
## $ WTMEC2YR         <dbl> 81528.772, 56995.035, 14509.279, 12041.635, 21000.339~
## $ SDMVPSU          <int> 1, 2, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1,~
## $ SDMVSTRA         <int> 83, 79, 84, 86, 75, 88, 85, 86, 88, 77, 86, 79, 84, 7~
## $ PregnantNow      <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, U~
summary(NHANESraw)
##        ID           SurveyYr        Gender           Age          AgeMonths    
##  Min.   :51624   2009_10:10537   female:10212   Min.   : 0.00   Min.   :  0.0  
##  1st Qu.:56697   2011_12: 9756   male  :10081   1st Qu.:10.00   1st Qu.: 90.0  
##  Median :61770                                  Median :28.00   Median :285.0  
##  Mean   :61770                                  Mean   :32.02   Mean   :351.6  
##  3rd Qu.:66843                                  3rd Qu.:53.00   3rd Qu.:592.0  
##  Max.   :71916                                  Max.   :80.00   Max.   :959.0  
##                                                                 NA's   :9555   
##       Race1           Race3                Education         MaritalStatus 
##  Black   :4640   Asian   : 1282   8th Grade     :1321   Divorced    :1250  
##  Hispanic:2209   Black   : 2683   9 - 11th Grade:1787   LivePartner : 923  
##  Mexican :3739   Hispanic: 1076   High School   :2595   Married     :5869  
##  White   :7393   Mexican : 1355   Some College  :3399   NeverMarried:2287  
##  Other   :2312   White   : 2973   College Grad  :2656   Separated   : 411  
##                  Other   :  387   NA's          :8535   Widowed     :1027  
##                  NA's    :10537                         NA's        :8526  
##         HHIncome     HHIncomeMid        Poverty        HomeRooms     
##  more 99999 :2892   Min.   :  2500   Min.   :0.000   Min.   : 1.000  
##  25000-34999:2483   1st Qu.: 22500   1st Qu.:0.890   1st Qu.: 4.000  
##  35000-44999:1789   Median : 40000   Median :1.650   Median : 6.000  
##  75000-99999:1697   Mean   : 47386   Mean   :2.217   Mean   : 5.806  
##  20000-24999:1682   3rd Qu.: 87500   3rd Qu.:3.510   3rd Qu.: 7.000  
##  (Other)    :7674   Max.   :100000   Max.   :5.000   Max.   :13.000  
##  NA's       :2076   NA's   :2076     NA's   :1836    NA's   :145     
##   HomeOwn              Work          Weight           Length      
##  Own  :10939   Looking   : 576   Min.   :  2.70   Min.   : 45.00  
##  Rent : 8715   NotWorking:5890   1st Qu.: 37.70   1st Qu.: 70.70  
##  Other:  502   Working   :6594   Median : 65.70   Median : 83.90  
##  NA's :  137   NA's      :7233   Mean   : 62.45   Mean   : 82.17  
##                                  3rd Qu.: 83.60   3rd Qu.: 93.60  
##                                  Max.   :239.40   Max.   :115.60  
##                                  NA's   :888      NA's   :18008   
##     HeadCirc         Height           BMI           BMICatUnder20yrs
##  Min.   :32.50   Min.   : 79.1   Min.   :12.40   UnderWeight:  126  
##  1st Qu.:39.40   1st Qu.:149.8   1st Qu.:19.79   NormWeight : 2155  
##  Median :41.50   Median :162.4   Median :24.92   OverWeight :  481  
##  Mean   :41.22   Mean   :156.0   Mean   :25.65   Obese      :  593  
##  3rd Qu.:43.10   3rd Qu.:171.6   3rd Qu.:30.10   NA's       :16938  
##  Max.   :48.40   Max.   :204.5   Max.   :84.87                      
##  NA's   :19819   NA's   :2258    NA's   :2279                       
##          BMI_WHO         Pulse           BPSysAve        BPDiaAve    
##  12.0_18.5   :3641   Min.   :  0.00   Min.   : 74.0   Min.   :  0.0  
##  18.5_to_24.9:5354   1st Qu.: 66.00   1st Qu.:105.0   1st Qu.: 58.0  
##  25.0_to_29.9:4387   Median : 74.00   Median :115.0   Median : 67.0  
##  30.0_plus   :4565   Mean   : 74.08   Mean   :118.1   Mean   : 65.6  
##  NA's        :2346   3rd Qu.: 82.00   3rd Qu.:127.0   3rd Qu.: 75.0  
##                      Max.   :172.00   Max.   :233.0   Max.   :131.0  
##                      NA's   :5397     NA's   :5426    NA's   :5426   
##      BPSys1          BPDia1           BPSys2          BPDia2      
##  Min.   : 72.0   Min.   :  0.00   Min.   : 74.0   Min.   :  0.00  
##  1st Qu.:106.0   1st Qu.: 58.00   1st Qu.:106.0   1st Qu.: 58.00  
##  Median :116.0   Median : 68.00   Median :116.0   Median : 68.00  
##  Mean   :119.2   Mean   : 66.52   Mean   :118.5   Mean   : 65.74  
##  3rd Qu.:128.0   3rd Qu.: 76.00   3rd Qu.:128.0   3rd Qu.: 76.00  
##  Max.   :238.0   Max.   :134.00   Max.   :234.0   Max.   :134.00  
##  NA's   :6008    NA's   :6008     NA's   :5812    NA's   :5812    
##      BPSys3          BPDia3       Testosterone       DirectChol   
##  Min.   : 74.0   Min.   :  0.0   Min.   :   0.25   Min.   :0.280  
##  1st Qu.:104.0   1st Qu.: 58.0   1st Qu.:  14.99   1st Qu.:1.090  
##  Median :116.0   Median : 66.0   Median :  35.88   Median :1.320  
##  Mean   :117.8   Mean   : 65.4   Mean   : 184.94   Mean   :1.361  
##  3rd Qu.:128.0   3rd Qu.: 76.0   3rd Qu.: 342.65   3rd Qu.:1.580  
##  Max.   :232.0   Max.   :128.0   Max.   :2543.99   Max.   :4.630  
##  NA's   :5788    NA's   :5788    NA's   :13467     NA's   :5458   
##     TotChol         UrineVol1       UrineFlow1       UrineVol2    
##  Min.   : 1.530   Min.   :  0.0   Min.   : 0.000   Min.   :  0.0  
##  1st Qu.: 4.010   1st Qu.: 47.0   1st Qu.: 0.368   1st Qu.: 43.0  
##  Median : 4.650   Median : 88.0   Median : 0.638   Median : 82.0  
##  Mean   : 4.771   Mean   :113.6   Mean   : 0.910   Mean   :112.2  
##  3rd Qu.: 5.430   3rd Qu.:156.0   3rd Qu.: 1.122   3rd Qu.:160.0  
##  Max.   :13.650   Max.   :524.0   Max.   :39.800   Max.   :420.0  
##  NA's   :5459     NA's   :4210    NA's   :5603     NA's   :17585  
##    UrineFlow2     Diabetes      DiabetesAge        HealthGen   
##  Min.   : 0.000   No  :17754   Min.   : 1.0    Excellent:1309  
##  1st Qu.: 0.437   Yes : 1706   1st Qu.:40.0    Vgood    :3461  
##  Median : 0.724   NA's:  833   Median :50.0    Good     :4959  
##  Mean   : 1.136                Mean   :49.5    Fair     :2284  
##  3rd Qu.: 1.445                3rd Qu.:60.0    Poor     : 436  
##  Max.   :62.333                Max.   :80.0    NA's     :7844  
##  NA's   :17596                 NA's   :18856                   
##  DaysPhysHlthBad  DaysMentHlthBad  LittleInterest   Depressed   
##  Min.   : 0.000   Min.   : 0.000   None   :7825   None   :7926  
##  1st Qu.: 0.000   1st Qu.: 0.000   Several:1790   Several:1774  
##  Median : 0.000   Median : 0.000   Most   : 893   Most   : 814  
##  Mean   : 3.719   Mean   : 4.151   NA's   :9785   NA's   :9779  
##  3rd Qu.: 3.000   3rd Qu.: 4.000                                
##  Max.   :30.000   Max.   :30.000                                
##  NA's   :7862     NA's   :7867                                  
##   nPregnancies       nBabies         Age1stBaby    SleepHrsNight   
##  Min.   : 1.000   Min.   : 0.000   Min.   :14.00   Min.   : 2.000  
##  1st Qu.: 2.000   1st Qu.: 2.000   1st Qu.:18.00   1st Qu.: 6.000  
##  Median : 3.000   Median : 2.000   Median :21.00   Median : 7.000  
##  Mean   : 3.428   Mean   : 2.772   Mean   :21.73   Mean   : 6.891  
##  3rd Qu.: 4.000   3rd Qu.: 3.000   3rd Qu.:24.00   3rd Qu.: 8.000  
##  Max.   :32.000   Max.   :17.000   Max.   :39.00   Max.   :12.000  
##  NA's   :16091    NA's   :16354    NA's   :17135   NA's   :7261    
##  SleepTrouble PhysActive  PhysActiveDays        TVHrsDay         CompHrsDay   
##  No  :10077   No  :6901   Min.   : 1.000   2_hr     : 2389   0_hrs    : 2586  
##  Yes : 2981   Yes :7377   1st Qu.: 2.000   1_hr     : 1616   0_to_1_hr: 2354  
##  NA's: 7235   NA's:6015   Median : 3.000   3_hr     : 1533   1_hr     : 1646  
##                           Mean   : 3.783   More_4_hr: 1275   2_hr     : 1129  
##                           3rd Qu.: 5.000   0_to_1_hr: 1175   3_hr     :  562  
##                           Max.   :99.000   (Other)  : 1077   (Other)  :  797  
##                           NA's   :12918    NA's     :11228   NA's     :11219  
##  TVHrsDayChild    CompHrsDayChild  Alcohol12PlusYr   AlcoholDay    
##  Min.   : 0.000   Min.   : 0.000   No  :2820       Min.   : 1.000  
##  1st Qu.: 1.000   1st Qu.: 0.000   Yes :7483       1st Qu.: 1.000  
##  Median : 2.000   Median : 1.000   NA's:9990       Median : 2.000  
##  Mean   : 2.134   Mean   : 2.647                   Mean   : 2.968  
##  3rd Qu.: 3.000   3rd Qu.: 6.000                   3rd Qu.: 4.000  
##  Max.   :99.000   Max.   :77.000                   Max.   :82.000  
##  NA's   :18065    NA's   :18065                    NA's   :13300   
##   AlcoholYear     SmokeNow     Smoke100       SmokeAge     Marijuana   
##  Min.   :  0.00   No  : 2779   No  :6536   Min.   : 6.00   No  : 3353  
##  1st Qu.:  1.00   Yes : 2454   Yes :5235   1st Qu.:15.00   Yes : 3719  
##  Median : 12.00   NA's:15060   NA's:8522   Median :17.00   NA's:13221  
##  Mean   : 64.36                            Mean   :18.06               
##  3rd Qu.:104.00                            3rd Qu.:20.00               
##  Max.   :364.00                            Max.   :72.00               
##  NA's   :11462                             NA's   :15244               
##  AgeFirstMarij   RegularMarij  AgeRegMarij    HardDrugs    SexEver     
##  Min.   : 0.00   No  : 1892   Min.   : 0.00   No  : 7207   No  :  471  
##  1st Qu.:15.00   Yes : 1820   1st Qu.:15.00   Yes : 1434   Yes : 8167  
##  Median :16.00   NA's:16581   Median :17.00   NA's:11652   NA's:11655  
##  Mean   :16.96                Mean   :17.63                            
##  3rd Qu.:18.00                3rd Qu.:19.00                            
##  Max.   :56.00                Max.   :52.00                            
##  NA's   :16579                NA's   :18473                            
##      SexAge      SexNumPartnLife   SexNumPartYear    SameSex     
##  Min.   : 9.00   Min.   :   0.00   Min.   :  0.000   No  : 8057  
##  1st Qu.:15.00   1st Qu.:   2.00   1st Qu.:  1.000   Yes :  579  
##  Median :17.00   Median :   5.00   Median :  1.000   NA's:11657  
##  Mean   :17.39   Mean   :  14.52   Mean   :  1.382               
##  3rd Qu.:19.00   3rd Qu.:  12.00   3rd Qu.:  1.000               
##  Max.   :55.00   Max.   :2000.00   Max.   :100.000               
##  NA's   :12157   NA's   :11761     NA's   :13253                 
##       SexOrientation     WTINT2YR         WTMEC2YR         SDMVPSU     
##  Bisexual    :  202   Min.   :  3280   Min.   :     0   Min.   :1.000  
##  Heterosexual: 6534   1st Qu.: 11709   1st Qu.: 11622   1st Qu.:1.000  
##  Homosexual  :  111   Median : 18913   Median : 18971   Median :2.000  
##  NA's        :13446   Mean   : 29987   Mean   : 29987   Mean   :1.594  
##                       3rd Qu.: 34954   3rd Qu.: 35312   3rd Qu.:2.000  
##                       Max.   :220233   Max.   :222580   Max.   :3.000  
##                                                                        
##     SDMVSTRA       PregnantNow   
##  Min.   : 75.00   Yes    :  125  
##  1st Qu.: 81.00   No     : 2332  
##  Median : 88.00   Unknown:  156  
##  Mean   : 88.38   NA's   :17680  
##  3rd Qu.: 95.00                  
##  Max.   :103.00                  
## 

2. Visualisasi Bobot Survei dan Variabel Strata

Kita lihat dari glimpse() bahwa data NHANESraw memiliki banyak variabel pengukuran kesehatan. Data ini juga mengandung variabel bobot sampling WTMEC2YR.

Karena data NHANESraw mencakup 4 tahun (2009-2012) dan bobot pengambilan sampel didasarkan pada 2 tahun data, pertama-tama kita harus membuat variabel bobot yang menskalakan sampel selama 4 tahun penuh. Saat ini jumlah bobot adalah 2 kali lipat dari jumlah populasi AS, jadi kita perlu membagi bobot 2 tahun menjadi dua sehingga secara total, jumlah bobot sama dengan populasi AS.

Data NHANES memiliki sampel yang terlalu banyak untuk beberapa wilayah geografis dan kelompok minoritas tertentu. Dengan memeriksa distribusi bobot sampel untuk setiap ras, kita dapat melihat bahwa orang kulit putih kurang tersampel dan memiliki bobot yang lebih tinggi, sementara orang kulit hitam, Meksiko, Hispanik yang tersampel lebih banyak memiliki bobot yang lebih rendah karena setiap orang yang tersampel dalam kelompok-kelompok minoritas ini mewakili lebih sedikit orang AS.

# Load paket ggplot2
library(ggplot2)

# Gunakan mutate untuk membuat kolom baru yang berisi nilai bobot sampel untuk 4 tahun, nama kolom baru tersebut adalah WTMEC4YR
NHANESraw <- NHANESraw %>% mutate(WTMEC4YR = WTMEC2YR/2)

# Gunakan Fungsi summarize() di R digunakan untuk membuat ringkasan data
NHANESraw %>% summarize(WTMEC4YR)
# Gambar boxplot dengan sumbu x adalah ras dan y adalah total populasi AS
ggplot(NHANESraw, aes(x = Race1, y = WTMEC4YR, fill = Race1)) + geom_boxplot()

3. Menentukan Desain Survey

Sekarang kita akan menggunakan paket survei di R untuk menentukan desain survei yang kompleks yang akan kita gunakan dalam analisis selanjutnya. Kita perlu menentukan desain agar bobot dan desain sampling dapat digunakan dengan benar dalam model statistik.

Data NHANESraw berisi variabel strata SDMVSTRA, dan variabel id klaster (juga dikenal sebagai unit pengambilan sampel primer, PSU), SDMVPSU, yang memperhitungkan efek desain pengelompokan. Kluster-kluster ini (PSU) bersarang di dalam strata.

# Load paket survey
library(survey)
## Loading required package: grid
## Loading required package: Matrix
## Loading required package: survival
## 
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
## 
##     dotchart
# Menentukan desain survey
nhanes_design <- svydesign(
    data = NHANESraw,
    strata = ~SDMVSTRA,
    id = ~SDMVPSU,
    nest = TRUE,
    weights = ~WTMEC4YR)

# Menampilkan desain survey
summary(nhanes_design)
## Stratified 1 - level Cluster Sampling design (with replacement)
## With (62) clusters.
## svydesign(data = NHANESraw, strata = ~SDMVSTRA, id = ~SDMVPSU, 
##     nest = TRUE, weights = ~WTMEC4YR)
## Probabilities:
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 8.986e-06 5.664e-05 1.054e-04       Inf 1.721e-04       Inf 
## Stratum Sizes: 
##             75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91
## obs        803 785 823 829 696 751 696 724 713 683 592 946 598 647 251 862 998
## design.PSU   2   2   2   2   2   2   2   2   2   2   2   3   2   2   2   3   3
## actual.PSU   2   2   2   2   2   2   2   2   2   2   2   3   2   2   2   3   3
##             92  93  94  95  96  97  98  99 100 101 102 103
## obs        875 602 688 722 676 608 708 682 700 715 624 296
## design.PSU   3   2   2   2   2   2   2   2   2   2   2   2
## actual.PSU   3   2   2   2   2   2   2   2   2   2   2   2
## Data variables:
##  [1] "ID"               "SurveyYr"         "Gender"           "Age"             
##  [5] "AgeMonths"        "Race1"            "Race3"            "Education"       
##  [9] "MaritalStatus"    "HHIncome"         "HHIncomeMid"      "Poverty"         
## [13] "HomeRooms"        "HomeOwn"          "Work"             "Weight"          
## [17] "Length"           "HeadCirc"         "Height"           "BMI"             
## [21] "BMICatUnder20yrs" "BMI_WHO"          "Pulse"            "BPSysAve"        
## [25] "BPDiaAve"         "BPSys1"           "BPDia1"           "BPSys2"          
## [29] "BPDia2"           "BPSys3"           "BPDia3"           "Testosterone"    
## [33] "DirectChol"       "TotChol"          "UrineVol1"        "UrineFlow1"      
## [37] "UrineVol2"        "UrineFlow2"       "Diabetes"         "DiabetesAge"     
## [41] "HealthGen"        "DaysPhysHlthBad"  "DaysMentHlthBad"  "LittleInterest"  
## [45] "Depressed"        "nPregnancies"     "nBabies"          "Age1stBaby"      
## [49] "SleepHrsNight"    "SleepTrouble"     "PhysActive"       "PhysActiveDays"  
## [53] "TVHrsDay"         "CompHrsDay"       "TVHrsDayChild"    "CompHrsDayChild" 
## [57] "Alcohol12PlusYr"  "AlcoholDay"       "AlcoholYear"      "SmokeNow"        
## [61] "Smoke100"         "SmokeAge"         "Marijuana"        "AgeFirstMarij"   
## [65] "RegularMarij"     "AgeRegMarij"      "HardDrugs"        "SexEver"         
## [69] "SexAge"           "SexNumPartnLife"  "SexNumPartYear"   "SameSex"         
## [73] "SexOrientation"   "WTINT2YR"         "WTMEC2YR"         "SDMVPSU"         
## [77] "SDMVSTRA"         "PregnantNow"      "WTMEC4YR"

4. Pisahkan Data

Analisis data survei memerlukan pertimbangan yang cermat terhadap desain pengambilan sampel dan bobot di setiap langkah. Sesuatu yang sederhana seperti memfilter data menjadi rumit ketika melibatkan pembobotan.

Ketika kita ingin memeriksa subset data (misalnya, subpopulasi orang Hispanik dewasa yang menderita diabetes, atau wanita hamil), kita harus secara eksplisit menentukan hal ini dalam desain. Kita tidak dapat dengan mudah menghapus subset data tersebut melalui filter data mentah karena bobot survei tidak akan lagi benar dan tidak akan bertambah menjadi populasi AS secara keseluruhan.

Kategori BMI berbeda untuk anak-anak dan dewasa muda yang berusia kurang dari 20 tahun, jadi kami akan membagi data untuk hanya menganalisis orang dewasa yang berusia minimal 20 tahun.

# Pisahkan data dengan filter age >= 20, lalu simpan ke variabel nhanes_adult
nhanes_adult <- subset(nhanes_design, Age >= 20)

# Tampilkan data nhanes_adult
summary(nhanes_adult)
## Stratified 1 - level Cluster Sampling design (with replacement)
## With (62) clusters.
## subset(nhanes_design, Age >= 20)
## Probabilities:
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 8.986e-06 4.303e-05 8.107e-05       Inf 1.240e-04       Inf 
## Stratum Sizes: 
##             75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91
## obs        471 490 526 500 410 464 447 400 411 395 357 512 327 355 153 509 560
## design.PSU   2   2   2   2   2   2   2   2   2   2   2   3   2   2   2   3   3
## actual.PSU   2   2   2   2   2   2   2   2   2   2   2   3   2   2   2   3   3
##             92  93  94  95  96  97  98  99 100 101 102 103
## obs        483 376 368 454 362 315 414 409 377 460 308 165
## design.PSU   3   2   2   2   2   2   2   2   2   2   2   2
## actual.PSU   3   2   2   2   2   2   2   2   2   2   2   2
## Data variables:
##  [1] "ID"               "SurveyYr"         "Gender"           "Age"             
##  [5] "AgeMonths"        "Race1"            "Race3"            "Education"       
##  [9] "MaritalStatus"    "HHIncome"         "HHIncomeMid"      "Poverty"         
## [13] "HomeRooms"        "HomeOwn"          "Work"             "Weight"          
## [17] "Length"           "HeadCirc"         "Height"           "BMI"             
## [21] "BMICatUnder20yrs" "BMI_WHO"          "Pulse"            "BPSysAve"        
## [25] "BPDiaAve"         "BPSys1"           "BPDia1"           "BPSys2"          
## [29] "BPDia2"           "BPSys3"           "BPDia3"           "Testosterone"    
## [33] "DirectChol"       "TotChol"          "UrineVol1"        "UrineFlow1"      
## [37] "UrineVol2"        "UrineFlow2"       "Diabetes"         "DiabetesAge"     
## [41] "HealthGen"        "DaysPhysHlthBad"  "DaysMentHlthBad"  "LittleInterest"  
## [45] "Depressed"        "nPregnancies"     "nBabies"          "Age1stBaby"      
## [49] "SleepHrsNight"    "SleepTrouble"     "PhysActive"       "PhysActiveDays"  
## [53] "TVHrsDay"         "CompHrsDay"       "TVHrsDayChild"    "CompHrsDayChild" 
## [57] "Alcohol12PlusYr"  "AlcoholDay"       "AlcoholYear"      "SmokeNow"        
## [61] "Smoke100"         "SmokeAge"         "Marijuana"        "AgeFirstMarij"   
## [65] "RegularMarij"     "AgeRegMarij"      "HardDrugs"        "SexEver"         
## [69] "SexAge"           "SexNumPartnLife"  "SexNumPartYear"   "SameSex"         
## [73] "SexOrientation"   "WTINT2YR"         "WTMEC2YR"         "SDMVPSU"         
## [77] "SDMVSTRA"         "PregnantNow"      "WTMEC4YR"
# Bandingkan jumlah data nhanes_design & nhanes_adult
nrow(nhanes_design)
## [1] 20293
nrow(nhanes_adult)
## [1] 11778

5. Memvisualisasikan rata-rata BMI untuk usia >= 20 tahun

Dengan metode survei, kita dapat menggunakan bobot sampling untuk memperkirakan distribusi pengukuran yang sebenarnya dalam seluruh populasi. Hal ini dapat digunakan untuk banyak statistik seperti rata-rata, proporsi, dan standar deviasi.

Kita akan menggunakan metode survei untuk memperkirakan rata-rata BMI pada populasi orang dewasa di AS dan juga untuk menggambar histogram berbobot dari distribusi tersebut.

# Menghitung rata-rata BMI pada dataset NHANESraw
bmi_mean_raw <- NHANESraw %>% 
    filter(Age >= 20) %>%
    summarize(mean(BMI, na.rm = TRUE))
bmi_mean_raw
# Hitung rata-rata BMI dengan mempertimbangkan bobot sampel pada orang dewasa AS
bmi_mean <- svymean(~BMI, design = nhanes_adult, na.rm = TRUE)
bmi_mean
##       mean     SE
## BMI 28.734 0.1235
# Menggambar histogram BMI pada populasi US dan menunjukkan nilai rata-rata BMI
NHANESraw %>% 
  filter(Age >= 20) %>%
    ggplot(mapping = aes(x = BMI, weight = WTMEC4YR)) + 
    geom_histogram()+
    geom_vline(xintercept = coef(bmi_mean), color="red")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 547 rows containing non-finite values (`stat_bin()`).

# Menghitung Standar Deviasi
sd_bmi = NHANESraw %>% 
  filter(Age >= 20)
sd(sd_bmi$BMI, na.rm = TRUE)
## [1] 6.870053

6. Memvisualisasikan Distribusi Kategori BMI dan Ras untuk Menemukan Modus

Memvisualisasikan distribusi kategori BMI dan ras dapat membantu kita menemukan modus, yaitu kategori BMI yang paling umum di setiap ras. Untuk melakukan ini, kita dapat menggunakan stacked bar chart.

Pada stacked bar chart, sumbu x menunjukkan kategori BMI, dan sumbu y menunjukkan frekuensi atau proporsi individu dalam setiap kategori BMI. Di dalam setiap bar terdapat label yang berisi informasi jumlah orang. Dengan mengelompokkan data berdasarkan ras, kita dapat melihat bagaimana distribusi kategori BMI berbeda di antara kelompok ras yang berbeda.

# Memuat paket purrr, yang berisi sejumlah fungsi yang berguna untuk bekerja dengan data.
library("purrr")

# Memilih semua orang dewasa dari kerangka data NHANESraw yang memiliki nilai BMI non-NA.
NHANESrawAdult <- NHANESraw[NHANESraw$Age >= 20  & !is.na(NHANESraw$BMI), ]

# Menetapkan variabel BMI, ras, dan berat dari kerangka data NHANESrawAdult ke variabel yang terpisah.
bmi = NHANESrawAdult$BMI
ras = NHANESrawAdult$Race1
weight = NHANESrawAdult$WTMEC4YR

# Membuat vektor quantiles untuk variabel BMI. Quantiles digunakan untuk mendefinisikan kategori BMI.
quantiles <- c(0,18.4,24,29,Inf)

# Menggunakan fungsi cut() untuk menetapkan kategori BMI ke setiap individu.
# Fungsi cut() mengambil variabel BMI dan vektor quantiles sebagai input, dan mengembalikan vektor kategori BM
bmiCat <- cut(bmi, quantiles, c("underWeight", "Normweight", "overweight", "obese"))

# Membuat kerangka data dengan tiga variabel: Ras, BMI_Category, dan population
data <- data.frame(Ras = ras, BMI_Category = bmiCat, population = weight)

# Membuat tabel silang kategori BMI berdasarkan ras dan populasi
cross_table <- table(data$Ras, data$BMI_Category)

# Menambahkan margin ke tabel silang
cross_table_with_total <- addmargins(cross_table, margin = 2)

# Membuat stacked bar chart berdasarkan kategori BMI dan ras.
# Sumbu x plot menunjukkan ras setiap individu, dan sumbu y plot menunjukkan proporsi individu dalam setiap kombinasi ras-kategori BMI.
# Setiap bar diisi dengan kategori BMI setiap individu.
# Label teks pada batang menunjukkan jumlah individu dalam setiap kombinasi ras-kategori BMI
ggplot(data, aes(x = Ras, fill = BMI_Category)) +
    geom_bar(position = "fill") + ylab("proportion") +
    stat_count(geom = "text", 
             aes(label = stat(count)),
             position=position_fill(vjust = 0.5), colour="white")
## Warning: `stat(count)` was deprecated in ggplot2 3.4.0.
## i Please use `after_stat(count)` instead.

# Menampilkan tabel silang 
cross_table_with_total
##           
##            underWeight Normweight overweight obese  Sum
##   Black             45        425        710  1289 2469
##   Hispanic           7        221        415   505 1148
##   Mexican            9        215        576   805 1605
##   White             86       1135       1611  1950 4782
##   Other             43        510        430   244 1227

7. Memvisualisasikan Hubungan BMI dan Aktivitas Fisik

Boxplot adalah metode grafis untuk menggambarkan kumpulan data numerik berdasarkan nilai kuartilnya. Boxplot menunjukkan distribusi data dengan garis tengah, dua kuartil (Q1 dan Q3), dan dua ekstrem (minimum dan maksimum).

Untuk memvisualisasikan hubungan BMI dan aktivitas fisik, kita dapat membuat boxplot dengan dua kategori aktivitas fisik: aktif dan tidak aktif. Pada boxplot, median dari kategori aktif akan lebih rendah dibandingkan dengan median dari kategori tidak aktif. Hal ini menunjukkan bahwa orang yang secara fisik aktif memiliki BMI yang lebih rendah dibandingkan dengan orang yang secara fisik tidak aktif.

NHANESraw %>% 
  filter(Age>=20) %>%
    ggplot(mapping = aes(x = PhysActive, y =BMI)) +
        geom_boxplot()
## Warning: Removed 547 rows containing non-finite values (`stat_boxplot()`).

8. Memvisualisasikan Hubungan BMI dan Kebiasaan Merokok

Untuk memvisualisasikan hubungan BMI dan kebiasaan merokok, kita dapat membuat boxplot dengan dua kategori kebiasaan merokok: perokok dan bukan perokok. Pada boxplot, median dari kategori perokok akan lebih rendah dibandingkan dengan median dari kategori bukan perokok. Hal ini menunjukkan bahwa orang yang merokok cenderung memiliki BMI yang lebih rendah dari rata-rata dibandingkan dengan orang yang tidak merokok.

NHANESraw %>% 
  filter(Age>=20, !is.na(SmokeNow)) %>%
    ggplot(mapping = aes(x = SmokeNow, y = BMI)) +
        geom_boxplot()
## Warning: Removed 244 rows containing non-finite values (`stat_boxplot()`).