p-values

Hypotestestning i Python

James Chapman

Curriculum Manager, DataCamp

Brottmålsrättegångar

  • Två möjliga sanna tillstånd:
    1. Den tilltalade begick brottet
    2. Den tilltalade begick inte brottet
  • Två möjliga utfall:
    1. Skyldig
    2. Inte skyldig
  • Inledningsvis antas den tilltalade vara oskyldig
  • Åklagaren måste lägga fram bevis "bortom rimligt tvivel" för en fällande dom
Hypotestestning i Python

Ålder vid första programmeringserfarenhet

  • age_first_code_cut klassificerar när Stack Overflow-användaren började programmera
    • "adult" betyder att de började vid 14 års ålder eller äldre
    • "child" betyder att de började före 14 års ålder
  • Tidigare forskning: 35 % av mjukvaruutvecklare började programmera som barn
  • Finns det stöd för att en större andel datavetare började programmera som barn?
Hypotestestning i Python

Definitioner

En hypotes är ett påstående om en okänd populationsparameter

Ett hypotestest testar två konkurrerande hypoteser

  • Nollhypotesen ($H_{0}$) är den befintliga uppfattningen

  • Alternativhypotesen ($H_{A}$) är forskarens nya "utmanande" idé

För vårt problem:

  • $H_{0}$: Andelen datavetare som började programmera som barn är 35 %
  • $H_{A}$: Andelen datavetare som började programmera som barn är större än 35 %
1 "Naught" är brittisk engelska för "noll". Av historiska skäl är "H-naught" den internationella konventionen för hur man uttalar nollhypotesen.
Hypotestestning i Python

Brottmål vs. hypotestestning

  • Antingen $H_{A}$ eller $H_{0}$ är sann (inte båda)
  • Inledningsvis antas $H_{0}$ vara sann
  • Testet avslutas med antingen "förkasta $H_{0}$" eller "kan inte förkasta $H_{0}$"
  • Om stödet från urvalet är "signifikant" för $H_{A}$, förkasta $H_{0}$, annars välj $H_{0}$

Signifikansnivån motsvarar "bortom rimligt tvivel" vid hypotestestning

Hypotestestning i Python

En- och tvåsidiga test

Täthetskurva för standardnormalfördelningens pdf med de vänstra och högra svansarna markerade i rött.

Hypotestest kontrollerar om stickprovsstatistikan hamnar i svansarna av nollfördelningen

Test Svansar
alternativ skild från null tvåsidig
alternativ större än null högersidig
alternativ mindre än null vänstersidig

 

$H_{A}$: Andelen datavetare som började programmera som barn är större än 35 %

Detta är ett högersidigt test

Hypotestestning i Python

p-värden

p-värden: sannolikheten att erhålla ett visst resultat, under antagandet att nollhypotesen är sann

  • Stort p-värde, starkt stöd för $H_{0}$
    • Statistikan befinner sig troligen inte i svansen av nollfördelningen
  • Litet p-värde, starkt stöd mot $H_{0}$
    • Statistikan befinner sig troligen i svansen av nollfördelningen
  • "p" i p-värde → sannolikhet
  • "litet" betyder "nära noll"
Hypotestestning i Python

Beräkna z-poängen

prop_child_samp = (stack_overflow['age_first_code_cut'] == "child").mean()
0.39141972578505085
prop_child_hyp = 0.35
std_error = np.std(first_code_boot_distn, ddof=1)
0.010351057228878566
z_score = (prop_child_samp - prop_child_hyp) / std_error
4.001497129152506
Hypotestestning i Python

Beräkna p-värdet

  • norm.cdf() är den normala CDF från scipy.stats.
  • Vänstersidig test → använd norm.cdf().
  • Högersidig test → använd 1 - norm.cdf().

 

from scipy.stats import norm
1 - norm.cdf(z_score, loc=0, scale=1)
3.1471479512323874e-05
Hypotestestning i Python

Nu kör vi en övning!

Hypotestestning i Python

Preparing Video For Download...