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
** Hypothèse nulle H0 **: le coefficient de corrélation de population est de 0 (pas de corrélation similaire)
** Hypothèse d'opposition H1 **: le coefficient de corrélation de population n'est pas 0
À 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.
#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
df.sample(10)
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.
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()
... plus il est proche du bleu, plus la valeur p est élevée, et elle n'est pas rejetée ... ** C'est difficile à comprendre **
#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()
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 $)!
Recommended Posts