Il existe un test de tabulation croisée appelé χ-square test, et si vous faites cela, il existe une relation entre les catégories (par exemple, les hommes aiment le thé mais les femmes aiment le thé). (Préférez l'eau, etc.) peut être testé statistiquement. Voir le lien ci-dessus pour plus d'informations sur le test χ-carré lui-même. Cependant, il y a deux points à noter lors de l'exécution du test du carré square, même si la valeur p tombe en dessous du niveau de signification.
Besoin d'être considéré. Après tout, ce qui est testé par le test du carré χ est la présence ou l'absence de biais dans l'ensemble du tableau croisé, et même si les résultats du test sont significatifs, cela ne signifie pas que toutes les combinaisons de catégories sont liées.
À l'origine, c'est une norme qui doit être confirmée avant d'effectuer le test du carré χ. En tant que critère d'application du test χ-carré, il y a une déclaration selon laquelle ** les cellules avec une valeur attendue inférieure à 5 dans le tableau croisé ne doivent pas dépasser 20% du total **, ce qui correspond à la ** règle de Cochrane **. Il existe diverses théories dans la partie «20% ou plus», et diverses notations telles que «25% ou plus» et «plus de 20%» peuvent être vues. Utilisez scipy.stat.chi2_contingency pour le test χ-carré en Python. Je pense qu'il y en a beaucoup, alors vérifiez la règle Cochrane en utilisant la table des valeurs attendues retournée par cette fonction.
#La croix de test χ-carré est un tableau bidimensionnel numpy
x2, p, dof, expected = stats.chi2_contingency(cross)
expected = np.array(expected)
#Règles Cochrane
expected < 5
Si le nombre de cellules True est inférieur à 20% du total, la règle de Cochrane est satisfaite. Si vous constatez que vos données ne respectent pas cette règle, alors le test de probabilité précise de Fisher (https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83] % 83% E3% 82% B7% E3% 83% A3% E3% 83% BC% E3% 81% AE% E6% AD% A3% E7% A2% BA% E7% A2% BA% E7% 8E% 87 Il serait préférable de passer à% E6% A4% 9C% E5% AE% 9A).
Si vous effectuez un test χ-carré avec R, il retournera les résidus normalisés ajustés de chaque cellule en même temps que le test, donc il n'y a pas de problème, mais dans le cas de Python, il semble que vous deviez le faire manuellement.
La définition du résidu est
Résiduel = Valeur observée-Valeur attendue
Cependant, afin de calculer le résidu normalisé ajusté, il est nécessaire de définir à nouveau la ** variance résiduelle **.
Dispersion résiduelle= (1 - \frac{Somme périphérique horizontale}{Nombre total})(1 - \frac{Somme périphérique verticale}{Nombre total})
Veuillez vous référer au site de référence ci-dessous pour les détails. Quoi qu'il en soit, sur cette base, le résidu normalisé ajusté
Résidu normalisé ajusté= \frac{Erreur résiduelle}{\sqrt{Valeur attendue*Erreur résiduelle分散}}
Il peut être calculé comme suit. Si vous écrivez le flux jusqu'à ce point dans le code Python, cela ressemble à ceci.
#Erreur résiduelle
res = cross - expected
#Trouvez la variance résiduelle
res_var = np.zeros(res.shape)
it = np.nditer(cross, flags=['multi_index'])
while not it.finished:
var = (1 - (cross[:,it.multi_index[1]].sum() / cross.sum()))*(1-(cross[it.multi_index[0],:].sum() / cross.sum()))
res_var[it.multi_index[0], it.multi_index[1]] = var
it.iternext()
#Trouvez le résidu normalisé ajusté
stdres = res / np.sqrt(expected * res_var)
#Ce résidu normalisé ajusté est la valeur absolue 1.Une différence significative peut être revendiquée au-dessus de 96. Ici, la valeur est convertie de la table de distribution normale à la valeur p et affichée.
np.apply_along_axis(stats.norm.sf, 0, np.abs(stdres[0,:]))
L'avez-vous trouvé utile?
https://note.chiebukuro.yahoo.co.jp/detail/n71838
Recommended Posts