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
##
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()
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"
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
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
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
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()`).
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()`).