Tämän artikkelin ohjelmakoodin ja tulosteet löydät GitHubista:
https://github.com/taanila/tilastoapu/blob/master/p.ipynb
Jos kopioit koodia itsellesi, niin kannattaa käyttää GitHubia. Tästä artikkelista kopioidut koodit eivät välttämättä toimi oikein.
Oletan, että lukijalla on asennettuna Anaconda ja sen mukana tuleva Jupyter notebook.
Otoksessa havaitsemieni erojen ja riippuvuuksien tilastollista merkitsevyyttä voin arvioida laskemalla p-arvon. Pythonin scipy.stats-ohjelmakirjastosta löydän funktiot p-arvojen laskentaan.
Otan ensiksi käyttöön pandas ja scipy.stats -ohjelmakirjastot ja avaan esimerkkinä käyttämäni aineiston:
import pandas as pd import scipy.stats as stats df = pd.read_excel('http://taanila.fi/data1.xlsx', sheet_name = 'Data') df.head()
Korrelaatiokertoimen testaus
Iän ja palkan välisen pearsonin korrelaatiokertoimen ja siihen liittyvän 2-suuntaisen p-arvon saan funktiolla
stats.pearsonr(df['ikä'], df['palkka'])
Jos haluankin käyttää spearmanin järjestyskorrelaatiota, niin saan korrelaatiokertoimen ja 2-suuntaisen p-arvon funktiolla
stats.spearmanr(df['ikä'], df['palkka'])
Korrelaatiokertoimen testaamiseen liittyvistä funktioista löydät lisätietoa scipy.org -sivustolta:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.pearsonr.html#scipy.stats.pearsonr
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.spearmanr.html
Ristiintaulukointi ja khiin neliö -testi
Esimerkiksi sukupuolen ja perhesuhteen väliseen ristiintaulukointiin liittyvän khiin neliö -testin testimuuttujan, p-arvon, vapausasteiden määrän ja odotetut frekvenssit saan funktiolla:
stats.chi2_contingency(pd.crosstab(df['sukup'], df['perhe']))
Lisätietoa khiin neliö -testistä ja sen edeltävyysehdoista löydät scipy.org-sivustolta:
Kahden riippumattoman otoksen t-testi
Jos haluan selvittää, onko miesten ja naisten palkkakeskiarvoissa eroa, niin erotan ensin miesten ja naisten palkat toisistaan (aineistossa 1=mies, 2=nainen)
a=df['palkka'][df['sukup']==1] #Mies b=df['palkka'][df['sukup']==2] #Nainen
Tämän jälkeen lasken t-testimuuttujan ja 2-suuntaisen p-arvon funktiolla
stats.ttest_ind(a, b, equal_var=False)
Yllä käytin erisuurten varianssien testiä (equal_var=False).
Lisätietoa riippumattomien otosten t-testistä ja sen edeltävyysehdoista löydät scipy.org-sivustolta:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html
Mann Whitney U -testi
Jos epäilen t-testin edeltävyysehtojen toteutumista, niin voin testata edellisen esimerkin Mann Whitney U-testillä:
stats.mannwhitneyu(a,b)
Tuloksena saan U-testimuuttujan ja p-arvon. Oletuksena saan 2-suuntaisen p-arvon puolikkaan. Lisätietoa löydät scipy.org-sivustolta:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html
Yksisuuntainen varianssianalyysi
Jos haluan selvittää onko eri koulutuksen omaavien keskipalkoissa eroja, niin voin käyttää yksisuuntaista varianssianalyysiä (anova). Ensiksi erotan eri koulutuksen omaavien palkat toisistaan:
k1=df['palkka'][df['koulutus']==1] #peruskoulu k2=df['palkka'][df['koulutus']==2] #2. aste k3=df['palkka'][df['koulutus']==3] #korkeakoulu k4=df['palkka'][df['koulutus']==4] #ylempi korkeakoulu
Tämän jälkeen lasken anovan F-testimuuttujan ja p-arvon funktiolla:
stats.f_oneway(k1,k2,k3,k4)
Lisätietoa anovasta ja sen edeltävyysehdoista löydät scipy.org-sivustolta:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.f_oneway.html#scipy.stats.f_oneway
Kruskal-Wallis -testi
Jos epäilet varianssianalyysin edeltävyysehtojen täyttymistä edellisessä esimerkissä, niin voit käyttää varianssianalyysin sijasta Kruskal-Wallis -testiä:
stats.kruskal(k1, k2, k3, k4)
Tuloksena saat H-testimuuttujan ja p-arvon.
Lisätietoa Kruskal-Wallis-testistä löydät scipy.org-sivustolta:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kruskal.html#scipy.stats.kruskal
Muita testejä
Lisää merkitsevyystestejä ja muita tilastollisia funktioita löydät scipy.org-sivustolta:
https://docs.scipy.org/doc/scipy/reference/stats.html