Dalam teori probabilitas dan statistika, Khi-kuadrat / Chi-squared digunakan untuk mengetahui apakah terdapat perbedaan antara hasil pengamatan data dan hasil perkiraan perhitungan data. Contoh yang dibahas kali ini adalah mengenai penentuan apakah hasil kuisioner yang didapatkan wajar atau tidak.
Algoritma Chi-squared biasanya digunakan dalam uji hipotesis, untuk mengetahui apakah memang terdapat hubungan antara 2 kriteria tersebut. Contoh lain adalah untuk menentukan apakah terdapat selisih yang signifikan antara hasil pengamatan data (observed) dan hasil perkiraan perhitungan data (expected). Apakah selisih ini memang murni selisih perhitungan, atau karena contoh data yang ada lebih memihak ke salah satu nilai hasil. Pembuktian yang dilakukan dalam kasus ini adalah pembuktian kedua, dan pembuktian ini dapat dinamakan Distribusi Khi-kuadrat (Chi-Squared Test / Chi-Squared Distribution).
Diasumsikan ada beberapa data kuisioner yang didapatkan
Kuisioner tersebut diisi oleh mahasiswa dari 5 jurusan dengan jumlah acak, yaitu Akuntansi, Informatika, Manajemen, Kedokteran, dan Kesenian
Maka tentukan apakah hasil kuisioner tersebut termasuk wajar atau tidak
Diasumsikan data kuisioner tersebut adalah sebagai berikut:
Kuisioner | Jurusan Mahasiswa |
---|---|
Kuisioner A | Kedokteran |
Kuisioner B | Informatika |
Kuisioner C | Akuntansi |
Kuisioner D | Manajemen |
Kuisioner E | Kedokteran |
Kuisioner F | Akuntansi |
Kuisioner G | Informatika |
Kuisioner H | Informatika |
Kuisioner I | Informatika |
Kuisioner J | Kedokteran |
Kuisioner K | Manajemen |
Kuisioner L | Informatika |
Kuisioner M | Informatika |
Kuisioner N | Kesenian |
Kuisioner O | Kedokteran |
Kuisioner P | Informatika |
Kuisioner Q | Kedokteran |
Kuisioner R | Informatika |
Kuisioner S | Manajemen |
Kuisioner T | Informatika |
Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data awal adalah sebagai berikut:
Dim data(19) As String data(0) = "Kedokteran" data(1) = "Informatika" data(2) = "Akuntansi" data(3) = "Manajemen" data(4) = "Kedokteran" data(5) = "Akuntansi" data(6) = "Informatika" data(7) = "Informatika" data(8) = "Informatika" data(9) = "Kedokteran" data(10) = "Manajemen" data(11) = "Informatika" data(12) = "Informatika" data(13) = "Kesenian" data(14) = "Kedokteran" data(15) = "Informatika" data(16) = "Kedokteran" data(17) = "Informatika" data(18) = "Manajemen" data(19) = "Informatika"
Langkah-langkah penggunaan algoritma ini adalah
1. Hitung penjumlahan data pada masing-masing pilihan jawaban
Dim dataAwal(4) As Integer For i As Integer = 0 To 19 If data(i) = "Akuntansi" Then dataAwal(0) += 1 If data(i) = "Informatika" Then dataAwal(1) += 1 If data(i) = "Manajemen" Then dataAwal(2) += 1 If data(i) = "Kedokteran" Then dataAwal(3) += 1 If data(i) = "Kesenian" Then dataAwal(4) += 1 Next
2. Tentukan nilai X-squared
Jika X-squared bernilai 0, artinya data tersebut sangat wajar untuk terjadi
Semakin tinggi nilai X-squared, maka semakin tinggi kemungkinan sebuah kejadian dikatakan sebagai kejadian yang tidak wajar
Penjelasan lebih lanjut dapat dilihat pada penjelasan skrip dibawah ini
'Hitung semua jumlah data awal Dim jumlahdataAwal As Double = 0.0 For i = 0 To dataAwal.Length - 1 jumlahdataAwal += dataAwal(i) Next i 'Hitung nilai perkiraan per kriteria, yaitu nilai rata-rata yang seharusnya terjadi pada semua kriteria Dim nilaiPerkiraanPerKriteria As Double = CInt(Fix(jumlahdataAwal / dataAwal.Length)) 'Hitung nilai X-squared dengan rumus jumlah dari (kuadrat dari (masing-masing data pengamatan - nilai perkiraan) dibagi nilai perkiraan) Dim x As Double = 0.0 For i = 0 To dataAwal.Length - 1 x = x + ((dataAwal(i) - nilaiPerkiraanPerKriteria) * (dataAwal(i) - nilaiPerkiraanPerKriteria)) / nilaiPerkiraanPerKriteria Next i
3. Tentukan nilai df (degree of freedom)
df selalu bernilai dengan (jumlah pilihan data – 1)
Dim df As Integer = dataAwal.Length - 1
4. Tentukan nilai p-value sebagai nilai jawaban
Penjelasan lebih detail mengenai fungsi ini dapat dilihat pada penjelasan skrip dibawah ini
Dim p As Double = KhiKuadrat(x, df)
* Gunakan Fungsi ini untuk menghitung nilai khi-kuadrat / chi-squared
Apabila nilai output fungsi ini adalah 0.05,
maka nilai parameter x hanya memiliki kemungkinan sebesar 0.05 / 5 persen untuk terjadi,
sehingga disimpulkan bahwa data-data yang memproduksi nilai parameter x TIDAK SAMA dengan data perkiraan yang seharusnya terjadi
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini
Public Function KhiKuadrat(ByVal x As Double, ByVal df As Integer) As Double If x <= 0.0 OrElse df < 1 Then Throw New Exception("Pada fungsi KhiKuadrat, parameter x harus bernilai positif dan parameter df harus bernilai lebih dari 1") End If Dim a As Double = 0.0 Dim y As Double = 0.0 Dim s As Double = 0.0 Dim z As Double = 0.0 Dim e As Double = 0.0 Dim c As Double Dim isNilaiDFGenap As Boolean a = 0.5 * x If df Mod 2 = 0 Then isNilaiDFGenap = True Else isNilaiDFGenap = False End If If df > 1 Then If -a < -40.0 Then y = 0 Else y = Math.Exp(-a) End If End If If isNilaiDFGenap = True Then s = y Else s = 2.0 * Gauss(-Math.Sqrt(x)) End If If df > 2 Then x = 0.5 * (df - 1.0) If isNilaiDFGenap = True Then z = 1.0 Else z = 0.5 End If If a > 40.0 Then If isNilaiDFGenap = True Then e = 0.0 Else e = 0.57236494292470008 'log(sqrt(pi)) End If c = Math.Log(a) 'log basis e Do While z <= x e = Math.Log(z) + e Dim exp As Double = 0 If (c * z - a - e) < -40.0 Then exp = 0 Else exp = Math.Exp(c * z - a - e) End If s += exp z = z + 1.0 Loop Return s Else If isNilaiDFGenap = True Then e = 1.0 Else e = 0.56418958354775628 / Math.Sqrt(a) '(1 / sqrt(pi)) End If c = 0.0 Do While z <= x e = e * (a / z) c = c + e z = z + 1.0 Loop Return c * y + s End If Else Return s End If End Function
* Gunakan Fungsi ini untuk menghitung nilai Gauss
Nilai input adalah parameter z dengan rentang nilai negatif tak terhingga s/d positif tak terhingga
Nilai output adalah nilai p-value dengan model kurva normal dengan rentang nilai negatif tak terhingga s/d nilai z
Sebagai contoh, jika z bernilai 0, maka p-value bernilai 0.5
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini
Public Function Gauss(ByVal z As Double) As Double Dim y As Double Dim p As Double Dim w As Double If z = 0.0 Then p = 0.0 Else y = Math.Abs(z) / 2 If y >= 3.0 Then p = 1.0 ElseIf y < 1.0 Then w = y * y p = ((((((((0.000124818987 * w - 0.001075204047) * w + 0.005198775019) * w - 0.019198292004) * w + 0.059054035642) * w - 0.151968751364) * w + 0.319152932694) * w - 0.5319230073) * w + 0.797884560593) * y * 2.0 Else y = y - 2.0 p = (((((((((((((-0.000045255659 * y + 0.00015252929) * y - 0.000019538132) * y - 0.000676904986) * y + 0.001390604284) * y - 0.00079462082) * y - 0.002034254874) * y + 0.006549791214) * y - 0.010557625006) * y + 0.011630447319) * y - 0.009279453341) * y + 0.005353579108) * y - 0.002141268741) * y + 0.000535310849) * y + 0.999936657524 End If End If If z > 0.0 Then Return (p + 1.0) / 2 Else Return (1.0 - p) / 2 End If End Function
5. Tentukan nilai alpha sebagai taraf signifikansi
Normalnya, nilai alpha dapat dipilih dari tabel signifikasi Chi-squared, dengan pilihan nilai alpha adalah 0.99, 0.95, 0.90, 0.50, 0.10, 0.05, 0.01, 0.001
Dalam kasus ini akan digunakan nilai alpha sebesar 0.05
Const alpha As Double = 0.05
6. Jika nilai p-value kurang dari nilai alpha, maka kejadian tersebut termasuk dalam kejadian yang tidak wajar
dan sebaliknya, jika nilai p-value lebih dari nilai alpha, maka kejadian tersebut termasuk dalam kejadian yang wajar
If p < alpha Then Console.WriteLine(vbCrLf & "Nilai p-value berada dibawah nilai taraf signifikansi sebesar " & alpha.ToString("F2")) Console.WriteLine("Oleh karena itu, kejadian ini merupakan kejadian yang tidak wajar") Console.WriteLine("Artinya, ada 1 atau lebih data yang sangat mempengaruhi hasil kuisioner") Else Console.WriteLine(vbCrLf & "Nilai p-value berada diatas nilai taraf signifikansi sebesar " & alpha.ToString("F2")) Console.WriteLine("Oleh karena itu, kejadian ini termasuk dalam kejadian yang wajar") Console.WriteLine("Artinya, tidak ada data yang lebih mempengaruhi hasil kuisioner dibandingkan data lainnya") End If
Hasil akhir adalah: (klik untuk perbesar gambar)
Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:
Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.
apakah algoritma ini cocok untuk membuat program kuisioner/survey yg dimna ada bbrpa soal/pertanyaan.. dgn algoritma itu mngkin bsa di acak pertanyaan nya/kuisioner nya, jdi setiap org yg mau isi itu kuisioner/soal nya akan berbeda” urutan nya
jika memang tidak cocok, saya minta saran nya algoritma apa yg cocok untuk program sya
trimakasih
Berdasarkan contoh kasus diatas, algoritma ini digunakan untuk menganalisa validasi atas sebuah kasus saja. Untuk melakukan pengacakan sepertinya tidak terhubung dengan algoritma tertentu; anda hanya perlu membangkitkan variabel bilangan acak dan kemudian menyimpan indeks hasil pengacakan agar nantinya dapat dibandingkan dengan indeks asli dari pertanyaan tersebut.
Dalam pengenalan pola dengan ekstraksi fitur basis tekstur, selain dengan GLCM algoritma apa yang bagus untuk identifikasi motif kain ?
Trims.
Setelah melalui proses ekstraksi fitur, sepertinya banyak algoritma yang dapat digunakan untuk melakukan klasifikasi. Sebagai contoh silahkan melihat beberapa sistem kerja algoritma yang terdapat pada kategori https://piptools.net/category/algoritma/algortima-pengelompokan-klasifikasi-data/ ataupun https://piptools.net/category/algoritma/algoritma-optimasi/