Dlaczego zwiększenie wielkości próby przewracania monet nie poprawia przybliżenia normalnej krzywej?


19

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.

  1. 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.

  2. 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.

  3. 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)

wprowadź opis zdjęcia tutaj

plot_hist(10000, 1000)

wprowadź opis zdjęcia tutaj

plot_hist(100000, 1000)

wprowadź opis zdjęcia tutaj

2. Eksperymentuj ze zwiększaniem wielkości próbki (ustalona na 1000 powtórzeń)

plot_hist(1000, 100)

wprowadź opis zdjęcia tutaj

plot_hist(1000, 1000)

wprowadź opis zdjęcia tutaj

plot_hist(1000, 10000)

wprowadź opis zdjęcia tutaj

3. Eksperymentuj ze zwiększaniem wielkości próbki (ustalona na 10 000 powtórzeń)

plot_hist(10000, 100)

wprowadź opis zdjęcia tutaj

plot_hist(10000, 1000)

wprowadź opis zdjęcia tutaj

plot_hist(10000, 10000)

wprowadź opis zdjęcia tutaj

plot_hist(10000, 100000)

wprowadź opis zdjęcia tutaj


9
Potrzebujesz lepszego plotera histogramów - ten jest szczególnie słaby i tworzy artefakty. Jeszcze lepiej, porównaj rozkłady za pomocą wykresu prawdopodobieństwa zamiast histogramu.
whuber

1
Warto to wiedzieć i dzisiaj poszerzyłem swoją wiedzę. Dzięki!
Chris Snow

3
„Powtórzenia” to „wielkość próbki”, a nie rzuty. Zwiększenie liczby rzutów to coś innego
Mars

1
Przepraszam, myślałem, myślałem i myślałem, ale nie mogę z tym terminem! Ale niezależnie od liczby rzutów, w końcu daje 1 liczbę (liczbę głów). Daje ci 1 próbkę.
Mars

1
Opublikowałem nowe pytanie, które koncentruje się tylko na terminologii: stats.stackexchange.com/questions/389892/...
Chris Snow

Odpowiedzi:


27

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.


Ach, to ma sens. Ustawiając liczbę przedziałów na 35 ( _ = ax.hist(sums, bins=35, edgecolor='black', linewidth=1.2, density=True)), trzeci eksperyment przybliża teraz krzywą normalną.
Chris Snow

5

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ę.


2

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.


Dziękuję za Twoją odpowiedź. Czy byłbyś w stanie wyjaśnić, w jaki sposób można użyć ANOVA w tym kontekście?
Chris Snow

1
@ChrisSnow ANOVA to perspektywa regresji liniowej, która koncentruje się na tym, czy różne grupy są w rzeczywistości różne, patrząc na wariancję (stąd nazwa). Zależy to od tego, że przy zbyt małej liczbie powtórzeń nie można właściwie odróżnić grup, nawet jeśli ma się dużo przewrotów. Przybliżenie normalnej krzywej ulega pogorszeniu, a wariancja każdej grupy nie jest wystarczająco różna, aby stwierdzić, że wszystko jest w rzeczywistości inne.
Jeremy

1

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ń.

  • gdy liczba rzutów jest wysoka, rozkład dwumianowy (wielokrotne rzuty monetami) można aproksymować rozkładem normalnym.
  • gdy liczba powtórzeń / symulacji jest wysoka niż histogram tych eksperymentów przybliża gęstość rozkładu dwumianowego.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.