Die Datenanalyse scheint immer noch zu boomen. Unabhängig davon, welche Daten angegeben werden, ob es sich um maschinelles Lernen handelt oder was auch immer, visualisieren Sie zuerst die Daten und erhalten die Hypothese, um mit Ihrer Analyse zu beginnen. Um die Hypothese zu testen, führen wir verschiedene Analysen durch und berechnen verschiedene Statistiken.
Wenn Sie dies tun, stoßen Sie möglicherweise auf eine Situation, in der Sie ** die Variation in einer Statistikpopulation ** kennenlernen möchten.
Wenn es sich um den Durchschnittswert der Daten handelt, können Sie den Standardfehler des Mittelwerts berechnen. Dies ist die Standardabweichung geteilt durch die Quadratwurzel der Anzahl der Daten.
In der Analyse werden jedoch nicht nur der Mittelwert, sondern auch verschiedene Statistiken wie Median, Zentil und Korrelationskoeffizient betrachtet. Und es gibt keine einfache Formel für diese, die Variationen wie ** Standardfehler und Konfidenzintervall ** quantifizieren kann.
In einem solchen Fall ist ** Resampling **, insbesondere ** Bootstrap **, nützlich.
Bootstrap erstellt zuerst Tausende ähnlicher Datensätze aus den Originaldaten durch Resampling. Berechnen Sie dann für jeden Datensatz die gewünschten Statistiken. Dann wird die Verteilung der Statistik erstellt, und der Standardfehler der Statistik kann durch Berechnung der Standardabweichung der Verteilung erhalten werden.
Angenommen, Sie haben IQ-Daten für 20 Personen. Angenommen, die Werte sind 61, 88, 89, 89, 90, 92, 93, 94, 98, 98, 101, 102, 105, 108, 109, 113, 114, 115, 120, 138. Die Verteilung sieht folgendermaßen aus:
Zu diesem Zeitpunkt beträgt der Mittelwert 100,85 und der Standardfehler des Mittelwerts 3,45.
Die Verteilung dieser Werte wie des Einkommens ist jedoch so, dass der Medianwert eher das tatsächliche Gefühl der Person als den Mittelwert widerspiegelt. Dieses Mal möchte ich den Bootstrap verwenden, um die Variation des Medianwerts zu ermitteln, dh den ** Standardfehler des Medians **.
Der Boot Strap wird gemäß dem folgenden Ablauf ausgeführt.
1: Entscheiden Sie, wie oft ein Resample durchgeführt werden soll. Machen Sie eine große Zahl, z. B. 500, 1000, 10000, 100000. Dieses Mal werde ich 1000 versuchen.
2: Daten erneut abtasten und künstlich generieren. Zu diesem Zeitpunkt ** erlauben Sie das Duplizieren und extrahieren Sie so viele Datenproben wie die Anzahl der Proben der Originaldaten **.
Wenn die Originaldaten beispielsweise $ X_1, X_2, ..., X_5 $ und $ 5 $ waren, ist das folgende Beispiel ein Beispiel für den Datensatz, der bei jedem erneuten Abtasten generiert wird.
Resample 1 = $ X1, X2, X3, X3, X4 $ Resample 2 = $ X1, X1, X3, X4, X4 $ Resample 3 = $ X2, X2, X5, X5, X5 $ ...... Resample 998 = $ X1, X2, X3, X4, X5 $ Resample 999 = $ X1, X3, X4, X5, X5 $ Resample 1000 = $ X3, X3, X3, X3, X4 $
Auf diese Weise wird eine Duplizierung für die in Schritt 1 bestimmte Anzahl zugelassen, und Datenproben werden wiederholt für die Anzahl der Originaldaten extrahiert, und Daten werden künstlich erzeugt.
Welche Datenstichprobe in jeder erneuten Stichprobe enthalten ist, ist zufällig. Manchmal haben alle fünf den gleichen Wert, und manchmal haben alle fünf unterschiedliche Werte.
3: Berechnen Sie für jedes Resample die Statistiken, die Sie finden möchten. Unabhängig vom Median werden alle neu abgetasteten Daten verwendet, um die Statistiken zu finden. Wenn Sie 1000 Mal neu abtasten, können Sie 1000 Statistiken erhalten.
Resample 1 = $ X1, X2, X3, X3, X4 $ $ \ bis $ Statistics = $ S1 $ Resample 2 = $ X1, X1, X3, X4, X4 $ $ \ bis $ Statistics = $ S2 $ Resample 3 = $ X2, X2, X5, X5, X5 $ $ \ bis $ Statistics = $ S3 $ ...... Resample 998 = $ X1, X2, X3, X4, X5 $ $ \ bis $ Statistics = $ S998 $ Resample 999 = $ X1, X3, X4, X5, X5 $ $ \ bis $ Statistics = $ S999 $ Resample 1000 = $ X3, X3, X3, X3, X4 $ $ \ bis $ Statistics = $ S1000 $
Sie haben viele Statistiken. Und denk so.
"Sie können sich die Verteilung dieser vielen Statistiken als ** fast gleich der Bevölkerungsverteilung dieser Statistik ** vorstellen! Weil ** nach mehr Experimenten und mehr Daten ähnlich ist Nur die Wertdaten erhöhen sich ** Weil !! "
Bootstrap verwendet also statistische Tricks, um die Anzahl der Daten zu erhöhen, nicht experimentell. Und wenn die Anzahl der Daten bis zu einem gewissen Grad groß ist, sollte die Verteilung so nahe wie möglich an der Verteilung der Bevölkerung liegen. 4: Berechnen Sie die Abweichung (Standardfehler, Konfidenzintervall usw.) anhand der erhaltenen Statistikverteilung. Beispiel: ** Standardfehler ist die Standardabweichung der Bevölkerungsverteilung **, sodass Sie einfach die Standardabweichung der erhaltenen statistischen Verteilung ermitteln können.
Auf diese Weise ist es möglich, die Variation in den Statistiken zu finden, an denen Sie interessiert sind.
Lass es uns mit Python machen (Matlab / Octave ist auch unten).
Holen Sie sich zuerst die Bibliothek, die Sie benötigen.
# import librarys
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
Verwenden Sie Numpy, um die Daten in das Array einzufügen.
# 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])
Berechnen Sie als Basisstatistik den Durchschnittswert, den Standardfehler des Durchschnittswerts und den Medianwert.
# 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)
Wir konnten den Mittelwert berechnen: 100,85, den Standardfehler des Mittelwerts: 3,45 bzw. den Median: 99,5.
Führen Sie einen Bootstrap aus, um den Standardfehler des Medians zu ermitteln. Zur Überprüfung der Richtigkeit, ob der Bootstrap korrekt ist, wird auch der Standardfehler des Durchschnittswerts berechnet.
Gehen Sie wie folgt vor, um aufeinanderfolgende Ganzzahlwerte von 1 bis n zufällig mit Duplikaten in Python zu sortieren.
np.random.choice(n,n,replace=True)
Verwenden Sie diese Option, um den Bootstrap erneut abzutasten.
# 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
Wenn Sie diese Funktion mit x = iq, repeats = 1000 ausführen, können Sie die Verteilung der 1000 vom Bootstrap gefundenen Medianwerte sehen.
...... Ich denke, es wäre besser gewesen, mehr Wiederholungen zu haben.
Aus dieser Verteilung kann vorerst der Standardfehler des Medianwertes ermittelt werden. Berechnen Sie einfach die Standardabweichung von ** 1000 Medianwerten **.
Berechnen Sie in ähnlicher Weise den Standardfehler des Mittelwerts.
Erstens beträgt der Standardfehler des aus den Originaldaten erhaltenen Durchschnittswerts 3,45, also ist er ziemlich nahe. Der Bootstrap scheint die Abweichungen in der Statistik korrekt geschätzt zu haben.
wichtiger Punkt Der Bootstrap ** wird nach dem Zufallsprinzip neu abgetastet, sodass die Ergebnisse bei jeder Ausführung leicht abweichen **. Um die Variation der Ergebnisse zu verringern und genauere Schätzungen vorzunehmen, müssen Sie die Anzahl der Iterationen erhöhen (~ 10.000).
Mit Bootstrap können Sie Abweichungen in den interessierenden Statistiken durch erneutes Abtasten abschätzen.
Ich denke, dass jeder, der über Resampling in Statistiken nachdenkt, einschließlich Bootstrap, ein Genie ist. Indem Sie die Daten künstlich erhöhen und die Bevölkerungsverteilung approximieren, werden Sie von den Strafen befreit, die entstehen, wenn Sie vorerst weiterhin Daten sammeln! Wenn Sie tatsächlich keine Daten und repräsentativen Beispiele der Bevölkerung sammeln, können Sie sich der Bevölkerung natürlich nie für immer nähern, egal wie viel Sie erneut abtasten.
Der Quellcode ist unten aufgeführt.
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 ist unten.
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