Kapitel 42 Sampling Methoden

Unkorrigierte, unfertige Version 24 December, 2022

Sie lernen in diesem Kapitel folgendes:

  • Repräsentative Stichprobe
  • Missing At Random
  • Missing Not At Random

42.1 Pakete

library(tidyverse)
library(summarytools)
library(DescTools)
library(naniar)
library(Statamarkdown)

To Do:

42.2 Erstellen einer Population

Für die Übungen in diesem Kapitel müssen wir zuerst eine Population erstellen. Wir simulieren die Schweizer Bevölkerung. Achtung: diese Simulation dient wirklich nur der Illustration und ist keinesfalls eine korrekte Abbildung der Schweizer Bevölkerung.

Wir erstellen folgende Variablen

  • Kanton
  • Alter
  • Körpergrösse

Körpergrösse Appenzell.

text<-c("Zurich", "Bern", "Luzern", "Uri", "Schwyz", "Obwalden", "Nidwalden" ,"Glarus","Zug", "Fribourg", "Solothurn", "Basel-Stadt", "Basel-Landschaft", "Schaffhausen", "Appenzell Ausserrhoden","Appenzell Innerrhoden", "St.Gallen")

textb<-c("Graubuenden","Aargau","Thurgau","Ticino","Vaud","Valais", "Neuchatel", "Geneve", "Jura")
cantons<-c(text, textb)


Canton<- rep(cantons,  c(1129722,869681,337132,32073,126227,32475,36996,30753,91736,250287,212535,124151,222404,61267,46135,14420,387398,161989,517015,210840,254109,544045,268980,131671,302731,62740))

data<-data.frame(Canton)
Gender<-rep(c("Man","Woman"), times=26)
Gender
 [1] "Man"   "Woman" "Man"   "Woman" "Man"   "Woman" "Man"   "Woman" "Man"  
[10] "Woman" "Man"   "Woman" "Man"   "Woman" "Man"   "Woman" "Man"   "Woman"
[19] "Man"   "Woman" "Man"   "Woman" "Man"   "Woman" "Man"   "Woman" "Man"  
[28] "Woman" "Man"   "Woman" "Man"   "Woman" "Man"   "Woman" "Man"   "Woman"
[37] "Man"   "Woman" "Man"   "Woman" "Man"   "Woman" "Man"   "Woman" "Man"  
[46] "Woman" "Man"   "Woman" "Man"   "Woman" "Man"   "Woman"
Gender<-rep(Gender, times=c(550305,579417,420965,448716,165367,171765, 16145, 15928,63715,62512,16180,16295,18726,18270,15139,15614,45457,46279,122792,127495,103987, 108548,58252,65899,107097,115307,29632,31635,22912,23223,7331,7089,189901,197497,79521,82468,253789,263226,103889,106951,120317,133792,258757,285288,130568,138412,62585,69086,141703,161028,30630,32110))

data<-data.frame(Canton, Gender)
summarytools::ctable(data$Canton, data$Gender)
Cross-Tabulation, Row Proportions  
Canton * Gender  
Data Frame: data  

------------------------ -------- ----------------- ----------------- ------------------
                           Gender               Man             Woman              Total
                  Canton                                                                
                  Aargau             253789 (49.1%)    263226 (50.9%)    517015 (100.0%)
  Appenzell Ausserrhoden              22912 (49.7%)     23223 (50.3%)     46135 (100.0%)
   Appenzell Innerrhoden               7331 (50.8%)      7089 (49.2%)     14420 (100.0%)
        Basel-Landschaft             107097 (48.2%)    115307 (51.8%)    222404 (100.0%)
             Basel-Stadt              58252 (46.9%)     65899 (53.1%)    124151 (100.0%)
                    Bern             420965 (48.4%)    448716 (51.6%)    869681 (100.0%)
                Fribourg             122792 (49.1%)    127495 (50.9%)    250287 (100.0%)
                  Geneve             141703 (46.8%)    161028 (53.2%)    302731 (100.0%)
                  Glarus              15139 (49.2%)     15614 (50.8%)     30753 (100.0%)
             Graubuenden              79521 (49.1%)     82468 (50.9%)    161989 (100.0%)
                    Jura              30630 (48.8%)     32110 (51.2%)     62740 (100.0%)
                  Luzern             165367 (49.1%)    171765 (50.9%)    337132 (100.0%)
               Neuchatel              62585 (47.5%)     69086 (52.5%)    131671 (100.0%)
               Nidwalden              18726 (50.6%)     18270 (49.4%)     36996 (100.0%)
                Obwalden              16180 (49.8%)     16295 (50.2%)     32475 (100.0%)
            Schaffhausen              29632 (48.4%)     31635 (51.6%)     61267 (100.0%)
                  Schwyz              63715 (50.5%)     62512 (49.5%)    126227 (100.0%)
               Solothurn             103987 (48.9%)    108548 (51.1%)    212535 (100.0%)
               St.Gallen             189901 (49.0%)    197497 (51.0%)    387398 (100.0%)
                 Thurgau             103889 (49.3%)    106951 (50.7%)    210840 (100.0%)
                  Ticino             120317 (47.3%)    133792 (52.7%)    254109 (100.0%)
                     Uri              16145 (50.3%)     15928 (49.7%)     32073 (100.0%)
                  Valais             130568 (48.5%)    138412 (51.5%)    268980 (100.0%)
                    Vaud             258757 (47.6%)    285288 (52.4%)    544045 (100.0%)
                     Zug              45457 (49.6%)     46279 (50.4%)     91736 (100.0%)
                  Zurich             550305 (48.7%)    579417 (51.3%)   1129722 (100.0%)
                   Total            3135662 (48.5%)   3323850 (51.5%)   6459512 (100.0%)
------------------------ -------- ----------------- ----------------- ------------------

Jetzt simulieren wir noch die Körpergrösse. Männer sind im Durchschnitt 7% grösser als Frauen und die Grössen für die jeweiligen Kantone entnehmen wir von hier https://www.swissinfo.ch/ger/die-appenzeller-bleiben-die-kleinsten-schweizer/6889036#:~:text=M%C3%A4nner%20im%20Ostschweizer%20Kanton%20Appenzell,Basler%2C%20die%20Gr%C3%B6ssten%20der%20Schweiz..

data<-data %>% 
  mutate(Koerpergroesse=case_when(
    Canton=="Zurich"~rnorm(n(), 1.782, 0.04*1.782), 
    Canton=="Basel-Stadt"~rnorm(n(), 1.789, 0.04*1.789),
    Canton=="Zug"~rnorm(n(), 1.788, 0.04*1.788),
    Canton=="Schwyz"~rnorm(n(), 1.787, 0.04*1.787),
    Canton=="Luzern"~rnorm(n(), 1.785, 0.04*1.785),
    Canton=="Schaffhausen"~rnorm(n(), 1.785, 0.04*1.785),
    Canton=="Basel-Landschaft"~rnorm(n(), 1.784, 0.04*1.784),
    Canton=="Graubuenden"~rnorm(n(), 1.783, 0.04*1.783),
    Canton=="Vaud"~rnorm(n(), 1.783, 0.04*1.783),
    Canton=="Bern"~rnorm(n(), 1.782, 0.04*1.782),
    Canton=="Thurgau"~rnorm(n(), 1.781, 0.04*1.781),
    Canton=="Jura"~rnorm(n(), 1.781, 0.04*1.781),
    Canton=="Nidwalden"~rnorm(n(), 1.780, 0.04*1.780),
    Canton=="Aargau"~rnorm(n(), 1.780, 0.04*1.780), 
    Canton=="Appenzell Ausserrhoden"~rnorm(n(), 1.782, 0.04*1.782),
    Canton=="St.Gallen"~rnorm(n(), 1.780, 0.04*1.780),
    Canton=="Solothurn"~rnorm(n(), 1.777, 0.04*1.777),
    Canton=="Valais"~rnorm(n(), 1.777, 0.04*1.777),
    Canton=="Fribourg"~rnorm(n(), 1.776, 0.04*1.776),
    Canton=="Neuchatel"~rnorm(n(), 1.776, 0.04*1.776),
    Canton=="Ticino"~rnorm(n(), 1.776, 0.04*1.776),
    Canton=="Uri"~rnorm(n(), 1.776, 0.04*1.776),
    Canton=="Glarus"~rnorm(n(), 1.775, 0.04*1.775),
    Canton=="Geneve"~rnorm(n(), 1.774, 0.04*1.774),
    Canton=="Obwalden"~rnorm(n(), 1.769, 0.04*1.769),
    Canton=="Appenzell Innerrhoden"~rnorm(n(), 1.761, 0.04*1.761)
  ))
rio::export(data, "switzerland_cantons.csv")
rio::export(data, "switzerland_cantons.dta")

42.3 Beschreibende Statistik der Population

Jetzt tun wir etwas, was wir in der Realität praktisch nie tun können: Wir beschreiben die gesamte Population.

summary<-data %>% 
  group_by(Canton) %>% 
  summarise(mean=mean(Koerpergroesse), na.rm=TRUE)


naniar::vis_miss(data, warn_large_data=FALSE)
Warning: `gather_()` was deprecated in tidyr 1.2.0.
ℹ Please use `gather()` instead.
ℹ The deprecated feature was likely used in the visdat package.
  Please report the issue at <]8;;https://github.com/ropensci/visdat/issueshttps://github.com/ropensci/visdat/issues]8;;>.

MeanCI(data$Koerpergroesse)
    mean   lwr.ci   upr.ci 
1.780877 1.780822 1.780932 

42.4 Simple Random Sample

set.seed=666
sr_sample<-data[sample(nrow(data), 100), ]

freq(sr_sample$Canton)
Frequencies  
sr_sample$Canton  
Type: Character  

                         Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
---------------------- ------ --------- -------------- --------- --------------
                Aargau      8      8.00           8.00      8.00           8.00
      Basel-Landschaft      1      1.00           9.00      1.00           9.00
           Basel-Stadt      2      2.00          11.00      2.00          11.00
                  Bern     12     12.00          23.00     12.00          23.00
              Fribourg      2      2.00          25.00      2.00          25.00
                Geneve      3      3.00          28.00      3.00          28.00
           Graubuenden      2      2.00          30.00      2.00          30.00
                Luzern      8      8.00          38.00      8.00          38.00
             Neuchatel      5      5.00          43.00      5.00          43.00
             Nidwalden      1      1.00          44.00      1.00          44.00
              Obwalden      1      1.00          45.00      1.00          45.00
          Schaffhausen      2      2.00          47.00      2.00          47.00
                Schwyz      3      3.00          50.00      3.00          50.00
             Solothurn      7      7.00          57.00      7.00          57.00
             St.Gallen      4      4.00          61.00      4.00          61.00
               Thurgau      2      2.00          63.00      2.00          63.00
                Ticino      4      4.00          67.00      4.00          67.00
                Valais      2      2.00          69.00      2.00          69.00
                  Vaud     14     14.00          83.00     14.00          83.00
                   Zug      2      2.00          85.00      2.00          85.00
                Zurich     15     15.00         100.00     15.00         100.00
                  <NA>      0                               0.00         100.00
                 Total    100    100.00         100.00    100.00         100.00

Wir haben jetzt natürlich eine zu kleine Stichprobe um eine Aussage über die Körpergrösse in den Kantonen zu machen. Bei so kleinen Stichproben ist es nicht sicher, dass wir aus allen Kantonen Personen haben.

In Bezug auf die statistische Präzision haben wir mit 100 Personen schon weniger ein Problem.

MeanCI(sr_sample$Koerpergroesse, na.rm=TRUE)
    mean   lwr.ci   upr.ci 
1.781725 1.767209 1.796242 

Jetzt nehmen wir eine grössere Stichprobe. Wir haben immer noch kleine Stichproben in den kleineren Kantonen.

set.seed= 666
sr_sample<-data[sample(nrow(data), 1000), ]

freq(sr_sample$Canton)
Frequencies  
sr_sample$Canton  
Type: Character  

                               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
---------------------------- ------ --------- -------------- --------- --------------
                      Aargau     84      8.40           8.40      8.40           8.40
      Appenzell Ausserrhoden     11      1.10           9.50      1.10           9.50
            Basel-Landschaft     38      3.80          13.30      3.80          13.30
                 Basel-Stadt     16      1.60          14.90      1.60          14.90
                        Bern    145     14.50          29.40     14.50          29.40
                    Fribourg     43      4.30          33.70      4.30          33.70
                      Geneve     38      3.80          37.50      3.80          37.50
                      Glarus      4      0.40          37.90      0.40          37.90
                 Graubuenden     21      2.10          40.00      2.10          40.00
                        Jura     11      1.10          41.10      1.10          41.10
                      Luzern     58      5.80          46.90      5.80          46.90
                   Neuchatel     30      3.00          49.90      3.00          49.90
                   Nidwalden      4      0.40          50.30      0.40          50.30
                    Obwalden      6      0.60          50.90      0.60          50.90
                Schaffhausen      7      0.70          51.60      0.70          51.60
                      Schwyz     13      1.30          52.90      1.30          52.90
                   Solothurn     30      3.00          55.90      3.00          55.90
                   St.Gallen     59      5.90          61.80      5.90          61.80
                     Thurgau     35      3.50          65.30      3.50          65.30
                      Ticino     21      2.10          67.40      2.10          67.40
                         Uri     10      1.00          68.40      1.00          68.40
                      Valais     42      4.20          72.60      4.20          72.60
                        Vaud     77      7.70          80.30      7.70          80.30
                         Zug     14      1.40          81.70      1.40          81.70
                      Zurich    183     18.30         100.00     18.30         100.00
                        <NA>      0                               0.00         100.00
                       Total   1000    100.00         100.00    100.00         100.00
MeanCI(sr_sample$Koerpergroesse, na.rm=TRUE)
    mean   lwr.ci   upr.ci 
1.780795 1.776406 1.785183 

42.5 Geschichtetes (stratifiziertes) Sampling

Wir können jetzt die Zufallsstichprobe pro Kanton ziehen. Wir benutzen dafür einen Befehl aus dem dplyr Paket.

stratified <- data %>%
  group_by(Canton) %>%
  sample_n(size=50)

freq(stratified$Canton)
Frequencies  
stratified$Canton  
Type: Character  

                               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
---------------------------- ------ --------- -------------- --------- --------------
                      Aargau     50      3.85           3.85      3.85           3.85
      Appenzell Ausserrhoden     50      3.85           7.69      3.85           7.69
       Appenzell Innerrhoden     50      3.85          11.54      3.85          11.54
            Basel-Landschaft     50      3.85          15.38      3.85          15.38
                 Basel-Stadt     50      3.85          19.23      3.85          19.23
                        Bern     50      3.85          23.08      3.85          23.08
                    Fribourg     50      3.85          26.92      3.85          26.92
                      Geneve     50      3.85          30.77      3.85          30.77
                      Glarus     50      3.85          34.62      3.85          34.62
                 Graubuenden     50      3.85          38.46      3.85          38.46
                        Jura     50      3.85          42.31      3.85          42.31
                      Luzern     50      3.85          46.15      3.85          46.15
                   Neuchatel     50      3.85          50.00      3.85          50.00
                   Nidwalden     50      3.85          53.85      3.85          53.85
                    Obwalden     50      3.85          57.69      3.85          57.69
                Schaffhausen     50      3.85          61.54      3.85          61.54
                      Schwyz     50      3.85          65.38      3.85          65.38
                   Solothurn     50      3.85          69.23      3.85          69.23
                   St.Gallen     50      3.85          73.08      3.85          73.08
                     Thurgau     50      3.85          76.92      3.85          76.92
                      Ticino     50      3.85          80.77      3.85          80.77
                         Uri     50      3.85          84.62      3.85          84.62
                      Valais     50      3.85          88.46      3.85          88.46
                        Vaud     50      3.85          92.31      3.85          92.31
                         Zug     50      3.85          96.15      3.85          96.15
                      Zurich     50      3.85         100.00      3.85         100.00
                        <NA>      0                               0.00         100.00
                       Total   1300    100.00         100.00    100.00         100.00

Doch Achtung! Was ist jetzt das Problem? Ja genau, jetzt ist die Stichprobe nicht mehr repräsentativ für die gesamte Schweiz. Für die Berechnung auf Kantonsebene wäre es jedoch nicht verfälscht.

MeanCI(stratified$Koerpergroesse, na.rm=TRUE)
    mean   lwr.ci   upr.ci 
1.782828 1.779049 1.786607 

Wir haben zwei Möglichkeiten: Wir ziehen die zufällige Stichprobe so, dass aus jedem Kanton proportional zur Gesamtgrösse gezogen wird, d.h. aus kleineren Kantonen werden weniger Personen gezogen.

set.seed=666
proportional_stratified<-data %>% 
  mutate(Total_N=n()) %>% 
  group_by(Canton) %>% 
  mutate(Canton_N=n()) %>% 
  mutate(sampling_weight=mean(Canton_N)/mean(Total_N)) %>% 
  mutate(sample_N=round(1000*mean(sampling_weight))) %>% 
  sample_n(size=mean(sample_N)) %>% 
  ungroup()
freq(data$Canton)
Frequencies  
data$Canton  
Type: Character  

                                  Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
---------------------------- --------- --------- -------------- --------- --------------
                      Aargau    517015      8.00           8.00      8.00           8.00
      Appenzell Ausserrhoden     46135      0.71           8.72      0.71           8.72
       Appenzell Innerrhoden     14420      0.22           8.94      0.22           8.94
            Basel-Landschaft    222404      3.44          12.38      3.44          12.38
                 Basel-Stadt    124151      1.92          14.31      1.92          14.31
                        Bern    869681     13.46          27.77     13.46          27.77
                    Fribourg    250287      3.87          31.64      3.87          31.64
                      Geneve    302731      4.69          36.33      4.69          36.33
                      Glarus     30753      0.48          36.81      0.48          36.81
                 Graubuenden    161989      2.51          39.32      2.51          39.32
                        Jura     62740      0.97          40.29      0.97          40.29
                      Luzern    337132      5.22          45.51      5.22          45.51
                   Neuchatel    131671      2.04          47.54      2.04          47.54
                   Nidwalden     36996      0.57          48.12      0.57          48.12
                    Obwalden     32475      0.50          48.62      0.50          48.62
                Schaffhausen     61267      0.95          49.57      0.95          49.57
                      Schwyz    126227      1.95          51.52      1.95          51.52
                   Solothurn    212535      3.29          54.81      3.29          54.81
                   St.Gallen    387398      6.00          60.81      6.00          60.81
                     Thurgau    210840      3.26          64.07      3.26          64.07
                      Ticino    254109      3.93          68.01      3.93          68.01
                         Uri     32073      0.50          68.50      0.50          68.50
                      Valais    268980      4.16          72.67      4.16          72.67
                        Vaud    544045      8.42          81.09      8.42          81.09
                         Zug     91736      1.42          82.51      1.42          82.51
                      Zurich   1129722     17.49         100.00     17.49         100.00
                        <NA>         0                               0.00         100.00
                       Total   6459512    100.00         100.00    100.00         100.00
freq(proportional_stratified$Canton)
Frequencies  
proportional_stratified$Canton  
Type: Character  

                               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
---------------------------- ------ --------- -------------- --------- --------------
                      Aargau     80      8.00           8.00      8.00           8.00
      Appenzell Ausserrhoden      7      0.70           8.70      0.70           8.70
       Appenzell Innerrhoden      2      0.20           8.90      0.20           8.90
            Basel-Landschaft     34      3.40          12.30      3.40          12.30
                 Basel-Stadt     19      1.90          14.20      1.90          14.20
                        Bern    135     13.50          27.70     13.50          27.70
                    Fribourg     39      3.90          31.60      3.90          31.60
                      Geneve     47      4.70          36.30      4.70          36.30
                      Glarus      5      0.50          36.80      0.50          36.80
                 Graubuenden     25      2.50          39.30      2.50          39.30
                        Jura     10      1.00          40.30      1.00          40.30
                      Luzern     52      5.20          45.50      5.20          45.50
                   Neuchatel     20      2.00          47.50      2.00          47.50
                   Nidwalden      6      0.60          48.10      0.60          48.10
                    Obwalden      5      0.50          48.60      0.50          48.60
                Schaffhausen      9      0.90          49.50      0.90          49.50
                      Schwyz     20      2.00          51.50      2.00          51.50
                   Solothurn     33      3.30          54.80      3.30          54.80
                   St.Gallen     60      6.00          60.80      6.00          60.80
                     Thurgau     33      3.30          64.10      3.30          64.10
                      Ticino     39      3.90          68.00      3.90          68.00
                         Uri      5      0.50          68.50      0.50          68.50
                      Valais     42      4.20          72.70      4.20          72.70
                        Vaud     84      8.40          81.10      8.40          81.10
                         Zug     14      1.40          82.50      1.40          82.50
                      Zurich    175     17.50         100.00     17.50         100.00
                        <NA>      0                               0.00         100.00
                       Total   1000    100.00         100.00    100.00         100.00
Mit dieser Methode haben wir jedoch wieder das Problem, das wir eher zu wenig Personen aus den kleinen Kantonen haben. Entweder ziehen wir insgesamt eine grössere Stichprobe, oder wir machen ein oversampling, d.h. wir ziehen proportional zu viele Personen aus den kleineren Kantonen. Wir könnten zum Beispiel bestimmen, dass wir mindestens 30 Personen aus jedem Kanton möchten. In dieser einfachen Variante hier akzeptieren wir, dass wir am Schluss mehr als die 1000 Personen haben.

Wir müssen dies dann beim Analysieren natürlich berücksichtigen und die Analyse dementsprechend gewichten.

set.seed=666
proportional_stratified<-data %>% 
  mutate(Total_N=n()) %>% 
  group_by(Canton) %>% 
  mutate(Canton_N=n()) %>% 
  mutate(sampling_weight=mean(Canton_N)/mean(Total_N)) %>% 
  mutate(sample_N=round(1000*mean(sampling_weight))) %>% 
  mutate(oversampled_N=ifelse(sample_N<30, 30, sample_N)) %>% 
  sample_n(size=mean(oversampled_N)) %>% 
  ungroup()
freq(data$Canton)
Frequencies  
data$Canton  
Type: Character  

                                  Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
---------------------------- --------- --------- -------------- --------- --------------
                      Aargau    517015      8.00           8.00      8.00           8.00
      Appenzell Ausserrhoden     46135      0.71           8.72      0.71           8.72
       Appenzell Innerrhoden     14420      0.22           8.94      0.22           8.94
            Basel-Landschaft    222404      3.44          12.38      3.44          12.38
                 Basel-Stadt    124151      1.92          14.31      1.92          14.31
                        Bern    869681     13.46          27.77     13.46          27.77
                    Fribourg    250287      3.87          31.64      3.87          31.64
                      Geneve    302731      4.69          36.33      4.69          36.33
                      Glarus     30753      0.48          36.81      0.48          36.81
                 Graubuenden    161989      2.51          39.32      2.51          39.32
                        Jura     62740      0.97          40.29      0.97          40.29
                      Luzern    337132      5.22          45.51      5.22          45.51
                   Neuchatel    131671      2.04          47.54      2.04          47.54
                   Nidwalden     36996      0.57          48.12      0.57          48.12
                    Obwalden     32475      0.50          48.62      0.50          48.62
                Schaffhausen     61267      0.95          49.57      0.95          49.57
                      Schwyz    126227      1.95          51.52      1.95          51.52
                   Solothurn    212535      3.29          54.81      3.29          54.81
                   St.Gallen    387398      6.00          60.81      6.00          60.81
                     Thurgau    210840      3.26          64.07      3.26          64.07
                      Ticino    254109      3.93          68.01      3.93          68.01
                         Uri     32073      0.50          68.50      0.50          68.50
                      Valais    268980      4.16          72.67      4.16          72.67
                        Vaud    544045      8.42          81.09      8.42          81.09
                         Zug     91736      1.42          82.51      1.42          82.51
                      Zurich   1129722     17.49         100.00     17.49         100.00
                        <NA>         0                               0.00         100.00
                       Total   6459512    100.00         100.00    100.00         100.00
freq(proportional_stratified$Canton)
Frequencies  
proportional_stratified$Canton  
Type: Character  

                               Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
---------------------------- ------ --------- -------------- --------- --------------
                      Aargau     80      6.44           6.44      6.44           6.44
      Appenzell Ausserrhoden     30      2.41           8.85      2.41           8.85
       Appenzell Innerrhoden     30      2.41          11.26      2.41          11.26
            Basel-Landschaft     34      2.74          14.00      2.74          14.00
                 Basel-Stadt     30      2.41          16.41      2.41          16.41
                        Bern    135     10.86          27.27     10.86          27.27
                    Fribourg     39      3.14          30.41      3.14          30.41
                      Geneve     47      3.78          34.19      3.78          34.19
                      Glarus     30      2.41          36.60      2.41          36.60
                 Graubuenden     30      2.41          39.02      2.41          39.02
                        Jura     30      2.41          41.43      2.41          41.43
                      Luzern     52      4.18          45.62      4.18          45.62
                   Neuchatel     30      2.41          48.03      2.41          48.03
                   Nidwalden     30      2.41          50.44      2.41          50.44
                    Obwalden     30      2.41          52.86      2.41          52.86
                Schaffhausen     30      2.41          55.27      2.41          55.27
                      Schwyz     30      2.41          57.68      2.41          57.68
                   Solothurn     33      2.65          60.34      2.65          60.34
                   St.Gallen     60      4.83          65.16      4.83          65.16
                     Thurgau     33      2.65          67.82      2.65          67.82
                      Ticino     39      3.14          70.96      3.14          70.96
                         Uri     30      2.41          73.37      2.41          73.37
                      Valais     42      3.38          76.75      3.38          76.75
                        Vaud     84      6.76          83.51      6.76          83.51
                         Zug     30      2.41          85.92      2.41          85.92
                      Zurich    175     14.08         100.00     14.08         100.00
                        <NA>      0                               0.00         100.00
                       Total   1243    100.00         100.00    100.00         100.00

Wir können das erstellen der Stichprobe auch etwas eleganter gestalten. https://rstudio-pubs-static.s3.amazonaws.com/268281_cc370bbbbbfb437b8650b22d208734d1.html.

Hier zuerst die falsche Analyse für die Durschnittliche Grösse in der Schweiz. Der Fehler ist extrem gering, aber die Analyse ist trotzdem nicht korrekt.

Mean(data$Koerpergroesse, na.rm=TRUE)
[1] 1.780877
MeanCI(proportional_stratified$Koerpergroesse, na.rm=TRUE)
    mean   lwr.ci   upr.ci 
1.780370 1.776363 1.784377 

Jetzt die korrekte Analyse.

42.6 Random sampling mit oversampling in Stata

Der Befehl sample zieht n Personen, ohne Ersetzen (Replacement), d.h. eine Person kann nur einmal gezogen werden. Ohne Option count, ist die Zahl nach sample Prozente der Population, d.h. sample 5 würde 5% der Population ziehen.

Wir könnten jetzt ausrechnen, wie viel 1000 Personen in Prozenten von der gesamten Population sind und dementsprechend samplen.

use switzerland_cantons.dta
local perc_sample = 1000/_N*100
dis `perc_sample' 

bysort Canton: sample  `perc_sample'

tab Canton 
.01548105

(6,458,512 observations deleted)

                Canton |      Freq.     Percent        Cum.
-----------------------+-----------------------------------
                Aargau |         80        8.00        8.00
Appenzell Ausserrhoden |          7        0.70        8.70
 Appenzell Innerrhoden |          2        0.20        8.90
      Basel-Landschaft |         34        3.40       12.30
           Basel-Stadt |         19        1.90       14.20
                  Bern |        135       13.50       27.70
              Fribourg |         39        3.90       31.60
                Geneve |         47        4.70       36.30
                Glarus |          5        0.50       36.80
           Graubuenden |         25        2.50       39.30
                  Jura |         10        1.00       40.30
                Luzern |         52        5.20       45.50
             Neuchatel |         20        2.00       47.50
             Nidwalden |          6        0.60       48.10
              Obwalden |          5        0.50       48.60
          Schaffhausen |          9        0.90       49.50
                Schwyz |         20        2.00       51.50
             Solothurn |         33        3.30       54.80
             St.Gallen |         60        6.00       60.80
               Thurgau |         33        3.30       64.10
                Ticino |         39        3.90       68.00
                   Uri |          5        0.50       68.50
                Valais |         42        4.20       72.70
                  Vaud |         84        8.40       81.10
                   Zug |         14        1.40       82.50
                Zurich |        175       17.50      100.00
-----------------------+-----------------------------------
                 Total |      1,000      100.00

Wir sehen, dass wir jetzt in den kleinen Kantonen zu wenig grosse Stichproben haben. Wir könnten jetzt unseren Code etwas anpassen.

Wir müssen jedoch dafür zwei Programme in Stata installieren:

  • ssc install moremata
  • ssc install gsample

Alternativ könnten wir auch in jedem Kanton separat eine Stichprobe ziehen und die Grösse dieser Stichprobe manuell bestimmen. Danach müssten wir die Stichproben wieder zusammensetzen.


use switzerland_cantons.dta, clear

scalar perc_sample = 1000/_N*100
dis  perc_sample  
local total_N = _N 
bysort Canton: gen double weight_Canton= _N/`total_N'

bysort Canton: gen population=_N

bysort Canton: gen double sample_canton=_N *  perc_sample /100

gen double oversampled_n = sample_canton 
replace oversampled_n= oversampled_n * 30/sample_canton if sample_canton<30
replace oversampled_n=. if sample_canton>30
bysort Canton: replace oversampled_n=. if _n>1 
egen double rest_to_sample = total(oversampled_n)
replace rest_to_sample= 1000-rest_to_sample
replace oversampled_n = weight_Canton*rest_to_sample if sample_canton>30
bysort Canton: replace oversampled_n= oversampled_n/_N 
bysort Canton: replace oversampled_n =oversampled_n[_n-1] if missing(oversampled_n) 
 gsample 1000 [w=oversampled_n], wor 
 
bysort Canton: gen double oversampled_n_per_canton=_N
bysort Canton: gen double weight_for_analysis =  sample_canton / oversampled_n_per_canton
mean Koerpergroesse [pweight=weight_for_analysis]
.01548105






(952,633 real changes made)

(5,506,879 real changes made, 5,506,879 to missing)

(952620 real changes made, 952620 to missing)


(6,459,512 real changes made)

(5,506,879 real changes made)

(5506892 real changes made)

(952620 real changes made)

(6,458,512 observations deleted)




Mean estimation                            Number of obs = 1,000

----------------------------------------------------------------
               |       Mean   Std. err.     [95% conf. interval]
---------------+------------------------------------------------
Koerpergroesse |   1.782698   .0026426      1.777512    1.787883
----------------------------------------------------------------

Nur um zu überprüfen, ob das gewichtete Mittel jetzt stimmt:

use switzerland_cantons.dta, clear
mean Koerpergroesse
Mean estimation                        Number of obs = 6,459,512

----------------------------------------------------------------
               |       Mean   Std. err.     [95% conf. interval]
---------------+------------------------------------------------
Koerpergroesse |   1.780877   .0000281      1.780822    1.780932
----------------------------------------------------------------

42.7 Referenzen

Sampling mit Stata.