6 min read

Nonparametric Methods

library(nortest)
library(tidyverse)
library(psych)
insurance <- read_csv("insurance.csv")
countries <- read_csv("countries of the world.csv")

Table of Content

  • 1 Introduction
  • 2 Chi2-test
  • 3 Wilcoxon-test
  • 4 Kruskal-Wallis-test
  • 5 Conclusion

1 Introduction

Bei den zwei vorgestellten inferenzstatistischen Tests (“T-Test” und “ANOVA”) handelte es sich um so genannte parametrische Verfahren. Als Voraussetzung für parametrische Verfahren gilt, dass die unabhängige Variable mindestens intervallskaliert oder normalverteilt ist. Ist eine der beiden Voraussetzung nicht erfüllt, muss auf ein nonparametrisches Verfahren zurückgegriffen werden.

Für diesen Post wurden die Datensätze insurance und countries_of_the_world von der Statistik Plattform “Kaggle” verwendet. Eine Kopie der Datensätze ist unter https://drive.google.com/open?id=1_fK9j74lRidUOsC_tlCAYbaJLuWzgR-e (insurance) und https://drive.google.com/open?id=1QO_t4hySiqVsSDsVOsKZEOHOkLlWO006 (countries_of_the_world) abrufbar.

2 Chi2-test

Der Chi2-Test dient dazu, beobachtete Werte mit erwarteten Werten zu vergleichen. Dieser Test wurde bereits schon einmal in dem Post “Survive on the Titanic - Case Study” thematisiert. Aufbauend darauf, soll in diesem Abschnitt der Chi2-Anpassungstest sowie der Chi2-Test für zwei Variablen vorgestellt werden. Für diese Untersuchung wird der Datensatz insurance verwendet.

head(insurance)
## # A tibble: 6 x 7
##     age sex      bmi children smoker region    charges
##   <int> <chr>  <dbl>    <int> <chr>  <chr>       <dbl>
## 1    19 female  27.9        0 yes    southwest  16885.
## 2    18 male    33.8        1 no     southeast   1726.
## 3    28 male    33          3 no     southeast   4449.
## 4    33 male    22.7        0 no     northwest  21984.
## 5    32 male    28.9        0 no     northwest   3867.
## 6    31 female  25.7        0 no     southeast   3757.

Chi2-Anpassungstest

Im nachfolgenden wird untersucht, ob die Geschlechterverteilung in der vorliegenden Stichprobe von der Häufigkeitsverteilung in der Population abweicht.

geschl.tabelle <- table(insurance$sex)
geschl.tabelle
## 
## female   male 
##    662    676

Man sieht, dass die Verteilung gleich ausfällt.

chisq.test(geschl.tabelle)
## 
##  Chi-squared test for given probabilities
## 
## data:  geschl.tabelle
## X-squared = 0.14649, df = 1, p-value = 0.7019

Der Chi2 Test zeigt ein nicht signifikantes Ergebnis (chi2=0,15, df=1,p=.702). Dies bedeutet, dass die Häufigkeitsverteilung in unserer Stichprobe nicht bedeutsam von der Häufigkeitsverteilung in der Population abweicht.

Chi2-Test für zwei Variablen

Der Chi2 Test kann ebenfalls dazu verwendet werden, um die Höhe des Zusammenhangs zwischen zwei nominalskalierten Variablen zu beschreiben. Es soll untersucht werden, ob in den verschiedenen Regionen unterschiedlich viele Männer oder Frauen leben.

tab1 <- table(insurance$sex, insurance$region)
addmargins(tab1)
##         
##          northeast northwest southeast southwest  Sum
##   female       161       164       175       162  662
##   male         163       161       189       163  676
##   Sum          324       325       364       325 1338
chisq.test(tab1)
## 
##  Pearson's Chi-squared test
## 
## data:  tab1
## X-squared = 0.43514, df = 3, p-value = 0.9329

Mit der addmargins Funktion wird eine Kontingenztabelle mit den absoluten Häufigkeiten erstellt. Der durchgeführte Test zeigt mit chi2=0,44, df=3, p=.933 ein nicht signifikantes Ergebnis. Frauen und Männer sind demnach in den unterschiedlichen Regionen gleich stark verteilt.

Wird der Chi2 Test auf eine 2x2 Tabelle angewendet, führt R automatisch die Korrektur von Yates durch. Für eine beispielhafte Darstellung wird nachfolgend untersucht, ob sich Männer und Frauen hinsichtlich ihres Raucherstatus (Raucher vs. Nichtraucher) unterscheiden.

tab2 <- table(insurance$sex, insurance$smoker)
addmargins(tab2)
##         
##            no  yes  Sum
##   female  547  115  662
##   male    517  159  676
##   Sum    1064  274 1338
chisq.test(tab2)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tab2
## X-squared = 7.3929, df = 1, p-value = 0.006548

Das Ergebnis ist signifikant (chi2=7,39, df=1, p<.001). Männer sind demnach häufiger Raucher als es Frauen sind.

3 Wilcoxon-test

Der Wilcoxon-Test stellt eine nonparametrische Alternative zum “T-Test” dar. In diesem Abschnitt wird lediglich die Verwendung des Wilcoxon-Tests für zwei unabhängige Stichproben behandelt. Dafür wird der Datensatz countries_of_the_world verwendet.

glimpse(countries)
## Observations: 227
## Variables: 20
## $ Country                              <chr> "Afghanistan", "Albania",...
## $ Region                               <chr> "ASIA (EX. NEAR EAST)", "...
## $ Population                           <int> 31056997, 3581655, 329300...
## $ `Area (sq. mi.)`                     <int> 647500, 28748, 2381740, 1...
## $ `Pop. Density (per sq. mi.)`         <chr> "48,0", "124,6", "13,8", ...
## $ `Coastline (coast/area ratio)`       <chr> "0,00", "1,26", "0,04", "...
## $ `Net migration`                      <chr> "23,06", "-4,93", "-0,39"...
## $ `Infant mortality (per 1000 births)` <dbl> 16307, 2152, 31, 927, 405...
## $ `GDP ($ per capita)`                 <int> 700, 4500, 6000, 8000, 19...
## $ `Literacy (%)`                       <dbl> 360, 865, 700, 970, 1000,...
## $ `Phones (per 1000)`                  <chr> "3,2", "71,2", "78,1", "2...
## $ `Arable (%)`                         <chr> "12,13", "21,09", "3,22",...
## $ `Crops (%)`                          <chr> "0,22", "4,42", "0,25", "...
## $ `Other (%)`                          <dbl> 8765, 7449, 9653, 75, 977...
## $ Climate                              <dbl> 1, 3, 1, 2, 3, NA, 2, 2, ...
## $ Birthrate                            <dbl> 466, 1511, 1714, 2246, 87...
## $ Deathrate                            <dbl> 2034, 522, 461, 327, 625,...
## $ Agriculture                          <chr> "0,38", "0,232", "0,101",...
## $ Industry                             <chr> "0,24", "0,188", "0,6", N...
## $ Service                              <chr> "0,38", "0,579", "0,298",...

Es soll untersucht werden, ob die Länder der Regionen “WESTERN EUROPE” und “OCEANIA” sich in ihrem Populationswert unterscheiden.

wilcox <- countries %>% filter(Region == "WESTERN EUROPE" | Region == "OCEANIA") %>%
  select(Region, Population)
wilcox$Population.num <- as.numeric(wilcox$Population)

Wie auch beim “T-Test” wird untersucht, ob Normalverteilung der unabhängigen Variable (hier Population) vorliegt.

lillie.test(wilcox$Population.num)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  wilcox$Population.num
## D = 0.31988, p-value = 7.605e-14

Das signifikante Ergebnis zeigt uns, dass die Variable Population.num nicht normalverteilt ist.

sampling.size <- describeBy(wilcox$Population.num, wilcox$Region, mat = TRUE)
sampling.size$n
## [1] 21 28

Auch der zentrale Grenzwertsatz greift hier nicht, da N1 und N2 jeweils < 30 liegen. Es muss daher anstelle des klassischen T-Tests der Wilcoxon-Test durchgeführt werden.

wilcox.test(wilcox$Population.num ~ wilcox$Region)
## 
##  Wilcoxon rank sum test
## 
## data:  wilcox$Population.num by wilcox$Region
## W = 166, p-value = 0.009101
## alternative hypothesis: true location shift is not equal to 0

Mit W=166 und p<.001 ist der Test signifikant. Die Länder der Regionen “WESTERN EUROPE” und “OCEANIA” unterscheiden sich in ihrem Populationswert.

4 Kruskal-Wallis-test

Der Kruskal-Wallis-Test stellt eine nonparametrische Alternative zur “einfaktoriellen Varianzanalyse” ohne Messwiederholung dar. Es soll hierbei untersucht werden, ob die Länder der Regionen “WESTERN EUROPE”, “OCEANIA” und “NEAR EAST” sich hinsichtlich ihrem Populationswert signifikant voneinander unterscheiden. Es wird erneut der Datensatz countries_of_the_world verwendet.

kruskal <- countries %>% filter(Region == "WESTERN EUROPE" | Region == "OCEANIA" | Region == "NEAR EAST") %>%
  select(Region, Population)
kruskal$Population.num <- as.numeric(kruskal$Population)
kruskal
## # A tibble: 65 x 3
##    Region         Population Population.num
##    <chr>               <int>          <dbl>
##  1 OCEANIA             57794          57794
##  2 WESTERN EUROPE      71201          71201
##  3 OCEANIA          20264082       20264082
##  4 WESTERN EUROPE    8192880        8192880
##  5 NEAR EAST          698585         698585
##  6 WESTERN EUROPE   10379067       10379067
##  7 OCEANIA             21388          21388
##  8 NEAR EAST          784301         784301
##  9 WESTERN EUROPE    5450661        5450661
## 10 WESTERN EUROPE      47246          47246
## # ... with 55 more rows

Die Variable Population.num wurde unter Punkt 3 bereits auf Normalverteilung überprüft (das Ergebnis war signifikant, d.h. es liegt keine Normalverteilung vor). Diesen Schritt sparen wir uns daher an dieser Stelle. Es wird lediglich erneut die Stichprobengröße untersucht.

sampling.size <- describeBy(kruskal$Population.num, kruskal$Region, mat = TRUE)
sampling.size$n
## [1] 16 21 28

Erneut greift der zentrale Grenzwertsatz nicht, daher wird anstelle der einfaktoriellen Varinzanalyse der Kruskal-Wallis-Test angewendet.

kruskal.test(kruskal$Population.num ~ factor(kruskal$Region))
## 
##  Kruskal-Wallis rank sum test
## 
## data:  kruskal$Population.num by factor(kruskal$Region)
## Kruskal-Wallis chi-squared = 15.13, df = 2, p-value = 0.0005183

Die Prüfgröße des Kruskal-Wallis-Test ist chi2 verteilt. Wir erhalten ein signifikantes Ergebnis mit chi2=15,13, df=2 und p<.001. Die Länder der drei Regionen unterschieden sich demnach in ihren Populationswerten.

5 Conclusion

Zwar kommt es bei einer repräsentativen Studie eher selten dazu, dass die unabhängige Variable nicht normalverteilt ist bzw. die Stichprobengröße (pro Gruppe!) unter 30 fällt aber streng genommen ist eine Variable, die durch die Verwendung einer Likert-Skala erhoben wurde, nicht intervallskaliert. Demnach müssten, bei Verwendung solcher Variablen, nonparametrische Verfahren eingesetzt werden.

Source

Luhmann, M. (2011). R für Einsteiger.