Algoritma Khi-kuadrat / Chi-squared 4


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:

KuisionerJurusan Mahasiswa
Kuisioner AKedokteran
Kuisioner BInformatika
Kuisioner CAkuntansi
Kuisioner DManajemen
Kuisioner EKedokteran
Kuisioner FAkuntansi
Kuisioner GInformatika
Kuisioner HInformatika
Kuisioner IInformatika
Kuisioner JKedokteran
Kuisioner KManajemen
Kuisioner LInformatika
Kuisioner MInformatika
Kuisioner NKesenian
Kuisioner OKedokteran
Kuisioner PInformatika
Kuisioner QKedokteran
Kuisioner RInformatika
Kuisioner SManajemen
Kuisioner TInformatika



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)

cmd45

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.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

4 pemikiran di “Algoritma Khi-kuadrat / Chi-squared

  • Rudy Rinaldi

    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