Analyse résiduelle en Python (Supplément: règles Cochrane)

introduction

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.

  1. Le nombre d'échantillons est-il suffisamment sécurisé par catégorie?

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.

Règles Cochrane

À 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).

Analyse résiduelle

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?

Site de référence

https://note.chiebukuro.yahoo.co.jp/detail/n71838

Recommended Posts

Analyse résiduelle en Python (Supplément: règles Cochrane)
Analyse d'association en Python
Analyse de régression avec Python
Analyse des ondes cérébrales avec Python: tutoriel Python MNE
Première analyse de régression simple en Python
Règles d'apprentissage Widrow-Hoff implémentées en Python
Implémentation des règles d'apprentissage Perceptron en Python
Analyse du squelette planaire dans Python (2) Hotfix
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Analyse de données python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
Analyse de survie apprise avec Python 2 - Estimation Kaplan-Meier
Effectuer une analyse d'entité à l'aide de spaCy / GiNZA en Python
Analyse de données en Python: une note sur line_profiler
Plink en Python
[Construction de l'environnement] Analyse des dépendances à l'aide de CaboCha avec Python 2.7
Constante en Python
Expérimentez avec les règles de mot de passe NIST 800-63B en Python
apprentissage python (supplément)
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Environnement enregistré pour l'analyse des données avec Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
2. Analyse multivariée définie dans Python 1-1. Analyse de régression simple (scikit-learn)
2. Analyse multivariée décrite dans Python 3-2. Analyse en composantes principales (algorithme)
Fusion de la mise en œuvre du tri / analyse du montant du calcul et de l'expérimentation en Python
2. Analyse multivariée expliquée dans Python 7-3. Arbre de décision [arbre de retour]
Liste du code Python utilisé dans l'analyse de Big Data
2. Analyse multivariée décrite dans Python 2-1. Analyse de régression multiple (scikit-learn)