[Introduction aux statistiques] Quel type de distribution est la distribution t, la distribution chi carré et la distribution F? Un petit résumé de l'utilisation de [python]

J'ai écrit un article comme mémorandum d'apprentissage statistique. Cette fois, nous avons résumé la distribution t, la distribution du chi carré et la distribution F. Nous avons également résumé l'estimation de l'intervalle de confiance pertinent et le test F.

distribution t

Il s'agit d'une distribution de probabilité de type continu qui est utilisée à la place de la distribution normale standard lors de l'estimation / test de la moyenne de la population, etc. à partir d'un petit échantillon avec une variance de population inconnue. Avant d'expliquer la distribution t, examinons d'abord la valeur z pour la moyenne de l'échantillon $ \ bar x $.

z_\bar x=\frac{\bar x -\mu}{\sqrt{\frac{\sigma^2}{n}}}

z suit une distribution normale standard, mais ne peut être calculé sans connaître la variance de la population $ \ sigma ^ 2 $. Il y a peu de cas où la dispersion de la population est claire de façon réaliste. Par conséquent, cette distribution de population $ \ sigma ^ 2 $ est remplacée par la distribution non biaisée $ {\ hat {\ sigma}} ^ 2 $. Une variance sans biais est une statistique ajustée en multipliant $ \ frac {n} {n-1} $ de sorte que la valeur attendue de la variance de l'échantillon $ s ^ 2 $ corresponde à la variance de la population. Multipliez par $ \ frac {n} {n-1} $ car si n n'est pas assez grand, la variance attendue de l'échantillon sera inférieure à la variance de la population.

t_\bar x=\frac{\bar x -\mu}{\sqrt{\frac{\hat\sigma^2}{n}}}=\frac{\bar x -\mu}{\sqrt{\frac{s^2}{n-1}}}

C'est la valeur t. Certains sites, etc., ne remplacent pas par une distribution non biaisée, mais par une distribution d'échantillons (voir la formule ci-dessous).

t_\bar x=\frac{\bar x -\mu}{\sqrt{\frac{s^2}{n}}}=\frac{\bar x -\mu}{\frac{s}{\sqrt{n}}}

À propos, $ \ frac {s} {\ sqrt {n}} $ est appelé l'erreur standard de la moyenne de l'échantillon. Et cette valeur t suit la fonction de densité de probabilité suivante.

f(t)=\frac{\Gamma((\nu+1) / 2)}{\sqrt{\nu \pi} \Gamma(\nu / 2)}\left(1+t^{2} / \nu\right)^{-(\nu+1) / 2}

$ \ nu $ est le degré de liberté ($ n $ -1). $ \ Gamma (\ bullet) $ est une fonction gamma, qui représente la puissance d'un nombre complexe. La forme de la distribution t change en fonction de $ \ nu $.

Voyons maintenant la distribution.

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

x = np.linspace(-6, 6, 1000)
fig, ax = plt.subplots(1,1, figsize=(10,7))

linestyles = [':', '--', '-.', '-']
deg_of_freedom = [1, 5, 30]
for df, ls in zip(deg_of_freedom, linestyles):
    ax.plot(x, stats.t.pdf(x, df), linestyle=ls, label=f'df={df}')

ax.plot(x, stats.norm.pdf(x, 0, 1), linestyle='-', label='Standard Normal Distribution')

plt.xlim(-6, 6)
plt.ylim(0, 0.4)
plt.title('t-distribution')
plt.legend()
plt.savefig('t-distribution.png')
plt.show()

t-distribution.png

Vous pouvez voir que la forme de la distribution change en fonction du degré de liberté. Et nous pouvons voir que plus la taille de l'échantillon est grande, plus la distribution normale standard est proche.

Estimation de l'intervalle de confiance de la valeur moyenne

Utilisons cette distribution pour estimer l'intervalle de confiance dans lequel nous nous attendons à ce que la moyenne de population $ \ mu $ se trouve.

Supposons que vous obteniez les données suivantes.

data = [np.random.randn() for _ in range(10)]
print(data)
# >>> [-0.14917153222917484, 0.7951720064790415, 0.662152983830839, 0.430521357874449, -2.48235088848113, 0.6166315938744059, 1.055076432212844, 0.7400193126962409, 0.90477126838906, -0.10509107744284621]
print(f"Moyenne de l'échantillon:{np.mean(data)}")
# >>>Moyenne de l'échantillon:0.24677314572037296
print(f"Dispersion des échantillons:{np.var(data)}")
# >>>Dispersion des échantillons:0.9702146524752354
print(f"Écart type d'échantillon:{np.sqrt(np.var(data))}")
# >>>Écart type d'échantillon:0.9849947474353533

Ces données sont générées sur la base d'une distribution normale standard, donc la vraie moyenne $ \ mu $ est de 0. L'estimation de l'intervalle de confiance avec 9 et 95% de degrés de liberté peut être obtenue en modifiant la formule comme suit.

-2.262≤t_{\bar x}≤2.262
-2.262≤\frac{\bar x-\mu}{\frac{s}{\sqrt{n-1}}}≤2.262
\bar x - 2.262\frac{s}{\sqrt{n-1}}≤\mu≤\bar x + 2.262\frac{s}{\sqrt{n-1}}

Puisque les données sont aussi petites que 10 cette fois, je les ai calculées en utilisant le type de substitution de dispersion sans biais. De plus, le nombre 2,262 est tiré de la table de distribution t à l'intersection avec 9 degrés de liberté et 2,5%. Par conséquent, il y a 95% de chances que la moyenne de l'échantillon ci-dessus ait une moyenne de population.

bottom = np.mean(data) - 2.262*(np.sqrt(np.var(data))/(np.sqrt(len(data)-1)))
up = np.mean(data) + 2.262*(np.sqrt(np.var(data))/(np.sqrt(len(data)-1)))
print(f'{bottom} ≤ μ ≤ {up}')
# >>> -0.4959128938458835 ≤ μ ≤ 0.9894591852866295

Avec la bibliothèque

bottom, up = stats.t.interval(alpha=0.95, loc=np.mean(data), scale=np.sqrt(np.var(data)/(len(data)-1)), df=len(data)-1)
print(f'{bottom} ≤ μ ≤ {up}')
# >>> -0.49596449533733994 ≤ μ ≤ 0.9895107867780859

On peut estimer que

Distribution du chi carré

La distribution du chi carré est ** qui peut gérer plusieurs variables à la fois, comme la distribution de la variance de l'échantillon.

Tout d'abord, la définition de la valeur du chi carré est indiquée ci-dessous.

\chi^2_{(n)}\equiv\sum^n_{i=1}z^2_i=\frac{\sum^n_{i=1}(x_i-\mu)^2}{\sigma^2}

Le subordonné $ n $ de $ \ chi ^ 2 $ représente le degré de liberté et est basé sur la moyenne de la population, donc $ degré de liberté = n $. Plus le degré de liberté est élevé, plus la valeur du chi carré est élevée.

Et la fonction de densité de probabilité de la distribution du chi carré est la suivante.

f(x ; k)=\frac{1}{2^{k / 2} \Gamma(k / 2)} x^{k / 2-1} e^{-x / 2}

La répartition est la suivante.

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x = np.linspace(0, 10, 1000)
fig,ax = plt.subplots(1,1, figsize=(10,7))
 
linestyles = [':', '--', '-.', '-']
deg_of_freedom = [1, 3, 5, 10]
for df, ls in zip(deg_of_freedom, linestyles):
    ax.plot(x, stats.chi2.pdf(x, df), linestyle=ls, label=f'df={df}')

plt.xlim(0, 10)
plt.ylim(0, 1.0)
 
plt.title('chi 2 distribution')
plt.legend()
plt.savefig('chi2distribution.png')
plt.show()

chi2distribution.png

Estimation par intervalles de la variance de la population

La formule ci-dessus était la moyenne de la population $ \ mu $, alors remplaçons-la par la moyenne de l'échantillon $ \ bar x $.

\chi^2_{(n-1)}=\frac{\sum^n_{i=1}(x_i-\bar x)^2}{\sigma^2}

Le degré de liberté est n-1. Ici, s'il est exprimé en utilisant une distribution non biaisée $ \ hat \ sigma ^ 2 $,

\chi^2_{(n-1)}=\frac{(n-1)\hat \sigma^2}{\sigma^2}

Et nous pouvons voir que la valeur $ \ chi ^ 2 $ est proportionnelle à la variance sans biais. Ainsi, lorsque nous résolvons la variance de la population,

\sigma^2=\frac{(n-1)\hat \sigma^2}{\chi^2_{(n-1)}}

Par conséquent, l'intervalle de confiance de la variance de la population peut être estimé.

Les données utilisées pour la distribution t sont utilisées.

data = [np.random.randn() for _ in range(10)]
print(data)
# >>> [-0.14917153222917484, 0.7951720064790415, 0.662152983830839, 0.430521357874449, -2.48235088848113, 0.6166315938744059, 1.055076432212844, 0.7400193126962409, 0.90477126838906, -0.10509107744284621]
print(f"Moyenne de l'échantillon:{np.mean(data)}")
# >>>Moyenne de l'échantillon:0.24677314572037296
print(f"Dispersion des échantillons:{np.var(data)}")
# >>>Dispersion des échantillons:0.9702146524752354
print(f"Écart type d'échantillon:{np.sqrt(np.var(data))}")
# >>>Écart type d'échantillon:0.9849947474353533

Lorsque le degré de liberté est de 9, l'intervalle de confiance peut être calculé comme suit.

\frac{(n-1)\hat \sigma^2}{\chi^2_{(n-1,\alpha/2)}}≤\sigma^2≤\frac{(n-1)\hat \sigma^2}{\chi^2_{(n-1,1-\alpha/2)}}
\frac{(n-1)\hat \sigma^2}{19.02}≤\sigma^2≤\frac{(n-1)\hat \sigma^2}{2.7}

Donc,

bottom = ((len(data)-1)*np.var(data, ddof=1))/19.02
up = ((len(data)-1)*np.var(data, ddof=1))/2.7
print(f'{bottom} ≤ σ^2 ≤ {up}')
# >>> 0.5101023409438672 ≤ σ^2 ≤ 3.593387601760131

Une dispersion non biaisée est obtenue en définissant «ddof = 1» sur «np.var (data, ddof = 1))». Vous pouvez utiliser la bibliothèque pour obtenir les valeurs dans la table de distribution du chi carré.

chi2_025, chi2_975 = stats.chi2.interval(alpha=0.95, df=len(data)-1)
bottom = ((len(data)-1)*np.var(data, ddof=1))/chi2_975
up = ((len(data)-1)*np.var(data, ddof=1))/chi2_025
print(f'{bottom} ≤ σ^2 ≤ {up}')
# >>> 0.5100281214306344 ≤ σ^2 ≤ 3.5928692971228506

Distribution F

La distribution F est un ** suivi de statistiques basées sur deux échantillons choisis au hasard parmi deux populations **. Cette propriété est utilisée pour tester si les variances des deux populations dont elles sont extraites sont les mêmes. Maintenant, en ce qui concerne la valeur F, la valeur F est ** le rapport de deux valeurs $ \ chi ^ 2 $ choisies au hasard parmi deux populations qui suivent une distribution normale **. Il est important qu'il suive une distribution normale.

F_{(\nu_1, \nu_2)}=\frac{\chi^2_{(\nu_1)}/\nu_1}{\chi^2_{(\nu_2)}/\nu_2}

De plus, la fonction de densité de probabilité est la suivante.

f\left(x ; k_{1}, k_{2}\right)=\frac{\Gamma\left(\frac{k_{1}+k_{2}}{2}\right) x^{\frac{k_{1}-2}{2}}}{\Gamma\left(\frac{k_{1}}{2}\right) \Gamma\left(\frac{k_{2}}{2}\right)\left(1+\frac{k_{1}}{k_{2}} x\right)^{\frac{k_{1}+k_{2}}{2}}}\left(\frac{k_{1}}{k_{2}}\right)^{\frac{k_{1}}{2}}

La répartition est la suivante.

fdistribution.png

Test F

Le test F teste qu'il existe une différence dans les variances des deux groupes. Si les distributions de population ($ \ sigma ^ 2_1, \ sigma ^ 2_2 $) des deux groupes sont identiques, la valeur F sera la suivante.

F=\frac{\chi^2_{(\nu_1)}/\nu_1}{\chi^2_{(\nu_2)}/\nu_2}=\frac{\frac{\nu_1\hat \sigma^2_1}{\sigma^2_1}/\nu_1}{\frac{\nu_2\hat \sigma^2_2}{\sigma^2_2}/\nu_2}=\frac{\hat \sigma^2_1}{\hat \sigma^2_2}

Puisque nous échantillonnons à partir de la même variance de population, il devrait s'approcher de 1 s'il n'y a pas de différence de variance. Inversement, si la valeur F est supérieure à 1 (généralement celle avec la plus grande dispersion est la molécule), la dispersion de la population est susceptible d'être différente.

Je vais vraiment le tester. Quant aux données, essayez de générer les données suivantes.

#Échantillon de 10 hommes japonais
np.random.seed(1)
Japan = np.round([np.random.normal(64, 9, 10)],1).reshape(10)
jp_var = np.var(Japan, ddof=1)
#Échantillon de 10 hommes américains
np.random.seed(1)
US = np.round([np.random.normal(87, 12, 10)],1).reshape(10)
us_var = np.var(US, ddof=1)
print(f'Dispersion impartiale du japonais:{jp_var}')
# >>>Dispersion d'échantillons japonais:127.71955555555557
print(f'Dispersion impartiale des Américains:{us_var}')
# >>>Dispersion d'échantillons américains:226.57377777777785
print(f'Valeur F:{us_var/jp_var}')
# >>>Valeur F:1.7739944113665709

Le test F est Hypothèse nulle: les variances des deux groupes sont égales Hypothèse d'opposition: il y a une différence dans la dispersion des deux groupes ça ira. Dans la distribution F avec le degré de liberté (9,9), si la zone jaune du graphique ci-dessous correspond à la valeur p et que la valeur p est inférieure ou égale à 0,05, l'hypothèse nulle est rejetée.

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x = np.linspace(0.000001, 8, 1000)
fig,ax = plt.subplots(1,1, figsize=(10,7))
 
df = (9,9)
ls = '-'
y = stats.f.pdf(x, df[0], df[1])
ax.plot(x, y, linestyle=ls, label=f'k = {df[0]}, {df[1]}')

plt.xlim(0, 8)
plt.ylim(0, 1.0)
plt.fill_between(x, y, 0, where=x>=us_var/jp_var, facecolor='y',alpha=0.5)
plt.title('F distribution')
plt.legend()
plt.savefig('fdistribution_p.png')
print(f'p-value:{stats.f.sf(us_var/jp_var, len(Japan)-1, len(US)-1)}')
# >>> p-value:0.20301975133837194
plt.show()

fdistribution_p.png

Puisque la valeur p est 0,203 ..., qui est supérieure à 0,05 et que l'hypothèse nulle ne peut être rejetée, il semble qu'il n'y ait pas de différence dans la variance des deux groupes.

référence

Recommended Posts

[Introduction aux statistiques] Quel type de distribution est la distribution t, la distribution chi carré et la distribution F? Un petit résumé de l'utilisation de [python]
[Introduction à Python] Quelle est la différence entre une liste et un taple?
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
[Python] Qu'est-ce qu'un tuple? Explique comment utiliser sans toucher et comment l'utiliser avec des exemples.
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
[Introduction à Python] Comment utiliser l'opérateur booléen (et ・ ou ・ non)
[Python2.7] Résumé de l'utilisation d'unittest
Résumé de l'utilisation de la liste Python
[Python2.7] Résumé de l'utilisation du sous-processus
Comment utiliser is et == en Python
[Python] Qu'est-ce que pip? Expliquez la liste des commandes et comment l'utiliser avec des exemples réels
[Python] Qu'est-ce qu'un argument formel? Comment définir la valeur initiale
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[Introduction à Python] Quelle est la méthode de répétition avec l'instruction continue?
Résumé de l'utilisation de MNIST avec Python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
[CleanArchitecture avec Python] Appliquez CleanArchitecture à une API simple étape par étape, et essayez de comprendre "quel type de changement est fort" dans la base de code.
[Introduction à Udemy Python3 + Application] 27. Comment utiliser le dictionnaire
[Introduction à Udemy Python3 + Application] 30. Comment utiliser l'ensemble
[Python] Résumé de la façon de spécifier la couleur de la figure
Qu'est-ce qu'un moteur de recommandation? Résumé des types
[Introduction à Python] Quelle est la méthode d'installation recommandée du système de gestion de paquets pip?
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
[python] Résumé de la récupération des listes et des éléments du dictionnaire
Comment utiliser la méthode __call__ dans la classe Python
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Introduction de DataLiner ver.1.3 et comment utiliser Union Append
Comment déterminer l'existence d'un élément sélénium en Python
Une histoire sur l'écriture d'AWS Lambda et de devenir un peu accro aux valeurs par défaut des arguments Python
[Introduction à Python] Qu'est-ce que Python, le langage de programmation le plus puissant actuellement?
Résumé de l'utilisation de pandas.DataFrame.loc
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Comment donner et signifier l'option des contraintes dans scipy.optimize.minimize
Comment vérifier la taille de la mémoire d'une variable en Python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
[Python] Comment obtenir le premier et le dernier jour du mois
Résumé de l'utilisation de pyenv-virtualenv
Comment utiliser l'astérisque (*) en Python. C'est peut-être tout? ..
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Résumé de l'utilisation de csvkit
[Python] Comment utiliser l'instruction for. Une méthode d'extraction en spécifiant une plage ou des conditions.
Apprenez le flux de l'estimation bayésienne et comment utiliser Pystan grâce à un modèle de régression simple
Utilisez AWS lambda pour récupérer les actualités et notifier régulièrement LINE des mises à jour [python]
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
[Python] Comment spécifier la position d'affichage de la fenêtre et la taille de matplotlib
Quel est le fichier XX à la racine d'un projet Python populaire?
[Python] Explique comment utiliser la fonction range avec un exemple concret
[Python] Comment utiliser la fonction enumerate (extraire le numéro d'index et l'élément)
[Introduction aux data scientists] Bases de la probabilité et des statistiques ♬ Variable de probabilité / probabilité et distribution de probabilité
Introduction du cadre de cybersécurité "MITRE CALDERA": utilisation et formation
Quel genre de livre est le "Python Crash Course" le plus vendu au monde?
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
[Introduction à Python] Comment utiliser la classe en Python?
Comment installer et utiliser pandas_datareader [Python]
[Pandas] Qu'est-ce que set_option [Comment utiliser]
Quel type de langage de programmation est Python?
[python] [meta] Le type de python est-il un type?
python: Comment utiliser les locals () et globals ()