Zielony Smok - logo witryny

Test zgodności Χ2 jako test losowości

Test zgodności χ2 przy wyszczególnionych parametrach rozkładu

Test będzie nam służył do badania losowości kluczy kryptograficznych.

Najprostszą miarą odchyleń rozkładu w próbie od rozkładu zakładanego jest wielkość obliczona z wzoru:

Test zgodności chisquare jako test losowości

gdzie:

Test zgodności chisquare jako test losowości oznacza liczebność z próby

Test zgodności chisquare jako test losowości oznacza liczebność oczekiwaną

k oznacza liczbę badanych grup

Liczba stopni swobody Test zgodności chisquare jako test losowości

Liczebność Test zgodności chisquare jako test losowości nie może być mniejsza od 5 (niektórzy autorzy przyjmują 10). Jeżeli liczebność jest mniejsza, należy zsumować sąsiednie liczebności, tak aby otrzymać Test zgodności chisquare jako test losowości (lub 10).

Jeżeli Test zgodności chisquare jako test losowości odczytane z tablicy dla Test zgodności chisquare jako test losowości stopni swobody, przy zakładanym poziomie istotności α hipotezę o zgodności rozkładu z próby z zakładanym odrzucamy.

Jeżeli Test zgodności chisquare jako test losowości nie ma podstaw do odrzucenia hipotezy.

Jeżeli Test zgodności chisquare jako test losowości obliczamy wartość:

Test zgodności chisquare jako test losowości

i wartość tę porównujemy z krytycznymi wartościami Test zgodności chisquare jako test losowości w rozkładzie t Studenta przy założonym poziomie istotności α i dla Test zgodności chisquare jako test losowości liczby stopni swobody.

Tab. Wartości krytyczne Test zgodności chisquare jako test losowości w teście Test zgodności chisquare jako test losowości

Test zgodności chisquare jako test losowości
Test zgodności chisquare jako test losowości

Przykład

W doświadczeniach genetycznych nad dziedziczeniem wzoru użyłkowania skrzydeł (A i B) oraz zabarwienia czułek (C i D) uzyskano następujące rozszczepienie cech:

120 osobników z cechą A i C

48 osobników z cechą A i D

36 osobników z cechą B i C

13 osobników z cechami B i D

przy zakładanym stosunku 9:3:3:1

Na poziomie istotności Test zgodności chisquare jako test losowości zweryfikować hipotezę, że wyniki doświadczenia są zgodne z teorią (czyli, że rozszczepienie cech ma zakładany stosunek (9:3:3:1).

Obliczenia przeprowadzamy w tabeli:

  liczebność w próbie Test zgodności chisquare jako test losowości prawdopodobieństwo zakładane Liczebność oczekiwana Test zgodności chisquare jako test losowości  
AC 120 Test zgodności chisquare jako test losowości Test zgodności chisquare jako test losowości Test zgodności chisquare jako test losowości
AD 48 Test zgodności chisquare jako test losowości Test zgodności chisquare jako test losowości Test zgodności chisquare jako test losowości
BC 36 Test zgodności chisquare jako test losowości Test zgodności chisquare jako test losowości Test zgodności chisquare jako test losowości
BD 13 Test zgodności chisquare jako test losowości Test zgodności chisquare jako test losowości Test zgodności chisquare jako test losowości
k=4 217 Test zgodności chisquare jako test losowości   Suma = 1,912

Test zgodności chisquare jako test losowości przy Test zgodności chisquare jako test losowości i Test zgodności chisquare jako test losowości stopniach swobody (odczytane z tablic). Ponieważ Test zgodności chisquare jako test losowości obliczonego nie ma podstaw do odrzucenia hipotezy. Wyniki doświadczenia są zgodne z teorią.

Klasy

Klasa TestZgodnosci.java
package crypto.vigenere;
public class TestZgodnosci{
	private static final int[] freqZaklad = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
	private static final int sum = sum(freqZaklad);
	private static final int k = freqZaklad.length;//liczba badanych grup
    private final int[] freqSample;//czestosc z proby
    private double chi;
	public TestZgodnosci(int[] freqSample){
		this.freqSample = freqSample;
		int n = sum(freqSample);
        //prawdopodobienstwa zakladane
        double[] probabZaklad = new double[k];
        //czestosci oczekiwane
        double[] freqOczek = new double[k];
		chi = 0.0;
		for(int i = 0; i < k; i++){
			probabZaklad[i] = (double)freqZaklad[i] / (double)sum;
			freqOczek[i] = n * probabZaklad[i];
			chi += Math.pow(freqSample[i] - freqOczek[i], 2) / freqOczek[i];
		}
	}
	public double getChi() {
		return chi;
	}
	private static int sum(int[] tabl) {
		int sum = 0;
		for (int value : tabl) {
			sum += value;
		}
		return sum;
	}
	public int[] getFreqSample() {
		return freqSample;
	}
}
Crypto05
package crypto.vigenere;
public class Crypto05 {
    public static void main(String[] args){
        int[] tabl = {120,48,36,13};
        TestZgodnosci tx = new TestZgodnosci(tabl);
        double chi = tx.getChi();
        System.out.println(chi);
    }
}

W klasie TestZgodnosci ustawiamy
private static final int[]freqZaklad = {9,3,3,1};
Po uruchomieniu klasy Crypto05 otrzymujemy wynik na konsoli:

1.9124423963133639