[PYTHON] [Test de décorrélation] J'ai essayé d'éteindre la ligne de démarcation avec ou sans rejet

introduction

Dans le processus d'apprentissage de diverses formules tout en étudiant les statistiques, je ne me souvenais pas du ** test non corrélé **, alors je regardais les formules. Et comme il y avait quelque chose qui m'intéressait, j'ai laissé Python calculer et dessiner le résultat.

--Environnement

Test de non-corrélation

Il teste si l'on peut dire que "la population a la même corrélation" à partir du coefficient de corrélation obtenu à partir de l'échantillon.

À partir de la formule ci-dessous, trouvez la statistique $ t $ et obtenez la valeur $ p $. Le degré de liberté $ ν $ pour la statistique $ t $ est $ n-2 $.

t = \frac{|r| \sqrt{n - 2}}{\sqrt{1 - r^2}}

Si le niveau de signification $ a $ est de 0,05, vous pouvez voir la valeur $ p $ de 0,025 point dans le test bilatéral.


... Je ne me souviens pas de cette formule car je ne l'utilise pas facilement. Cependant, je me suis dit: "Si n (taille de l'échantillon) est grand, la valeur t sera grande, ** après tout, c'est la taille de l'échantillon !! **", j'ai donc arrondi la taille de l'échantillon et le coefficient de corrélation, et * * J'ai regardé dans quelle mesure l'hypothèse nulle ne serait pas rejetée **.

Préparation

#Utilisé pour la création de données
import pandas as pd
import numpy as np
import math
from scipy import stats
import itertools

#Utilisé pour le dessin graphique
import matplotlib.pyplot as plt
import seaborn as sns
from mpl_toolkits.mplot3d import Axes3D


%matplotlib inline


plt.style.use('seaborn-darkgrid')
plt.rcParams['font.family'] = 'Yu Gothic'
plt.rcParams['font.size'] = 20


#Coefficient de corrélation(coef)Et taille de l'échantillon(n)Si vous mettez, valeur t(t),Degré de liberté(df), Valeur P(p)Créez une fonction qui renvoie.
def Uncorrelated(coef, n):
    t = (np.abs(coef) * math.sqrt( (n - 2) ) ) / (math.sqrt( ( 1 - (coef**2) ) ) )
    df = (n - 2)
    p = np.round(( 1 - stats.t.cdf(np.abs(t), df) ), 3) #La valeur p est arrondie.
    return coef, n, t, df, p


#Nombre d'échantillons de 10 à 1000 par incréments de 10
samplesizes = np.arange(10, 1001, 10)

#Coefficient de corrélation-0.99 à 0.0 à 99.01 incréments
coefficients = np.linspace(-0.99, 0.99, 199)
#print(coefficients)

#Rejoignez les deux ci-dessus(Produit direct)
c_s = list(itertools.product(coefficients, samplesizes) )

#Placez la liste contenant le coefficient de corrélation et la taille de l'échantillon dans la fonction Uncorrelated, et convertissez celle retournée en DataFrame avec Pandas.
df_prelist = []
for i in range(len(c_s)): 
    df_prelist.append(Uncorrelated(c_s[i][0],c_s[i][1])) 

#La préparation est terminée
df = pd.DataFrame(df_prelist,columns=['coef','sample_size','t','df','p_value'])

df est comme ça

df

image.png

df.sample(10)

image.png

Coefficient de corrélation - La valeur t, le degré de liberté et la valeur p du test de non-corrélation pour 0,99 à 0,99 et la taille de l'échantillon de 10 à 1000 sont inclus.

Dessin graphique

fig = plt.figure( figsize=(16, 12) )
ax = Axes3D(fig)
cm = plt.cm.get_cmap('RdYlBu')
mappable = ax.scatter( np.array(df['coef']), np.array(df['sample_size']), np.array(df['p_value']), c=np.array(df['p_value']), cmap=cm)
fig.colorbar(mappable, ax=ax)
ax.set_xlabel('Coefficient de corrélation', labelpad=15)
ax.set_ylabel('taille de l'échantillon', labelpad=15)
ax.set_zlabel('valeur p', labelpad=15)
plt.savefig('Graphique 3D.png', bbox_inches='tight', pad_inches=0.3)
plt.show()
3次元グラフ.png

... plus il est proche du bleu, plus la valeur p est élevée, et elle n'est pas rejetée ... ** C'est difficile à comprendre **

J'ai créé une colonne Judge et recréé le DataFrame avec une valeur p supérieure à 0,025 comme "Ne pas rejeter H0".

#p_la valeur est 0.Si c'est 025 ou plus`Ne rejetez pas H0`Mettez
df['judge'] = 'Rejeter H0'
for index, series in df.query('p_value > 0.025').iterrows():
    df.at[index, 'judge'] = 'Ne rejetez pas H0'


#Redessiner le graphique
grid = sns.FacetGrid( df, hue = 'judge', height=10 )
grid.map(plt.scatter, 'coef', 'sample_size')
grid.add_legend(title='Jugement')
plt.ylabel('taille de l'échantillon')
plt.xlabel('Coefficient de corrélation')
plt.title('Coefficient de corrélation x taille de l'échantillon Avec ou sans rejet du test de non-corrélation', size=30)

#Tracez une ligne rouge
plt.vlines(df[df['judge'] == 'Ne rejetez pas H0']['coef'].max(), -50, 50, color='red', linestyles='dashed')
plt.vlines(df[df['judge'] == 'Ne rejetez pas H0']['coef'].min(), -50, 50, color='red', linestyles='dashed')
plt.annotate('|' + str(df[df['judge'] == 'Ne rejetez pas H0']['coef'].max().round(2) ) + '|Le côté extérieur est n=Si c'est 10 ou plus, rejetez tout',
            xy=(df[df['judge'] == 'Ne rejetez pas H0']['coef'].max(), 80), size=15, color='black')
plt.savefig('Graphique 2D.png', bbox_inches='tight', pad_inches=0.3)
plt.show()
2次元グラフ.png

En effet, ** si le coefficient de corrélation de l'échantillon est supérieur à la valeur absolue de 0,62, l'hypothèse nulle H0 est rejetée même à n = 10 et "le coefficient de corrélation de population n'est pas 0" est adoptée ** ($ a =) 0,05 $)!



... Au fait, je me suis souvenu du but initial de "l'apprentissage de la formule" en écrivant cet article: upside_down:

Recommended Posts

[Test de décorrélation] J'ai essayé d'éteindre la ligne de démarcation avec ou sans rejet
J'ai essayé de notifier les informations de retard de train avec LINE Notify
Mayungo's Python Learning Episode 2: J'ai essayé de mettre des caractères avec des variables
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de mettre Pytest dans la bataille réelle
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ②
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ④
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel x Python ⑤
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ①
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ③
Osez remplir le formulaire sans utiliser de sélénium
J'ai essayé de découvrir les grandes lignes de Big Gorilla
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel × Python, mon résumé d'article ★
Je veux connaître la météo avec LINE bot avec Heroku + Python
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Introduction ~
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de savoir si ReDoS est possible avec Python
J'ai essayé de démarrer avec Bitcoin Systre le week-end
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé de couper une image fixe de la vidéo
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Implémentation ~
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Battle Edition ~
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
J'ai essayé d'exprimer de la tristesse et de la joie face au problème du mariage stable.
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
Touches de karaoké assorties ~ J'ai essayé de le mettre sur Laravel ~ <en route>
J'ai essayé d'extraire automatiquement les mouvements des joueurs Wiire avec un logiciel
J'ai essayé d'apprendre l'angle du péché et du cos avec le chainer
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python
J'ai essayé d'analyser la négativité de Nono Morikubo. [Comparer avec Posipa]
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé de visualiser le texte du roman "Weather Child" avec Word Cloud
J'ai essayé de visualiser le modèle avec la bibliothèque d'apprentissage automatique low-code "PyCaret"
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé de contrôler la bande passante et le délai du réseau avec la commande tc
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé de résumer la commande umask
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de commencer avec Hy
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste