Czytam książkę Statystyka (Freeman, Pisani, Purves) i próbuję odtworzyć przykład, w którym rzuca się monetą, powiedzmy 50 razy, liczbę głów liczoną i to się powtarza powiedzmy 1000 razy.
Po pierwsze, utrzymałem liczbę rzutów (wielkość próbki) na poziomie 1000 i zwiększyłem liczbę powtórzeń. Im więcej powtórzeń, tym lepiej dane pasują do normalnej krzywej.
Następnie próbowałem utrzymać stałą liczbę powtórzeń na 1000 i zwiększyć wielkość próbki. Im większy rozmiar próbki, tym gorsze wydawało się, że normalne zakrzywione pasują do danych. Wydaje się to sprzeczne z przykładem książki, który lepiej przybliża krzywą normalną wraz ze wzrostem wielkości próby.
Chciałem zobaczyć, co by się stało, gdybym zwiększył rozmiar próbki, ale przy większej liczbie powtórzeń, które zostały ustalone na 10 000. Wydaje się to również przeczyć książce.
Jakieś pomysły, co robię źle?
Kod i wykresy poniżej.
%matplotlib inline
def plot_hist(num_repetitions, num_tosses):
tosses = np.random.randint(0, 2, size=[num_repetitions, num_tosses])
sums = np.apply_along_axis(lambda a: np.sum(a == 1), 1, tosses)
xmin, xmax = min(sums), max(sums)
lnspc = np.linspace(xmin, xmax, len(sums))
m, s = stats.norm.fit(sums) # get mean and standard deviation
pdf_g = stats.norm.pdf(lnspc, m, s) # now get theoretical values in our interval
bins = np.arange(xmin, xmax) - 0.5
step = int((xmax - xmin)/5)
fig, ax = plt.subplots()
_ = ax.hist(sums, bins, edgecolor='black', linewidth=1.2, density=True)
_ = ax.plot(lnspc, pdf_g, label="Norm", color='red')
_ = ax.set_xticks(bins[::step] + 0.5)
_ = ax.set_title('{:,} tosses - {:,} repetitions'.format(num_tosses, num_repetitions))
1. Eksperymentuj z rosnącą liczbą powtórzeń (stała wielkość próby 1000)
plot_hist(1000, 1000)
plot_hist(10000, 1000)
plot_hist(100000, 1000)
2. Eksperymentuj ze zwiększaniem wielkości próbki (ustalona na 1000 powtórzeń)
plot_hist(1000, 100)
plot_hist(1000, 1000)
plot_hist(1000, 10000)
3. Eksperymentuj ze zwiększaniem wielkości próbki (ustalona na 10 000 powtórzeń)
plot_hist(10000, 100)
plot_hist(10000, 1000)
plot_hist(10000, 10000)
plot_hist(10000, 100000)
Odpowiedzi:
W drugim przypadku, zwiększając liczbę rzutów, zwiększasz liczbę pojemników, do których może wpaść jedna próba. Podczas gdy pierwszy przypadek eksperymentu 2 ma maksymalnie 100 pojemników, które można wypełnić, ostatni przykład ma 10000 pojemników. Zwiększyłeś „rozdzielczość” swojego eksperymentu o współczynnik 100 (tj. Jeden pojemnik w pierwszym eksperymencie jest teraz reprezentowany przez około 100 w drugim). Oczywiście oznacza to, że do wypełnienia twoich pojemników będziesz potrzebował 100 razy więcej danych.
źródło
_ = ax.hist(sums, bins=35, edgecolor='black', linewidth=1.2, density=True)
), trzeci eksperyment przybliża teraz krzywą normalną.Możesz pomyśleć o pojedynczym rzucie monetą jako niezależnym procesie Bernoulliego. Jedna próba da ci odpowiednio głowy / ogony lub sukces / porażkę. Jeśli powtórzysz to powiedz 100 000 razy, średnia liczba głów będzie bardzo bliska 0,5, jeśli moneta jest uczciwa.
Teraz, jeśli zwiększysz liczbę prób do 1000 i utrzymasz powtarzalność na 1, otrzymasz sekwencję 1000 sukcesów / niepowodzeń i nie możesz wiele powiedzieć o prawdopodobieństwie zaobserwowania średnio 500 głów, chyba że zwiększysz liczbę powtórzeń dla każda z tych niezależnych prób. Wraz ze wzrostem liczby powtórzeń otrzymasz coraz lepsze przybliżenie do rozkładu normalnego.
Dla mnie łatwiej jest myśleć o próbach nie jako o „rzutach” lub „próbkach”, ale zamiast osobnych monet i powtórzeń jako liczby rzutów każdej z tych monet. Wtedy intuicyjnie ma sens, że poprzez zwiększenie liczby monet (lub prób), przy jednoczesnym utrzymaniu stałej liczby powtórzeń (lub rzutów), przybliżenie danych do rozkładu normalnego pogarsza się.
źródło
Myślę, że inne odpowiedzi tutaj są świetne, ale chciałem dodać odpowiedź, która rozciąga się na inne narzędzie statystyczne.
Zaczynasz od linii podstawowej, która Twoim zdaniem powinna przybliżać normalną krzywą, a następnie przechodzisz stamtąd, aby sprawdzić, czy możesz lepiej przybliżyć normalną krzywą. Spróbuj pójść w innym kierunku i przekonaj się, co możesz zrobić, aby wykonać gorszą robotę w przybliżeniu. Wypróbuj symulacje, w których masz 10 rzutów i 1000 powtórzeń. Porównaj to z symulacjami, w których masz 1000 rzutów i 10 powtórzeń. Powinno być jasne, że pierwszy przypadek ma lepsze zbliżenie.
Rozszerzenie, które chcę wprowadzić, to ANOVA (analiza wariancji). Widzisz wielu nowych badaczy danych, którzy słabo rozumieją ten problem, i projektują swoje badania tak, aby mieli dużo przewrotów, ale mało powtórzeń. Mają dużo danych, ale mówi mniej, niż by chcieli. Jak pomiar każdego liścia na drzewie, ale tylko dwa drzewa. Możemy powiedzieć całkiem sporo o liściach na tych dwóch drzewach, ale ogólnie nie o liściach na drzewach. Lepiej byłoby dostać dużo mniejszą próbkę liści i dużo drzew.
źródło
Aby uzyskać dodatkową intuicję, rozważ następujące kwestie:
Wyobraź sobie, że wykonujesz tylko jedno powtórzenie.
W takim przypadku możesz zwiększyć liczbę rzutów, ile chcesz, ale nie będzie to przypominało normalnego rozkładu. I to ma sens, ponieważ twój histogram będzie miał tylko jeden pik.
Rozkład normalny jest przybliżeniem rozkładu prawdopodobieństwa (rozkładu dwumianowego).
Nie stworzyłeś tej dystrybucji. Zamiast tego przybliżono ten rozkład, stosując ograniczoną (i małą) liczbę symulacji. (a odkryłeś, że to przybliżenie staje się gorsze, gdy zwiększasz liczbę pojemników na histogramie)
Więc oboje potrzebujesz dużej liczby rzutów i powtórzeń.
źródło