Während ich während des Statistikstudiums verschiedene Formeln lernte, konnte ich mich nicht an den ** unkorrelierten Test ** erinnern, also starrte ich auf die Formeln. Und da es etwas gab, auf das ich neugierig war, ließ ich Python das Ergebnis berechnen und zeichnen.
--Umgebung
** Nullhypothese H0 **: Populationskorrelationskoeffizient ist 0 (keine ähnliche Korrelation)
** Oppositionshypothese H1 **: Populationskorrelationskoeffizient ist nicht 0
Suchen Sie anhand der folgenden Formel die Statistik $ t $ und erhalten Sie den Wert $ p $. Der Freiheitsgrad $ ν $ für die Statistik $ t $ beträgt $ n-2 $.
t = \frac{|r| \sqrt{n - 2}}{\sqrt{1 - r^2}}
Wenn das Signifikanzniveau $ a $ 0,05 beträgt, reicht es aus, den $ p $ -Wert von 0,025 Punkten im zweiseitigen Test zu sehen.
#Wird zur Datenerstellung verwendet
import pandas as pd
import numpy as np
import math
from scipy import stats
import itertools
#Wird zum Zeichnen von Grafiken verwendet
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
#Korrelationskoeffizient(coef)Und Stichprobengröße(n)Wenn Sie setzen, t Wert(t),Freiheitsgrad(df), P-Wert(p)Erstellen Sie eine Funktion, die zurückgibt.
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) #Der p-Wert ist gerundet.
return coef, n, t, df, p
#Anzahl der Proben von 10 bis 1000 in 10 Schritten
samplesizes = np.arange(10, 1001, 10)
#Korrelationskoeffizient-0.99 bis 0.0 bis 99.01 Schritte
coefficients = np.linspace(-0.99, 0.99, 199)
#print(coefficients)
#Überqueren Sie die beiden oben genannten(Direktes Produkt)
c_s = list(itertools.product(coefficients, samplesizes) )
#Fügen Sie die Liste mit dem Korrelationskoeffizienten und der Stichprobengröße in die Funktion Unkorreliert ein und konvertieren Sie die zurückgegebene Liste in einen DataFrame mit Pandas.
df_prelist = []
for i in range(len(c_s)):
df_prelist.append(Uncorrelated(c_s[i][0],c_s[i][1]))
#Die Vorbereitung ist abgeschlossen
df = pd.DataFrame(df_prelist,columns=['coef','sample_size','t','df','p_value'])
df ist so
df
df.sample(10)
Korrelationskoeffizient - Der t-Wert, der Freiheitsgrad und der p-Wert des Nichtkorrelationstests für 0,99 bis 0,99 und die Stichprobengröße 10 bis 1000 sind enthalten.
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('Korrelationskoeffizient', labelpad=15)
ax.set_ylabel('Stichprobengröße', labelpad=15)
ax.set_zlabel('p-Wert', labelpad=15)
plt.savefig('3D-Grafik.png', bbox_inches='tight', pad_inches=0.3)
plt.show()
... je näher es an Blau liegt, desto höher ist der p-Wert und es wird nicht zurückgewiesen ... ** Es ist schwer zu verstehen **
#p_Wert ist 0.Wenn es 025 oder höher ist`H0 nicht ablehnen`Anziehen
df['judge'] = 'H0 ablehnen'
for index, series in df.query('p_value > 0.025').iterrows():
df.at[index, 'judge'] = 'H0 nicht ablehnen'
#Grafik neu zeichnen
grid = sns.FacetGrid( df, hue = 'judge', height=10 )
grid.map(plt.scatter, 'coef', 'sample_size')
grid.add_legend(title='Beurteilung')
plt.ylabel('Stichprobengröße')
plt.xlabel('Korrelationskoeffizient')
plt.title('Korrelationskoeffizient x Stichprobengröße Mit oder ohne Ablehnung des Nichtkorrelationstests', size=30)
#Zeichne eine rote Linie
plt.vlines(df[df['judge'] == 'H0 nicht ablehnen']['coef'].max(), -50, 50, color='red', linestyles='dashed')
plt.vlines(df[df['judge'] == 'H0 nicht ablehnen']['coef'].min(), -50, 50, color='red', linestyles='dashed')
plt.annotate('|' + str(df[df['judge'] == 'H0 nicht ablehnen']['coef'].max().round(2) ) + '|Die Außenseite ist n=Wenn es 10 oder mehr ist, lehnen Sie alle ab',
xy=(df[df['judge'] == 'H0 nicht ablehnen']['coef'].max(), 80), size=15, color='black')
plt.savefig('2D-Grafik.png', bbox_inches='tight', pad_inches=0.3)
plt.show()
In der Tat wird **, wenn der Korrelationskoeffizient der Stichprobe größer als der Absolutwert von 0,62 ist, die Nullhypothese H0 selbst bei n = 10 verworfen und "der Populationskorrelationskoeffizient ist nicht 0" angenommen ** ($ a =) 0,05 $)!
Recommended Posts