L'analyse des données semble toujours en plein essor. Compte tenu des données, qu'il s'agisse d'apprentissage automatique ou autre, la première chose à faire est de visualiser les données et d'obtenir l'hypothèse pour lancer l'analyse. Pour tester l'hypothèse, nous effectuons diverses analyses et calculons diverses statistiques.
Si vous faites cela, vous pouvez rencontrer une situation où vous voulez connaître ** la variation d'une population de statistiques **.
S'il s'agit de la moyenne des données, vous pouvez calculer l'erreur standard de la moyenne. C'est l'écart type divisé par la racine carrée du nombre de données.
Cependant, dans l'analyse, non seulement la moyenne, mais également diverses statistiques telles que la médiane, le centile et le coefficient de corrélation seront examinées. Et il n'y a pas de formule simple pour ceux-ci qui puisse quantifier des variations telles que ** l'erreur standard et l'intervalle de confiance **.
Dans un tel cas, le ** rééchantillonnage **, en particulier ** Bootstrap **, est utile.
Bootstrap crée d'abord des milliers d'ensembles de données similaires à partir des données d'origine par rééchantillonnage. Ensuite, pour chaque jeu de données, calculez les statistiques souhaitées. Ensuite, la distribution de la statistique est créée et l'erreur standard de la statistique peut être obtenue en calculant l'écart-type de la distribution.
À titre d'exemple, disons que vous avez des données de QI pour 20 personnes. Disons que les valeurs sont respectivement 61, 88, 89, 89, 90, 92, 93, 94, 98, 98, 101, 102, 105, 108, 109, 113, 114, 115, 120, 138. La distribution ressemble à ceci:
À ce moment, la valeur moyenne est de 100,85 et l'erreur standard de la moyenne est de 3,45.
Cependant, la distribution de ces valeurs, comme le revenu, est que la valeur médiane reflète le sentiment réel de la personne plutôt que la valeur moyenne. Donc, cette fois, j'aimerais utiliser le bootstrap pour trouver la variation de la valeur médiane, c'est-à-dire ** erreur standard de la médiane **.
La sangle de démarrage est réalisée selon le flux suivant.
1: Décidez combien de fois vous souhaitez rééchantillonner. Faites-en un grand nombre, tel que 500, 1000, 10000, 100000. Cette fois, j'essaierai 1000.
2: Rééchantillonner et générer artificiellement des données. À ce stade, ** autorisez la duplication et extrayez autant d'échantillons de données que le nombre d'échantillons des données d'origine **.
Par exemple, si les données d'origine étaient $ X_1, X_2, ..., X_5 $ et $ 5 $, voici un exemple de l'ensemble de données généré chaque fois qu'il est rééchantillonné.
Rééchantillonner 1 = $ X1, X2, X3, X3, X4 $ Rééchantillonner 2 = $ X1, X1, X3, X4, X4 $ Rééchantillonner 3 = $ X2, X2, X5, X5, X5 $ ...... Rééchantillonner 998 = $ X1, X2, X3, X4, X5 $ Rééchantillonner 999 = $ X1, X3, X4, X5, X5 $ Rééchantillonner 1000 = $ X3, X3, X3, X3, X4 $
De cette manière, la duplication est autorisée pour le nombre déterminé à l'étape 1, et des échantillons de données sont extraits à plusieurs reprises pour le nombre de données d'origine, et les données sont créées artificiellement.
L'échantillon de données inclus dans chaque rééchantillonnage est aléatoire. Parfois, les cinq auront la même valeur, et parfois les cinq auront des valeurs différentes.
3: Pour chaque rééchantillonnage, calculez les statistiques que vous souhaitez trouver. Quelle que soit la médiane, chaque donnée rééchantillonnée est utilisée pour trouver les statistiques. Si vous rééchantillonnez 1000 fois, vous pouvez obtenir 1000 statistiques.
Rééchantillonner 1 = $ X1, X2, X3, X3, X4 $ $ \ en $ Statistiques = $ S1 $ Rééchantillonner 2 = $ X1, X1, X3, X4, X4 $ $ \ to $ Statistics = $ S2 $ Rééchantillonner 3 = $ X2, X2, X5, X5, X5 $ $ \ à $ Statistics = $ S3 $ ...... Rééchantillonner 998 = $ X1, X2, X3, X4, X5 $ $ \ à $ Statistics = $ S998 $ Rééchantillonner 999 = $ X1, X3, X4, X5, X5 $ $ \ en $ Statistics = $ S999 $ Rééchantillonner 1000 = $ X3, X3, X3, X3, X4 $ $ \ en $ Statistiques = $ S1000 $
Vous avez beaucoup de statistiques. Et pensez comme ça.
«Vous pouvez considérer la distribution de ce lot de statistiques comme ** presque la même que celle de la population de cette statistique **! Parce que ** après plus d'expérimentation et beaucoup de données, c'est similaire. Seules les données de valeur augmenteront ** Parce que !! "
Ainsi, bootstrap utilise des astuces statistiques pour augmenter le nombre de données, pas expérimentalement. Et si le nombre de données est important dans une certaine mesure, la distribution doit être aussi proche que possible de la distribution de la population. 4: Calculez la variation (erreur standard, intervalle de confiance, etc.) en utilisant la distribution statistique obtenue Par exemple, ** l'erreur standard est l'écart type de la distribution de la population **, vous pouvez donc simplement trouver l'écart-type de la distribution statistique obtenue.
De cette façon, il est possible de trouver la variation des statistiques qui vous intéresse.
Faisons-le avec python (Matlab / Octave est également ci-dessous).
Tout d'abord, procurez-vous la bibliothèque dont vous avez besoin.
# import librarys
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
Utilisez Numpy pour placer les données dans le tableau.
# get data
iq = np.array([61, 88, 89, 89, 90, 92, 93,
94, 98, 98, 101, 102, 105, 108,
109, 113, 114, 115, 120, 138])
En tant que statistiques de base, calculez la valeur moyenne, l'erreur standard de la valeur moyenne et la valeur médiane.
# compute mean, SEM (standard error of the mean) and median
mean_iq = np.average(iq)
sem_iq = np.std(iq)/np.sqrt(len(iq))
median_iq = np.median(iq)
Nous avons pu calculer la moyenne: 100,85, l'erreur standard de la moyenne: 3,45 et la médiane: 99,5, respectivement.
Exécutez un bootstrap pour trouver l'erreur standard de la médiane. Pour vérifier si le bootstrap est correct, l'erreur standard de la valeur moyenne est également calculée.
Pour trier les valeurs entières consécutives de 1 à n de manière aléatoire avec des doublons en python, procédez comme suit.
np.random.choice(n,n,replace=True)
Utilisez ceci pour rééchantillonner le bootstrap.
# bootstrap to compute sem of the median
def bootstrap(x,repeats):
# placeholder (column1: mean, column2: median)
vec = np.zeros((2,repeats))
for i in np.arange(repeats):
# resample data with replacement
re = np.random.choice(len(x),len(x),replace=True)
re_x = x[re]
# compute mean and median of the "new" dataset
vec[0,i] = np.mean(re_x)
vec[1,i] = np.median(re_x)
# histogram of median from resampled datasets
sns.distplot(vec[1,:], kde=False)
# compute bootstrapped standard error of the mean,
# and standard error of the median
b_mean_sem = np.std(vec[0,:])
b_median_sem = np.std(vec[1,:])
return b_mean_sem, b_median_sem
Si vous exécutez cette fonction avec x = iq, repeats = 1000, vous pouvez voir la distribution des 1000 valeurs médianes trouvées par le bootstrap.
...... Je pense qu'il aurait été préférable d'avoir plus de répétitions.
Pour le moment, l'erreur standard de la valeur médiane peut être obtenue à partir de cette distribution. Calculez simplement l'écart type de ** 1000 valeurs médianes **.
De même, calculez l'erreur standard de la valeur moyenne.
Premièrement, l'erreur standard de la valeur moyenne obtenue à partir des données d'origine est de 3,45, donc c'est assez proche. Le bootstrap semble avoir correctement estimé la variation des statistiques.
point important Le bootstrap ** rééchantillonne au hasard, donc les résultats seront légèrement différents à chaque fois que vous exécutez **. Pour réduire la variation des résultats et effectuer des estimations plus précises, vous devez augmenter le nombre d'itérations (~ 10 000).
Bootstrap vous permet d'estimer les variations des statistiques d'intérêt par rééchantillonnage.
Je pense que quiconque pense au rééchantillonnage dans les statistiques, y compris le bootstrap, est un génie. En augmentant artificiellement les données et en rapprochant la répartition de la population, vous serez libéré des pénalités de continuer à collecter des données pour le moment! Bien sûr, peu importe combien vous rééchantillonnez, vous ne pourrez jamais approcher la population à moins de collecter réellement des données et de collecter des exemples représentatifs de la population.
Le code source est répertorié ci-dessous.
bootstrap_demo.py
# import librarys
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# get data
iq = np.array([61, 88, 89, 89, 90, 92, 93,
94, 98, 98, 101, 102, 105, 108,
109, 113, 114, 115, 120, 138])
# compute mean, SEM (standard error of the mean) and median
mean_iq = np.average(iq)
sem_iq = np.std(iq)/np.sqrt(len(iq))
median_iq = np.median(iq)
# bootstrap to compute sem of the median
def bootstrap(x,repeats):
# placeholder (column1: mean, column2: median)
vec = np.zeros((2,repeats))
for i in np.arange(repeats):
# resample data with replacement
re = np.random.choice(len(x),len(x),replace=True)
re_x = x[re]
# compute mean and median of the "new" dataset
vec[0,i] = np.mean(re_x)
vec[1,i] = np.median(re_x)
# histogram of median from resampled datasets
sns.distplot(vec[1,:], kde=False)
# compute bootstrapped standard error of the mean,
# and standard error of the median
b_mean_sem = np.std(vec[0,:])
b_median_sem = np.std(vec[1,:])
return b_mean_sem, b_median_sem
# execute bootstrap
bootstrapped_sem = bootstrap(iq,1000)
Matlab / Ovctave est ci-dessous.
bootstrap_demo.m
function bootstrap_demo
% data
iq = [61, 88, 89, 89, 90, 92, 93,94, 98, 98, 101, 102, 105, 108,109, 113, 114, 115, 120, 138];
% compute mean, SEM (standard error of the mean) and median
mean_iq = mean(iq);
sem_iq = std(iq)/sqrt(length(iq));
median_iq = median(iq);
disp(['the mean: ' num2str(mean_iq)])
disp(['the SE of the mean: ' num2str(sem_iq)])
disp(['the median: ' num2str(median_iq)])
disp('---------------------------------')
[b_mean_sem, b_median_sem] = bootstrap(iq, 1000);
disp(['bootstrapped SE of the mean: ' num2str(b_mean_sem)])
disp(['bootstrapped SE of the median: ' num2str(b_median_sem)])
% bootstrap to compute sem of the median
function [b_mean_sem, b_median_sem] = bootstrap(x, repeats)
% placeholder (column1: mean, column2: median)
vec = zeros(2,repeats);
for i = 1:repeats
% resample data with replacement
re_x = x(datasample(1:length(x),length(x),'Replace',True));
% compute mean and median of the "new" dataset
vec(1,i) = mean(re_x);
vec(2,i) = median(re_x);
end
% histogram of median from resampled dataset
histogram(vec(2,:))
% compute bootstrapped standard error of the mean, and standard error of
% the median
b_mean_sem = std(vec(1,:));
b_median_sem = std(vec(2,:));
Recommended Posts