Avainsana-arkisto: scipy.stas

Merkitsevyyden testaus Pythonilla

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:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chi2_contingency.html#scipy.stats.chi2_contingency

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