Praktikan mampu memahami prinsip-prinsip dasar analisis statistik inferensial nonparametrik, yaitu uji Run (uji keacakan), uji Sign (uji tanda), uji Wilcoxon Sign-Rank, dan uji Mann Whitney U
Praktikan mampu melakukan uji Run, uji Sign, uji Wilcoxon Sign-Rank, dan uji Mann Whitney U pada pemrograman R di RStudio.
AnAnalisis statistik inferensial merupakan analisis yang menarik kesimpulan mengenai karakteristik suatu populasi dari observasi terhadap sampel (Kachigan, 1982). Analisis statistik ini dapat dilakukan dengan dua pendekatan, yaitu estimasi parameter dan pengujian hipotesis. Estimasi parameter dilakukan dengan langsung memperkirakan karakteristik populasi melalui pengamatan sampel. Pengujian hipotesis dilakukan dengan menjadikan kesimpulan pengamatan sampel sebagai landasan untuk mendukung atau menentang hipotesis awal dalam menggambarkan karakteristik populasi.
Pengujian hipotesis terbagi dua, yaitu pengujian hipotesis parametrik untuk data yang memiliki distribusi normal dan pengujian hipotesis nonparametrik untuk data yang memiliki distribusi tidak normal (Healey, 2012; Chase and Bown, 1998; Kachigan, 1982). Pengujian hipotesis nonparametrik di antaranya adalah uji Run, uji Sign, uji Wilcoxon Sign-Rank, dan uji Mann Whitney U. Adapun kegunaan masing-masing uji diuraikan sebagai berikut:
Selain itu, fokus pendekatan statistik pada praktikum ini adalah statistik klasik (Frequentist). Cari tahu lebih lanjut apa itu frequentist (dan juga bayesian).
Melalui praktikum ini, praktikan diarahkan untuk melakukan pengujian hipotesis parametrik berupa uji Run, uji Sign (dengan 1 variabel dan 2 variabel), uji Wilcoxon Sign-Rank (dengan 1 variabel dan 2 variabel), dan uji Mann Whitney U.
Uji Run merupakan uji yang digunakan untuk mengetahui keacakan dari proses pengambilan sampel. Satu Run adalah satu deretan simbol yang sama.
Pada pengujian kali ini, data yang digunakan adalah data suatu kabupaten yang berupa kawasan perdesaan dengan kegiatan ekonomi utama berupa pertanian. Dalam musim panen ini, kabupaten ini mengalami kerugian akibat gagal panen yang dialami beberapa kecamatan. Pemerintah Daerah, khususnya Dinas Pertanian, ingin mengetahui apakah kegagalan tersebut terjadi secara acak (kebetulan) atau diakibatkan kesalahan dalam proses sebelum panen. Untuk itu, diambil sampel kecamatan A-Z dengan klasifikasi hasil panen 1=Berhasil dan 2=Gagal).
# Load data untuk Uji Run
run_data <- read.csv("data/run.csv")
run_data
## kecamatan h_panen
## 1 A 1
## 2 B 1
## 3 C 1
## 4 D 2
## 5 E 1
## 6 F 1
## 7 G 1
## 8 H 2
## 9 I 1
## 10 J 1
## 11 K 2
## 12 L 1
## 13 M 1
## 14 N 1
## 15 O 1
## 16 P 2
## 17 Q 1
## 18 R 1
## 19 S 1
## 20 T 2
## 21 U 1
## 22 V 1
## 23 W 1
## 24 X 1
## 25 Y 2
## 26 Z 2
Berikut adalah langkah-langkah Uji Run: a. Untuk melihat distribusi dan jumlah runs pada data hasil panen, dapat dituliskan command:
# menggunakan package `tseries`
# install.packages("tseries") # untuk instalasi run ini
# load package
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
# run test
result_run <- runs.test(as.factor(run_data$h_panen)) # data diubah menjadi factor
# lihat distribusi data
print(table(run_data$h_panen))
##
## 1 2
## 19 7
# hasil run test
print(result_run)
##
## Runs Test
##
## data: as.factor(run_data$h_panen)
## Standard Normal = 0.39578, p-value = 0.6923
## alternative hypothesis: two.sided
Terdapat 19 panen yang berhasil, ditunjukkan oleh nilai N(h_panen== 1);
Terdapat 7 panen yang gagal, ditunjukkan oleh nilai N(h_panen == 2);
Pada test ini, hipotesis yang diuji adalah sebagai berikut:
H0 = Kegagalan panen bersifat acak
H1 = Kegagalan panen tidak bersifat acak
Seperti biasa, untuk mengetahui hasilnya kita lihat nilai
p-value
dan mengintepretasinya:
Jika hipotesis nol benar (data bersifat acak), maka peluang untuk mendapatkan statistik Z sebesar 0.39578 atau lebih ekstrem adalah 69.23%.
Karena p-value lebih besar dari tingkat signifikansi standar (misalnya, 0.05), kita tidak memiliki cukup bukti untuk menolak hipotesis nol.
Dengan p-value yang tinggi (0.6923), kita tidak menemukan cukup bukti
untuk menyimpulkan bahwa data run_data$h_panen
tidak acak.
Oleh karena itu, kita bertindak seolah-olah hipotesis nol
benar, bahwa urutan data run_data$h_panen
bersifat
acak.
Uji Sign merupakan uji yang dilakukan untuk mengetahui ada tidaknya perbedaan yang nyata dari sampel berpasangan. Pasangan yang dimaksud biasanya kondisi sebelum dan sesudah, yang dinyatakan dalam bentuk tanda positif dan negatif. Uji ini hanya melihat arah dan ada tidaknya perbedaan nyata tanpa memperhatikan besarnya perbedaan. Uji Sign tersebut memiliki 2 bentuk, yaitu dengan menggunakan 1 variabel dan dengan menggunakan 2 variabel.
Pada pengujian kali ini, digunakan data yang berisi data nilai kesejahteraan masyarakat sebelum Program Bandung Juara dan sesudah Program Bandung Juara.
# Load data untuk Uji Run
sign_data <- read.csv("data/sign test sign rank dan wilcoxon.csv")
sign_data
## Responden sejahterasb sejahterasd
## 1 Hana 60 90
## 2 Novia Lesmana 70 85
## 3 Muliati 60 90
## 4 Tirfan Juandi 60 90
## 5 Fajar Muhammadh 60 90
## 6 Tati 90 90
## 7 Nur 60 60
## 8 Eva Sri Febiola 85 85
## 9 Neni Kartini 75 75
## 10 Iis 70 85
## 11 Titi 70 80
## 12 Ayu Widiyanti 70 90
## 13 Nani 85 95
## 14 Herlina 80 85
## 15 Reni 80 80
## 16 Samini 80 90
## 17 Erni Windiarti 0 100
## 18 Unay 80 80
## 19 Reinhard 50 80
## 20 Didi Rosadi 70 85
## 21 M. Dzaki 80 80
## 22 Onih Rohayati 90 90
## 23 Sariah 80 80
## 24 Tati R. 85 90
## 25 Cahyadin 30 30
## 26 Dadan 40 50
## 27 Yuyun 45 60
## 28 yayan 50 50
## 29 Hasan 50 50
## 30 yusuf 50 50
## 31 Sumiati 40 60
## 32 Nur Hasanah 45 55
## 33 Didi 50 55
## 34 Samngani 60 65
## 35 Tarsum 55 60
## 36 Siti 60 90
## 37 Susanti 70 90
## 38 Nina Trinviyana 75 80
## 39 Tanrustana 20 80
## 40 Titi 80 80
## 41 Yuyun Sri W. 85 95
## 42 Lia Yulianti 80 80
## 43 Asep 50 80
## 44 Syarifudin 50 60
## 45 Yuan Sofyan 60 80
## 46 Leny 75 80
## 47 Ine 50 60
## 48 Ida 60 70
## 49 Ani 50 50
## 50 Imo 50 100
## 51 Desi 75 50
## 52 Ade Juanda 80 80
## 53 Bu Tita 50 50
## 54 Bu Lenna 60 80
## 55 Pak Imar 80 80
## 56 Pak Asep 0 0
## 57 Bu Ellis 75 100
## 58 Pak Agus Setiawan 70 100
## 59 Pak Dayat 0 0
## 60 Fatma 70 85
## 61 Komar 70 80
## 62 Iqbal 40 75
## 63 Asih 75 85
## 64 Teti Siti Rohyati 60 80
## 65 Lina 70 50
## 66 Emi 70 80
## 67 Pak Aju Juanda 60 60
## 68 Bu Iis 60 80
## 69 Bu Yeni 60 80
## 70 Pak Asep 60 80
## 71 Bu Dian 70 70
## 72 Bu Maimunah 50 70
## 73 Pak Adjoem 60 80
## 74 PUPPY PUSPITA 60 70
Pada kasus ini, diasumsikan bahwa nilai kesejahteraan masyarakat dinilai baik jika mencapai nilai 80. Hipotesis yang diuji
Hipotesis one-tailed (1):
H0 : Nilai median pada populasi <= 80 (sig=>0.05);
H1 : Nilai median pada populasi > 80 (sig<0.05).
Hipotesis one-tailed (2):
H0 : Nilai median pada populasi >= 80 (sig=>0.05);
H1 : Nilai median pada populasi < 80 (sig<0.05).
Hipotesis two-tailed (1):
H0 : Nilai median pada populasi = 80 (sig=>0.05);
H1 : Nilai median pada populasi ≠ 80 (sig<0.05).
# menentukan kolom dan median yang diuji
values <- sign_data$sejahterasd
median_hypothesis <- 80 # Median hipotesis
# Hitung tanda positif, negatif, dan nol
positive <- sum(values > median_hypothesis)
negative <- sum(values < median_hypothesis)
zero <- sum(values == median_hypothesis)
# Total data yang tidak nol
n_nonzero <- positive + negative
# Jalankan uji tanda (Sign Test) dengan binom.test()
# Uji dua sisi
result_two_sided <- binom.test(x = positive, n = n_nonzero, p = 0.5, alternative = "two.sided")
# Uji satu sisi (greater)
result_one_sided_greater <- binom.test(x = positive, n = n_nonzero, p = 0.5, alternative = "greater")
# Uji satu sisi (less)
result_one_sided_less <- binom.test(x = positive, n = n_nonzero, p = 0.5, alternative = "less")
# Tampilkan hasil
cat("Sign Test dengan binom.test()\n\n")
## Sign Test dengan binom.test()
cat("Jumlah positif:", positive, "\n")
## Jumlah positif: 24
cat("Jumlah negatif:", negative, "\n")
## Jumlah negatif: 27
cat("Jumlah nol:", zero, "\n")
## Jumlah nol: 23
cat("Total tanpa nol:", n_nonzero, "\n\n")
## Total tanpa nol: 51
cat("Two-sided test:\n")
## Two-sided test:
print(result_two_sided)
##
## Exact binomial test
##
## data: positive and n_nonzero
## number of successes = 24, number of trials = 51, p-value = 0.7798
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.3293001 0.6154127
## sample estimates:
## probability of success
## 0.4705882
cat("\nOne-sided test (greater):\n")
##
## One-sided test (greater):
print(result_one_sided_greater)
##
## Exact binomial test
##
## data: positive and n_nonzero
## number of successes = 24, number of trials = 51, p-value = 0.7121
## alternative hypothesis: true probability of success is greater than 0.5
## 95 percent confidence interval:
## 0.3496206 1.0000000
## sample estimates:
## probability of success
## 0.4705882
cat("\nOne-sided test (less):\n")
##
## One-sided test (less):
print(result_one_sided_less)
##
## Exact binomial test
##
## data: positive and n_nonzero
## number of successes = 24, number of trials = 51, p-value = 0.3899
## alternative hypothesis: true probability of success is less than 0.5
## 95 percent confidence interval:
## 0.0000000 0.5942174
## sample estimates:
## probability of success
## 0.4705882
Statistik uji: Probabilitas tanda positif = 0.47.
P-value: 0.7798.
Interval Kepercayaan (95%): (0.33, 0.62).
Karena p-value jauh lebih besar dari 0.05, kita tidak menolak hipotesis nol, dan data mendukung asumsi bahwa median populasi adalah 80.
P-value: 0.7121.
Interval Kepercayaan (95%): (0.35, 1.00).
Karena p-value jauh lebih besar dari 0.05, tidak ada bukti bahwa median populasi lebih besar dari 80.
P-value: 0.3899.
Interval Kepercayaan (95%): (0.00, 0.59).
Karena p-value jauh lebih besar dari 0.05, tidak ada bukti bahwa median populasi lebih kecil dari 80.
Berdasarkan Sign Test, data Anda tidak memberikan bukti yang cukup untuk menolak hipotesis bahwa median populasi adalah 80. Dengan p-value tinggi pada semua tes (dua sisi dan satu sisi), data ini konsisten dengan asumsi bahwa median populasi adalah 80.
Berikutnya, untuk Uji Sign dengan 2 variabel
Hipotesis one-tailed (1):
H0 : Nilai median kesejahteraan sesudah program – kesejahteraan sebelum program <= 0 (sig=>0.05)
H1 : Nilai median kesejahteraan sesudah program – kesejahteraan sebelum program > 0 (sig<0.05)
Hipotesis one-tailed (2):
H0 : Nilai median kesejahteraan sesudah program – kesejahteraan sebelum program >= 0 (sig=>0.05)
H1 : Nilai median kesejahteraan sesudah program – kesejahteraan sebelum program < 0 (sig<0.05)
Hipotesis two-tailed (1):
H0 : Nilai median kesejahteraan sesudah program – kesejahteraan sebelum program = 0 (sig=>0.05)
H1 : Nilai median kesejahteraan sesudah program – kesejahteraan sebelum program ≠ 0 (sig<0.05)
# Hitung tanda positif, negatif, dan nol
positive <- sum(sign_data$sejahterasd > sign_data$sejahterasb)
negative <- sum(sign_data$sejahterasd < sign_data$sejahterasb)
zero <- sum(sign_data$sejahterasd == sign_data$sejahterasb)
# Total tanpa nol
n_nonzero <- positive + negative
# Jalankan uji tanda dengan binom.test
# Two-sided test
result_two_sided <- binom.test(x = positive, n = n_nonzero, p = 0.5, alternative = "two.sided")
# One-sided test (H1: Positive > 0.5)
result_one_sided_greater <- binom.test(x = positive, n = n_nonzero, p = 0.5, alternative = "greater")
# One-sided test (H1: Positive < 0.5)
result_one_sided_less <- binom.test(x = positive, n = n_nonzero, p = 0.5, alternative = "less")
# Tampilkan hasil
cat("Sign Test dengan binom.test()\n\n")
## Sign Test dengan binom.test()
cat("Jumlah positif:", positive, "\n")
## Jumlah positif: 49
cat("Jumlah negatif:", negative, "\n")
## Jumlah negatif: 2
cat("Jumlah nol:", zero, "\n")
## Jumlah nol: 23
cat("Total tanpa nol:", n_nonzero, "\n\n")
## Total tanpa nol: 51
cat("Two-sided test:\n")
## Two-sided test:
print(result_two_sided)
##
## Exact binomial test
##
## data: positive and n_nonzero
## number of successes = 49, number of trials = 51, p-value = 1.179e-12
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.8654135 0.9952150
## sample estimates:
## probability of success
## 0.9607843
cat("\nOne-sided test (greater):\n")
##
## One-sided test (greater):
print(result_one_sided_greater)
##
## Exact binomial test
##
## data: positive and n_nonzero
## number of successes = 49, number of trials = 51, p-value = 5.893e-13
## alternative hypothesis: true probability of success is greater than 0.5
## 95 percent confidence interval:
## 0.8816509 1.0000000
## sample estimates:
## probability of success
## 0.9607843
cat("\nOne-sided test (less):\n")
##
## One-sided test (less):
print(result_one_sided_less)
##
## Exact binomial test
##
## data: positive and n_nonzero
## number of successes = 49, number of trials = 51, p-value = 1
## alternative hypothesis: true probability of success is less than 0.5
## 95 percent confidence interval:
## 0.0000000 0.9929875
## sample estimates:
## probability of success
## 0.9607843
Hasil: p-value = 0.000000000001179.
Keputusan: Karena p-value < 0.05, kita menolak H0.
Kesimpulan: Ada bukti yang sangat kuat bahwa
median perbedaan antara sejahterasd
dan
sejahterasb
tidak sama dengan 0. Dengan
kata lain, ada perubahan kesejahteraan setelah program.
Hasil: p-value = 0.0000000000005893.
Keputusan: Karena p-value < 0.05, kita menolak H0.
Kesimpulan: Ada bukti yang sangat kuat bahwa
median perbedaan antara sejahterasd
dan
sejahterasb
lebih besar dari 0. Ini
menunjukkan bahwa kesejahteraan sesudah program meningkat secara
signifikan dibandingkan sebelum program.
Hasil: p-value = 1.
Keputusan: Karena p-value > 0.05, kita tidak menolak H0.
Kesimpulan: Tidak ada bukti bahwa median
perbedaan antara sejahterasd
dan sejahterasb
lebih kecil dari 0. Ini menunjukkan bahwa kesejahteraan
sesudah program tidak lebih buruk daripada sebelum program.
Hasil ini menunjukkan bahwa program secara signifikan meningkatkan kesejahteraan responden.
Terdapat 2 bentuk Uji Wilcoxon Sign-Rank, yaitu dengan menggunakan 1 variabel dan dengan menggunakan 2 variabel.
Uji ini digunakan untuk melihat distribusi data pada satu data. Data yang digunakan masih data mengenai kesejahteraan sesudah program Bandung Juara. Berikut merupakan langkah-langkah untuk melakukan Uji Wilcoxon Sign-Rank 1 variabel.
Hipotesis yang diuji:
H0 : Nilai median pada populasi = 80 (sig=>0.05)
H1 : Nilai median pada populasi ≠ 80 (sig<0.05)
# Uji Wilcoxon Signed-Rank Test untuk satu sampel
result_signrank <- wilcox.test(sign_data$sejahterasd, mu = 80, alternative = "two.sided")
# Tampilkan hasil
cat("Wilcoxon Signed-Rank Test (One-Sample)\n\n")
## Wilcoxon Signed-Rank Test (One-Sample)
cat("Two-sided test:\n")
## Two-sided test:
print(result_signrank)
##
## Wilcoxon signed rank test with continuity correction
##
## data: sign_data$sejahterasd
## V = 406, p-value = 0.01563
## alternative hypothesis: true location is not equal to 80
Jika asumsi bahwa median populasi sejahterasd
= 80 (H0)
benar, maka peluang mendapatkan hasil seperti ini (V = 406) atau lebih
ekstrem adalah 1.563%.
Karena probabilitas ini cukup kecil (kurang dari 5%), kita
menolak hipotesis nol dan menyimpulkan bahwa
median populasi sejahterasd
secara signifikan
berbeda dari 80.
Uji ini digunakan untuk kasus dua sampel yang dependen atau saling bergantungan/terkait. Uji ini menggunakan W sebagai statistik uji, yang merupakan jumlah Rank positif atau negatif berdasarkan perbedaan nilai setiap kasus dengan median yang diuji. Berikut merupakan langkah-langkah untuk melakukan Uji Wilcoxon Sign-Rank Test 2 variabel.
Hipotesis yang diuji:
H0 : Tidak ada perbedaan nilai median populasi dari dua variabel dependen (sig=>0.05)
H1 : Terdapat perbedaan nilai median populasi dari dua variabel dependen (sig<0.05)
# Two-sided test
result_two_sided <- wilcox.test(sign_data$sejahterasd, sign_data$sejahterasb, mu = 0, alternative = "two.sided", paired = TRUE)
# Tampilkan hasil
cat("Wilcoxon Signed-Rank Test\n\n")
## Wilcoxon Signed-Rank Test
cat("Two-sided test:\n")
## Two-sided test:
print(result_two_sided)
##
## Wilcoxon signed rank test with continuity correction
##
## data: sign_data$sejahterasd and sign_data$sejahterasb
## V = 1256, p-value = 2.424e-08
## alternative hypothesis: true location shift is not equal to 0
V: 1256. Statistik Wilcoxon Signed-Rank menunjukkan jumlah peringkat tanda yang dihitung dari perbedaan data berpasangan.
Jika asumsi bahwa tidak ada perbedaan median (H0) benar, maka peluang mendapatkan hasil seperti ini (V = 1256) atau lebih ekstrem adalah sangat kecil (0.00000002424).
Karena p-value sangat kecil, kita menolak hipotesis nol (H0) dan menyimpulkan bahwa terdapat perbedaan signifikan secara statistik antara kesejahteraan sebelum dan sesudah program.
Uji Mann-Whitney atau Uji U merupakan uji yang dilakukan untuk membandingkan dua median populasi berdasarkan suatu pengurutan semua sampel data secara merata. Uji U ini bisa membandingkan dua sampel yang independen. Data kedua sampel digabungkan dan diberi peringkat dari terkecil hingga terbesar.
Pada pengujian kali ini, data yang digunakan adalah data yang berisi data nilai persepsi masyarakat terhadap kesejahteraan dan pendidikan di Kelurahan Sekeloa setelah adanya program Bandung Juara. Data ini berisi nilai mata pelajaran Fisika (1) dan Biologi (2) kelas A.
# Load data untuk Uji Mann-whitney U
mann_data <- read.csv("data/mann-whitney.csv")
mann_data
## mata_pel nilai
## 1 1 24
## 2 1 43
## 3 1 58
## 4 1 71
## 5 1 43
## 6 1 49
## 7 1 61
## 8 1 44
## 9 1 67
## 10 1 49
## 11 1 53
## 12 1 56
## 13 1 59
## 14 1 52
## 15 1 62
## 16 1 54
## 17 1 57
## 18 1 33
## 19 1 46
## 20 1 43
## 21 1 57
## 22 2 42
## 23 2 43
## 24 2 55
## 25 2 26
## 26 2 62
## 27 2 37
## 28 2 33
## 29 2 41
## 30 2 19
## 31 2 54
## 32 2 20
## 33 2 65
Hipotesis yang diuji:
H0 : Tidak ada perbedaan nilai median populasi dari dua variabel independen (sig=>0.05)
H1 : Terdapat perbedaan nilai median populasi dari dua variabel independen (sig<0.05)
# Pisahkan data berdasarkan kategori 'mata_pel'
group1 <- mann_data$nilai[mann_data$mata_pel == 1]
group2 <- mann_data$nilai[mann_data$mata_pel == 2]
# Uji Mann-Whitney (Wilcoxon Rank-Sum Test)
result <- wilcox.test(group1, group2, alternative = "two.sided")
## Warning in wilcox.test.default(group1, group2, alternative = "two.sided"):
## cannot compute exact p-value with ties
# Tampilkan hasil
cat("Mann-Whitney U Test (Wilcoxon Rank-Sum Test)\n\n")
## Mann-Whitney U Test (Wilcoxon Rank-Sum Test)
print(result)
##
## Wilcoxon rank sum test with continuity correction
##
## data: group1 and group2
## W = 179, p-value = 0.04916
## alternative hypothesis: true location shift is not equal to 0
Probabilitas mengamati hasil seperti ini (atau lebih ekstrem) adalah
4.916%, yang cukup kecil untuk menyimpulkan bahwa hipotesis nol tidak
didukung oleh data. Terdapat bukti signifikan pada tingkat signifikansi
5% bahwa nilai median antara kelompok mata_pel
1 dan 2
berbeda.
Meskipun ada warning terkait ties (nilai yang sama antara kedua kelompok), hasil ini valid karena R menggunakan pendekatan continuity correction untuk menangani ties.
Daftar Pustaka
Chase, W, & Bown F. (1998). General Statistics. John Wiley and Sons.
Healey, J. F. (2012). Statistics, A Tool for Social Research. Wadsworth Publishing Company.
Kachigan, S. K. (1982). Statistical Analysis. Radius Press: New York.
(2012). Solusi Praktis dan Mudah Menguasai SPSS 20 untuk Pengolahan Data. Penerbit Andi: Yogyakarta.