J'ai essayé de programmer le test du chi carré en Python et Java.

Test du chi carré souvent utilisé dans les statistiques. Il s'agit d'une hypothèse nulle pour vérifier si les groupes d'échantillons sont liés les uns aux autres. J'ai pensé que ce serait amusant si je pouvais programmer cela. Reportez-vous à ce qui suit pour la méthode de calcul du test du chi carré.

http://kogolab.chillout.jp/elearn/hamburger/chap3/sec0.html


D'abord de Python

code

kai.py



import numpy as np


def chi_squared(array):
    #Obtenez la valeur totale verticale et horizontale
    low_sums = np.array(array).sum(axis=1)
    col_sums = np.array(array).sum(axis=0)
    #Obtenez le grand total
    the_total = sum(low_sums)
    #Obtenez la fréquence attendue
    ex_freq = []
    for i in low_sums:
        for j in col_sums:
            ex_freq.append(i * j/the_total)
    pass
    ex_freq = np.array(np.array_split(ex_freq, len(array)))
    diff = np.array(array) - ex_freq
    #Pour prendre en charge plusieurs lignes et colonnes
    ex_freq_flt = ex_freq.flatten()
    diff_flt = diff.flatten()
    return sum(diff_flt ** 2 / ex_freq_flt)


pass


def d_f(array):
    s = list(np.array(array).shape)
    d = 1
    for i in s:
        d *= (i - 1)
    return d


waku_mogu = [[435, 165],
             [265, 135]]

print("Le chi carré est", chi_squared(waku_mogu))
print("Le degré de liberté", d_f(waku_mogu))

"""
Résultat d'exécution
Kai au carré est 4.464285714285714
Le degré de liberté est 1

"""

La somme des colonnes, Numpy, peut être effectuée en une seule fois. c'est bien.


Ensuite, un programme qui se comporte de la même manière en Java

code

Kai.java



import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;

public class Kai {
    public static void main(String[] args) {

        Calc c = new Calc();
        double[][] waku_mogu = {{435, 165}, {265, 135}};
        System.out.println("Le chi carré est" + c.chi_squared(waku_mogu));
        System.out.println("Le degré de liberté" + c.d_f(waku_mogu));
    }
}


class Calc {


    public double chi_squared(double[][] arr) {
        List<Double> low_sums = new ArrayList<>();
        List<Double> col_sums = new ArrayList<>();
        List<Double> ex_freq = new ArrayList<>();
        List<Double> diff = new ArrayList<>();

        //Trouvez la valeur totale de chaque ligne.
        for (int i = 0; i < arr.length; i++) {
            double total_l = 0;
            for (int j = 0; j < arr[i].length; j++) {
                total_l += arr[i][j];
            }
            low_sums.add(total_l);
        }

        //Trouvez la valeur totale de chaque colonne. C'était le point le plus difficile...Numpy est une ligne
        for (int j = 0; j < arr[0].length; j++) {
            double total_c = 0;
            for (int i = 0; i < arr.length; i++) {
                total_c += arr[i][j];
            }
            col_sums.add(total_c);
        }

        double the_total = 0;
        Iterator<Double> iterator = low_sums.iterator();
        while (iterator.hasNext()) {
            double i = iterator.next();
            the_total += i;
        }

        iterator = low_sums.iterator();
        while (iterator.hasNext()) {
            double i = iterator.next();
            Iterator<Double> iterator2 = col_sums.iterator();
            while (iterator2.hasNext()) {
                double j = iterator2.next();
                ex_freq.add(i * j / the_total);
            }
        }

//Le deuxième point le plus difficile pour pouvoir gérer plusieurs lignes et colonnes
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                diff.add(arr[i][j] - ex_freq.get(count));
                count++;
            }
        }

        double chi_val = 0;
        for (int i = 0; i < ex_freq.size(); i++) {
            chi_val += Math.pow(diff.get(i), 2) / ex_freq.get(i);
        }
        return chi_val;
    }

    public int d_f(double[][] arr) {
        return (arr.length - 1) * (arr[0].length - 1);
    }
}


/*
Résultat d'exécution

Kai au carré est 4.464285714285714
Le degré de liberté est 1

 */

J'ai eu beaucoup de mal à obtenir la somme des lignes.

Bien sûr, je ne suis pas doué pour cela, mais Python est beaucoup plus propre à écrire. Mais j'aime aussi le sentiment que Java est en cours d'assemblage tout en vérifiant la sécurité par moi-même.

Recommended Posts

J'ai essayé de programmer le test du chi carré en Python et Java.
J'ai essayé d'énumérer les différences entre java et python
J'ai essayé de simuler "Birthday Paradox" avec Python
J'ai essayé la méthode des moindres carrés en Python
J'ai écrit une classe en Python3 et Java
J'ai essayé la programmation python pour la première fois.
J'ai comparé Java et Python!
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé d'utiliser google test et CMake en C
J'ai essayé de [gratter] des images de mode et des phrases de texte avec Python.
J'ai essayé d'illustrer le temps et le temps du langage C
J'ai créé une classe en Python et essayé de taper du canard
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
J'ai écrit la file d'attente en Python
J'ai essayé la notification de ligne en Python
J'ai écrit la pile en Python
Trouvons un graphique de la distribution de Poisson et de la distribution cumulative de Poisson en Python et Java, respectivement.
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
J'ai essayé d'utiliser l'API de reconnaissance vocale docomo et l'API Google Speech en Java
Comment afficher les octets de la même manière en Java et Python
Chevauchement d'expressions régulières en Python et Java
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
Ecrire le test dans la docstring python
Différences entre la syntaxe Python et Java
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'utiliser l'optimisation bayésienne de Python
J'ai essayé d'implémenter PPO en Python
Python: j'ai essayé le problème du voyageur de commerce
J'ai essayé le framework de test Python Tornado
Programmation avec Python
J'ai essayé de trouver la différence entre A + = B et A = A + B en Python, alors notez
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
Découvrez la partie I «Monnaie multinationale» du livre «Test Driven Development» avec Python
J'ai défini des variables d'environnement dans Docker et je les ai affichées en Python.
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
J'ai implémenté le modèle VGG16 avec Keras et essayé d'identifier CIFAR10
J'ai essayé de "lisser" l'image avec Python + OpenCV
Je veux faire le test de Dunnett en Python
[Python] J'ai essayé de remplacer le nom de la fonction par le nom de la fonction
Qu'est-ce que la «programmation fonctionnelle» et «orientée objet»? Édition Python
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé le web scraping en utilisant python et sélénium
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé la détection d'objets en utilisant Python et OpenCV
J'ai essayé de jouer à un jeu de frappe avec Python
Énumération des nombres premiers et jugement des nombres premiers en Python
À propos de la différence entre "==" et "is" en python
J'ai essayé la synthèse de fonctions et le curry avec python
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé le comportement d'E / S Eventlet non bloquant en Python
J'ai essayé d'implémenter la fonction gamma inverse en python
J'ai essayé d'ajouter un module Python 3 en C
J'ai essayé d'implémenter le tri sélectif en python
Programmation Python: j'ai essayé d'obtenir des informations sur l'entreprise (exploration) de Yahoo Finance aux États-Unis en utilisant BeautifulSoup4