Publikacje naukowe · Dane sondażowe

Ważenie danych sondażowych krok po kroku – wagi schematu, brak odpowiedzi, raking i przycinanie wag

Jak zbudować wagi do sondażu od planu losowania do gotowej analizy: wagi schematu, korekta braku odpowiedzi, raking ręcznie w R, przycinanie wag, efektywna liczebność Kisha i błąd standardowy, który uwzględnia ważenie.

Strona główna / Blog / Ważenie danych sondażowych
W skrócie: Wagi sondażowe buduje się w krokach: waga schematu (odwrotność prawdopodobieństwa wylosowania), korekta braku odpowiedzi w klasach, raking do rozkładów brzegowych populacji i – gdy trzeba – przycięcie skrajnych wag z ponownym rakingiem. Każdy krok zmniejsza obciążenie, ale obniża efektywną liczebność próby, dlatego błąd standardowy licz metodą uwzględniającą wagi, a w raporcie podaj diagnostykę wag i wynik bez wag.

Co ważenie naprawia, a czego nie

Hasło ważenie danych i wagi poststratyfikacyjne pokazuje najprostszy przypadek: jedna zmienna, jedna waga na grupę. W prawdziwym sondażu wagi powstają w kilku krokach, a każdy krok koryguje inny problem. Ten wpis prowadzi przez cały proces na jednym symulowanym badaniu, z kodem w podstawowym R: od wag schematu, przez korektę braku odpowiedzi i raking, po przycinanie wag i błąd standardowy, który uwzględnia ważenie.

Zacznij od trzeźwej oceny, czego się po wagach spodziewasz. Ważenie wyrównuje strukturę próby w zmiennych, których użyłeś do ważenia. Usuwa błąd braku odpowiedzi tylko wtedy, gdy w obrębie kategorii ważenia osoby, które odpowiedziały, nie różnią się od tych, które odmówiły. W próbach internetowych z autoselekcją ważenie często nie wystarcza (Bethlehem, 2010), a wnioskowanie z próby nielosowej zawsze opiera się na założeniach modelu (Elliott i Valliant, 2017). Prostszą wersję rakingu na próbie internetowej, w pracy dyplomowej, znajdziesz we wpisie statystyka w pracy z socjologii.

Trzy etapy budowy wag

Haziza i Beaumont (2017) opisują typowy proces ważenia w urzędach statystycznych jako trzy etapy, po których czasem następuje czwarty: przycięcie lub wygładzenie wag. Ten sam schemat sprawdza się w badaniu naukowym.

Etapy budowy wag sondażowych: co koryguje każdy etap, jak się go liczy i jakich danych wymaga
EtapCo korygujeJak liczyszCzego potrzebujesz
1. Waga schematu (bazowa)Nierówne szanse wylosowaniadi = 1/πiPrawdopodobieństwa wyboru z planu losowania
2. Korekta braku odpowiedziRóżny odsetek odpowiedzi w grupachmnożnik = suma wag wylosowanych / suma wag respondentów w klasieCechy znane dla wszystkich wylosowanych (z operatu)
3. Kalibracja (raking)Pozostałe różnice struktury, niepełne pokrycieiteracyjne dopasowanie rozkładów brzegowychRozkłady w populacji (np. dane GUS)
4. PrzycinanieKilka skrajnych wag, które zwiększają wariancjęobcięcie do progu i ponowny rakingPróg ustalony przed analizą

W próbie bez planu losowania (np. ankieta w mediach społecznościowych) etapu 1 nie ma, bo nie znasz prawdopodobieństw wyboru. Zostaje sama kalibracja, a jej skuteczność zależy od tego, czy zmienne ważące tłumaczą zarówno udział w badaniu, jak i badaną cechę.

Przykład: sondaż o korzystaniu z pomocy psychologicznej

Symulujemy populację 400 000 dorosłych i badamy odsetek osób, które w ostatnich 12 miesiącach korzystały z pomocy psychologicznej. Ponieważ populację tworzymy sami, znamy prawdziwy odsetek: 22.55%. Z operatu losujemy próbę warstwową: 1000 osób z miast i 1500 ze wsi, więc wieś jest celowo nadreprezentowana. Na zaproszenie odpowiada 1033 z 2500 osób (41.3%). Młodsi i gorzej wykształceni odpowiadają rzadziej, a udział w badaniu zależy też od cechy, której nie mierzymy (otwartości na rozmowę o zdrowiu psychicznym). Dane są symulowane (set.seed(2111)); zbiór respondentów z wagami z każdego kroku możesz pobrać jako plik CSV.

Struktura 1033 respondentów bez wag w porównaniu ze strukturą populacji według płci, wieku, wykształcenia i miejsca zamieszkania
ZmiennaKategoriaRespondenci bez wag (%)Populacja (%)
Płećkobieta52.951.9
Wiek18–3413.926.8
Wiek55+52.839.1
Wykształceniepodstawowe lub zawodowe31.139.1
Wykształceniewyższe28.522.8
Miejsce zamieszkaniawieś56.940.1

Najmłodszych jest w próbie o połowę za mało, a to oni najczęściej korzystają z pomocy. Odsetek bez wag (19.55%) jest więc zaniżony o 3.00 punktu procentowego.

Krok 1. Wagi schematu

Waga schematu to odwrotność prawdopodobieństwa wylosowania. W losowaniu warstwowym jest stała w warstwie: d = Nh / nh, czyli liczba osób w populacji, które „reprezentuje” jedna wylosowana osoba. Mieszkaniec miasta dostaje tu wagę 239.7, a mieszkaniec wsi 106.8. Po normalizacji do średniej 1 wagi wahają się od 0.65 do 1.46. Sam ten krok przywraca proporcję miasta i wsi z planu losowania, ale nie naprawia skutków odmów: odsetek rośnie tylko do 20.57%. Pojęcie próby losowej i jej odmian omawiamy w słowniku.

Krok 2. Korekta braku odpowiedzi

Korekta wymaga cechy znanej dla wszystkich wylosowanych, także tych, którzy odmówili. W rejestrze, z którego losujesz, zwykle jest wiek i miejsce zamieszkania. Dzielisz wylosowanych na klasy (tu: warstwa × wiek) i w każdej klasie mnożysz wagi respondentów przez odwrotność ważonego wskaźnika odpowiedzi:

wi = di × Σwylosowani w klasie d / Σrespondenci w klasie d

W przykładzie mnożnik wynosi od 1.64 (miasto, 55+) do 5.07 (wieś, 18–34): na jedną młodą osobę ze wsi, która odpowiedziała, przypada pięć wylosowanych. Oszacowanie rośnie do 23.05%, czyli nieco powyżej prawdy. Klasy dobierz tak, by grupowały osoby o podobnej skłonności do odpowiedzi i podobnej wartości badanej cechy. Zbyt drobne klasy z kilkoma respondentami dają skrajne mnożniki. Mechanizmy braków opisuje hasło braki danych MCAR, MAR i MNAR; tu zakładamy MAR względem zmiennych ważących.

Krok 3. Raking, czyli iteracyjne dopasowanie rozkładów brzegowych

Po korekcie braku odpowiedzi struktura respondentów nadal odbiega od populacji: największa różnica w rozkładach brzegowych wynosi 13.52 punktu procentowego. Gdybyś znał liczebności populacji w każdej komórce płeć × wiek × wykształcenie × miejsce zamieszkania, mógłbyś zrobić poststratyfikację w tych 36 komórkach. Zwykle jednak znasz tylko rozkłady brzegowe, a pełne krzyżowanie rozprasza próbę na wiele małych komórek. Wtedy stosuje się raking (Battaglia i in., 2009): algorytm koryguje wagi po kolei dla każdej zmiennej, tak by ważony rozkład tej zmiennej zgadzał się z populacją, i powtarza cały cykl, aż wagi przestaną się zmieniać.

wi(nowa) = wi × Nk / Σj ∈ k wj dla każdej kategorii k kolejnej zmiennej

Raking jest szczególnym przypadkiem kalibracji: daje wagi możliwie bliskie wagom wejściowym, które dokładnie odtwarzają znane sumy populacyjne (Deville i Särndal, 1992). W przykładzie algorytm zbiegł się po 10 cyklach, a wszystkie cztery rozkłady brzegowe zgadzają się z populacją co do 0.01 punktu procentowego. Oszacowanie wynosi 22.41%, tylko 0.15 punktu poniżej prawdy. Tak dobry wynik zawdzięczamy temu, że w symulacji udział w badaniu zależy od nieobserwowanej otwartości tylko słabo. Gdyby zależał od niej silnie, raking nie usunąłby całego obciążenia.

Zmienne do rakingu wybieraj według dwóch kryteriów: wiążą się z udziałem w badaniu i z badaną cechą, a ich rozkład w populacji jest wiarygodnie znany. Kategorie w próbie i w danych o populacji muszą być zdefiniowane identycznie. Kolenikov (2014) opisuje praktyczne kwestie implementacji, w tym diagnostykę wag po rakingu.

Krok 4. Przycinanie wag

Raking poprawił strukturę, ale wagi się rozjechały: od 0.24 do 5.07 (po normalizacji do średniej 1). Pięć osób ma wagę powyżej 3.5, więc każda z nich „liczy się” za ponad trzy i pół przeciętnego respondenta. Jedna nietypowa odpowiedź takiej osoby może przesunąć wynik. Przycinanie zamienia trochę obciążenia na mniejszą wariancję. Chen i in. (2017) porównują je z innymi sposobami poprawiania oszacowań ważonych, np. modelowaniem wag.

W przykładzie wagi obcięliśmy do 3.5-krotności średniej i ponownie wykonaliśmy raking, bo przycięcie psuje dopasowanie rozkładów. Pętla „przytnij → raking” zakończyła się po 4 rundach: największa waga wynosi 3.50, a rozkłady brzegowe nadal zgadzają się z populacją.

Histogram wag po rakingu: przed przycięciem pięć wag powyżej progu 3.5, maksimum 5.07, CV 0.67, efekt schematu 1.45, efektywna liczebność 711; po przycięciu maksimum 3.50, CV 0.66, efekt schematu 1.44, efektywna liczebność 717
Rysunek 1. Rozkład wag po rakingu przed przycięciem i po nim (wagi znormalizowane do średniej 1). Czerwone kółka to wagi powyżej progu 3.5. Przycięcie usuwa ogon rozkładu, a efektywna liczebność rośnie z 711 do 717. Obliczenia: R (dane symulowane).

Zysk jest tu skromny, a oszacowanie się nie zmienia (22.40%). Tak bywa, gdy skrajnych wag jest kilka. Próg zapisz w planie analizy przed obejrzeniem wyników, a w raporcie podaj go razem z liczbą przyciętych wag. Typowe progi to wielokrotność średniej albo mediany wag; ich wybór to decyzja, którą warto pokazać w analizie wrażliwości.

Koszt ważenia: efektywna liczebność i błąd standardowy

Każdy krok zwiększa zróżnicowanie wag, a to obniża precyzję. Pojęcie efektu schematu wywodzi się z klasycznego podręcznika Kisha (1965). Dla samego zróżnicowania wag stosuje się przybliżenie:

deffw ≈ 1 + CVw2, nef = (Σw)2 / Σw2
Diagnostyka wag i oszacowanie odsetka po kolejnych krokach ważenia wobec prawdziwej wartości w populacji 22.55%
WagiZakres wagCVdeffnefOdsetek (%) [95% CI]Różnica z prawdą (pp)
Bez wag1.000.001.00103319.55 [17.14, 21.97]−3.00
Schemat0.65–1.460.401.1689020.57 [17.88, 23.27]−1.98
+ brak odpowiedzi0.52–2.380.511.2681923.05 [20.02, 26.07]0.50
+ raking0.24–5.070.671.4571122.41 [19.18, 25.63]−0.15
+ przycięcie0.24–3.500.661.4471722.40 [19.20, 25.60]−0.15

Po pełnym ważeniu 1033 odpowiedzi niosą tyle informacji co około 717 odpowiedzi z prostej próby losowej. Dlatego błędu standardowego z wagami nie licz wzorem dla prostej próby. Wzór √(p(1 − p)/n) daje 1.30 punktu procentowego, a linearyzacja uwzględniająca wagi i warstwy – 1.63. Przedział z naiwnego wzoru byłby wyraźnie za wąski, a margines błędu – zaniżony.

Odsetek korzystających z pomocy psychologicznej z 95% CI po kolejnych krokach ważenia: bez wag 19.6%, wagi schematu 20.6%, korekta braku odpowiedzi 23.0%, raking 22.4%, przycięcie 22.4%; prawdziwa wartość w populacji 22.6%; efektywna liczebność spada z 1033 do 717
Rysunek 2. Oszacowanie odsetka z 95% przedziałem ufności po kolejnych krokach ważenia. Czerwona linia to prawdziwa wartość w symulowanej populacji. Obciążenie maleje, ale przedział się poszerza, bo spada efektywna liczebność próby. Obliczenia: R (dane symulowane).

Nasz błąd standardowy z linearyzacji traktuje wagi jak stałe. To przybliżenie zwykle ostrożne, bo pomija zmniejszenie wariancji dzięki kalibracji. Standardem w R jest pakiet survey. Opisujesz w nim schemat doboru (warstwy, klastry, wagi), a wariancję szacuje on przez linearyzację albo replikację (Lumley, 2004). Funkcje rake() i trimWeights() wykonują kroki 3 i 4 na obiekcie schematu, więc błędy standardowe od razu uwzględniają kalibrację. Kod w tym pakiecie pokazujemy niżej jako przepis niewykonany. Analizę danych z gotowymi wagami, warstwami i klastrami omawia wpis analiza danych z dużych badań sondażowych.

Jak opisać ważenie w artykule

Czytelnik powinien móc odtworzyć wagi. Opisz źródło danych o populacji, zmienne i kategorie, metodę, kryterium zbieżności, próg przycięcia i diagnostykę wag. Pokaż też wynik bez wag. Duża różnica między nimi jest informacją o obciążeniu próby, a nie powodem, by ukryć jedną z wersji. Ograniczenia ważenia opisz w części o ograniczeniach badania.

Próbę wylosowano warstwowo (miasto, wieś) z nadreprezentacją mieszkańców wsi; w badaniu wzięło udział 1033 z 2500 wylosowanych osób (41.3%). Wagi zbudowano w czterech krokach: (1) wagi schematu jako odwrotność prawdopodobieństwa wylosowania, (2) korekta braku odpowiedzi w klasach warstwa × wiek, (3) raking do rozkładów płci, wieku, wykształcenia i miejsca zamieszkania w populacji (zbieżność po 10 cyklach), (4) przycięcie wag do 3.5-krotności średniej z ponownym rakingiem (5 wag przyciętych). Wagi końcowe wahały się od 0.24 do 3.50 (CV = 0.66), co odpowiada efektowi schematu 1.44 i efektywnej liczebności próby 717. Błędy standardowe oszacowano metodą linearyzacji z uwzględnieniem warstw. Po ważeniu odsetek osób korzystających z pomocy psychologicznej w ostatnich 12 miesiącach wyniósł 22.40% (95% CI [19.20, 25.60]) wobec 19.55% bez wag.

Jeśli recenzent pyta o wagi albo potrzebujesz zbudować je do własnego sondażu, możemy przygotować i sprawdzić cały proces w ramach wsparcia statystycznego dla badaczy.

Przykład reprodukowalny

Ważenie krok po kroku w R

Przepis 1 tworzy populację i próbę, liczy wagi we wszystkich czterech krokach, diagnostykę i oszacowania oraz zapisuje plik wazenie-sondazu-dane.csv. Wystarcza podstawowy R. Przepis 2 pokazuje te same kroki w pakiecie survey; nie został wykonany, więc nie podajemy jego wyników.

1. Wagi schematu, brak odpowiedzi, raking i przycinanie w podstawowym R

Dane wejściowe: populacja 400 000 osób, próba warstwowa 1000 + 1500, 1033 respondentów; zmienna 0/1 „korzystanie z pomocy psychologicznej” (dane symulowane, set.seed(2111)).

Co odczytać: wskaźnik odpowiedzi, mnożniki korekty braku odpowiedzi, strukturę próby wobec populacji, liczbę cykli rakingu, liczbę wag powyżej 3.5 i rund przycinania, diagnostykę wag (zakres, CV, deff, n_eff), największe odchylenie rozkładów brzegowych, odsetek z SE i 95% CI dla każdego kroku, prawdziwy odsetek i naiwny SE.

R
# Dane symulowane: populacja 400 000 dorosłych i sondaż losowy warstwowy (miasto/wieś) z brakiem odpowiedzi.
# Zmienna badana: korzystanie z pomocy psychologicznej w ostatnich 12 miesiącach (0/1).
set.seed(2111)
N <- 400000
pop <- data.frame(
  plec = sample(c("kobieta", "mezczyzna"), N, TRUE, prob = c(.52, .48)),
  wiek = sample(c("18-34", "35-54", "55+"), N, TRUE, prob = c(.27, .34, .39)),
  miejsce = sample(c("miasto", "wies"), N, TRUE, prob = c(.60, .40)))
p_wyz <- ifelse(pop$miejsce == "miasto", .30, .14) + ifelse(pop$wiek == "55+", -.08, .04)
p_sr <- .38
u <- runif(N)
pop$wyksz <- ifelse(u < p_wyz, "wyzsze", ifelse(u < p_wyz + p_sr, "srednie", "podst/zaw"))
otwartosc <- rnorm(N)                      # cecha nieobserwowana: wpływa i na wynik, i na udział w badaniu
lp <- -2.4 + 0.45 * (pop$plec == "kobieta") + 1.3 * (pop$wiek == "18-34") + 0.5 * (pop$wiek == "35-54") +
  0.3 * (pop$wyksz == "wyzsze") + 0.3 * (pop$miejsce == "miasto") + 0.5 * otwartosc
pop$pomoc <- rbinom(N, 1, plogis(lp))
prawda <- mean(pop$pomoc)

# Losowanie warstwowe: 1000 osób z miast i 1500 ze wsi (wieś nadreprezentowana)
pop$id <- seq_len(N)
n_h <- c(miasto = 1000, wies = 1500)
proba <- do.call(rbind, lapply(names(n_h), function(h) { d <- pop[pop$miejsce == h, ]; d[sample(nrow(d), n_h[[h]]), ] }))
proba$d <- as.numeric(table(pop$miejsce)[proba$miejsce] / n_h[proba$miejsce])   # waga schematu = 1 / prawdopodobieństwo wyboru
round(tapply(proba$d, proba$miejsce, mean), 1)
# Udział w badaniu zależy od wieku, wykształcenia i nieobserwowanej otwartości
p_odp <- plogis(-0.4 + 0.8 * (proba$wiek == "55+") - 0.9 * (proba$wiek == "18-34") +
                  1.0 * (proba$wyksz == "wyzsze") - 0.7 * (proba$wyksz == "podst/zaw") + 0.25 * otwartosc[proba$id])
proba$odp <- rbinom(nrow(proba), 1, p_odp)
data.frame(N_populacja = N, n_brutto = nrow(proba), n_netto = sum(proba$odp), RR = round(mean(proba$odp), 3))

# Krok 2: korekta braku odpowiedzi w klasach warstwa × wiek (wiek znany z operatu dla wszystkich wylosowanych)
proba$klasa <- interaction(proba$miejsce, proba$wiek)
wsp <- tapply(proba$d, proba$klasa, sum) / tapply(proba$d * proba$odp, proba$klasa, sum)
round(wsp, 3)
r <- proba[proba$odp == 1, ]
r$w_nr <- r$d * wsp[as.character(r$klasa)]

# Krok 3: raking (IPF) do rozkładów brzegowych populacji
cele <- lapply(c(plec = "plec", wiek = "wiek", wyksz = "wyksz", miejsce = "miejsce"), function(v) table(pop[[v]]))
# Struktura respondentów bez wag a populacja (%)
struktura <- do.call(rbind, lapply(names(cele), function(v) data.frame(zmienna = v, kategoria = names(cele[[v]]),
  proba_proc = round(100 * as.numeric(prop.table(table(r[[v]]))[names(cele[[v]])]), 1),
  populacja_proc = round(100 * as.numeric(cele[[v]]) / N, 1))))
print(struktura, row.names = FALSE)
raking <- function(w, dane, cele, tol = 1e-8, max_iter = 100) {
  for (it in seq_len(max_iter)) {
    w_przed <- w
    for (v in names(cele)) {
      suma <- tapply(w, dane[[v]], sum)
      w <- w * (cele[[v]][as.character(dane[[v]])] / suma[as.character(dane[[v]])])
    }
    if (max(abs(w / w_przed - 1)) < tol) break
  }
  list(w = as.numeric(w), iteracje = it)
}
rk <- raking(r$w_nr, r, cele)
r$w_rake <- rk$w
rk$iteracje

# Krok 4: przycinanie do 3.5 × średnia waga i ponowny raking, aż oba warunki są spełnione
przytnij_rake <- function(w, dane, cele, k = 3.5, max_rund = 50) {
  for (i in seq_len(max_rund)) {
    w <- pmin(w, k * mean(w))
    w <- raking(w, dane, cele)$w
    if (max(w) <= k * mean(w) * 1.001) break
  }
  list(w = w, rundy = i)
}
sum(r$w_rake / mean(r$w_rake) > 3.5)   # liczba osób z wagą powyżej progu przed przycięciem
pt <- przytnij_rake(r$w_rake, r, cele)
r$w_trim <- pt$w
pt$rundy

# Diagnostyka wag (wagi znormalizowane do średniej 1) i efekt schematu Kisha
diag_wag <- function(w) {
  w1 <- w / mean(w)
  c(min = min(w1), max = max(w1), CV = sd(w1) / mean(w1), deff_Kish = 1 + (sd(w1) / mean(w1))^2,
    n_eff = sum(w)^2 / sum(w^2))
}
wagi <- list(bez_wag = rep(1, nrow(r)), schemat = r$d, nonresponse = r$w_nr, raking = r$w_rake, raking_przyciete = r$w_trim)
round(t(sapply(wagi, diag_wag)), 2)

# Zgodność rozkładów brzegowych z populacją (punkty procentowe, największe odchylenie)
odchylenie <- function(w) max(sapply(names(cele), function(v)
  max(abs(100 * tapply(w, r[[v]], sum) / sum(w) - 100 * cele[[v]] / N))))
round(sapply(wagi, odchylenie), 2)

# Odsetek z wagami i błąd standardowy z linearyzacji (warstwy, wagi traktowane jako stałe)
szacuj <- function(w, y = r$pomoc, warstwa = r$miejsce) {
  est <- sum(w * y) / sum(w)
  z <- w * (y - est) / sum(w)
  v <- sum(sapply(split(z, warstwa), function(zh) length(zh) / (length(zh) - 1) * sum((zh - mean(zh))^2)))
  se <- sqrt(v)
  c(proc = 100 * est, SE = 100 * se, dolny = 100 * (est - 1.96 * se), gorny = 100 * (est + 1.96 * se))
}
wyniki <- t(sapply(wagi, szacuj))
round(cbind(wyniki, blad_wzgl_prawdy = wyniki[, "proc"] - 100 * prawda), 2)
round(100 * prawda, 2)
# Naiwny SE z wagami (wzór dla prostej próby losowej bez uwzględnienia wag) – dla porównania
round(100 * sqrt(wyniki["raking_przyciete", "proc"] / 100 * (1 - wyniki["raking_przyciete", "proc"] / 100) / nrow(r)), 2)

write.csv(r[, c("id", "plec", "wiek", "wyksz", "miejsce", "pomoc", "d", "w_nr", "w_rake", "w_trim")],
          "wazenie-sondazu-dane.csv", row.names = FALSE)
Wynik w R
miasto   wies 
 239.7  106.8 
  N_populacja n_brutto n_netto    RR
1       4e+05     2500    1033 0.413
miasto.18-34   wies.18-34 miasto.35-54   wies.35-54   miasto.55+     wies.55+ 
       3.851        5.065        2.497        2.637        1.638        1.871 
 zmienna kategoria proba_proc populacja_proc
    plec   kobieta       52.9           51.9
    plec mezczyzna       47.1           48.1
    wiek     18-34       13.9           26.8
    wiek     35-54       33.3           34.0
    wiek       55+       52.8           39.1
   wyksz podst/zaw       31.1           39.1
   wyksz   srednie       40.5           38.1
   wyksz    wyzsze       28.5           22.8
 miejsce    miasto       43.1           59.9
 miejsce      wies       56.9           40.1
[1] 10
[1] 5
[1] 4
                  min  max   CV deff_Kish   n_eff
bez_wag          1.00 1.00 0.00      1.00 1033.00
schemat          0.65 1.46 0.40      1.16  889.87
nonresponse      0.52 2.38 0.51      1.26  818.56
raking           0.24 5.07 0.67      1.45  711.24
raking_przyciete 0.24 3.50 0.66      1.44  716.98
         bez_wag          schemat      nonresponse           raking 
           16.86            13.64            13.52             0.00 
raking_przyciete 
            0.00 
                  proc   SE dolny gorny blad_wzgl_prawdy
bez_wag          19.55 1.23 17.14 21.97            -3.00
schemat          20.57 1.37 17.88 23.27            -1.98
nonresponse      23.05 1.54 20.02 26.07             0.50
raking           22.41 1.64 19.18 25.63            -0.15
raking_przyciete 22.40 1.63 19.20 25.60            -0.15
[1] 22.55
[1] 1.3

2. To samo w pakiecie survey (wymaga pakietu survey, niewykonany)

Dane wejściowe: obiekty r, cele i N z przepisu 1; pakiet survey.

Co odczytać: po uruchomieniu – odsetek z błędem standardowym uwzględniającym kalibrację. Kodu nie wykonaliśmy, dlatego nie podajemy wyników.

R
# Wymaga pakietu survey – przepis NIEWYKONANY (pakiet nie jest zainstalowany w środowisku, w którym liczono przykład).
# Korzysta z obiektów r, cele i N z przepisu 1.
library(survey)
proj <- svydesign(ids = ~1, strata = ~miejsce, weights = ~w_nr, data = r)   # wagi po korekcie braku odpowiedzi
marg <- lapply(names(cele), function(v) setNames(data.frame(names(cele[[v]]), as.numeric(cele[[v]])), c(v, "Freq")))
kal <- rake(proj, sample.margins = lapply(names(cele), function(v) as.formula(paste0("~", v))),
            population.margins = marg)
kal <- trimWeights(kal, upper = 3.5 * mean(weights(kal)))   # próg jak w przepisie 1
svymean(~pomoc, kal)                                         # odsetek i SE z uwzględnieniem kalibracji

Bibliografia oprogramowania

Wyniki na tej stronie pochodzą z uruchomienia przepisu 1 w R 4.5.3 (wyłącznie funkcje podstawowe R); rysunki przygotowano w pakiecie ggplot2. Przepis 2 wymaga pakietu survey i nie był uruchamiany.

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. ggplot2 (wersja 4.0.2): Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer. https://ggplot2.tidyverse.org

Najczęstsze błędy

  • Ważenie bez sprawdzenia, czy jest potrzebne. Porównaj strukturę respondentów z populacją i pokaż oba wyniki: z wagami i bez.
  • Zmienne ważące, które nie wiążą się z badaną cechą. Zwiększają wariancję i nie zmniejszają obciążenia.
  • Brak kontroli zbieżności rakingu. Po zakończeniu sprawdź, czy ważone rozkłady brzegowe rzeczywiście zgadzają się z populacją.
  • Przycinanie bez ponownego rakingu albo z progiem dobranym po obejrzeniu wyników.
  • Błąd standardowy z wzoru dla prostej próby. Wagi trzeba uwzględnić w wariancji, a nie tylko w średniej (zob. błąd standardowy i przedział ufności dla proporcji).
  • „Reprezentatywna po zważeniu”. Próba nielosowa po ważeniu nadal jest nielosowa (zob. reprezentatywność próby i panel internetowy). Wagi sondażowe nie są też wagami odwrotnego prawdopodobieństwa leczenia z analizy przyczynowej, które omawia wpis propensity score: dopasowanie i ważenie.

Najczęstsze pytania

Czym różni się raking od poststratyfikacji?

Poststratyfikacja dopasowuje wagi w komórkach pełnego krzyżowania zmiennych (np. płeć × wiek × wykształcenie) i wymaga liczebności populacji w każdej komórce. Raking dopasowuje po kolei tylko rozkłady brzegowe każdej zmiennej i powtarza cykle aż do zbieżności (Battaglia i in., 2009). Wybierz raking, gdy znasz tylko rozkłady brzegowe albo gdy komórki byłyby bardzo małe.

Jak przyciąć wagi sondażowe?

Ustal próg przed analizą, np. wielokrotność średniej wagi, obetnij wagi powyżej progu i ponownie wykonaj raking, bo przycięcie psuje zgodność z populacją. Powtarzaj, aż oba warunki będą spełnione. W przykładzie próg 3.5 objął 5 osób, a pętla zakończyła się po 4 rundach. W raporcie podaj próg i liczbę przyciętych wag.

Ile informacji tracę przez ważenie danych sondażowych?

Tyle, ile wynika z efektywnej liczebności próby (Σw)²/Σw². Im bardziej zróżnicowane wagi, tym mniejsza. W przykładzie 1033 odpowiedzi po pełnym ważeniu odpowiadały około 717 odpowiedziom z prostej próby losowej, a efekt schematu wynikający z wag wyniósł 1.44.

Czy błąd standardowy odsetka z wagami można policzyć zwykłym wzorem?

Nie. Wzór √(p(1 − p)/n) zakłada prostą próbę losową bez wag i zaniża błąd. W przykładzie dał 1.30 punktu procentowego zamiast 1.63 z linearyzacji. Użyj linearyzacji albo metod replikacyjnych, np. w pakiecie survey (Lumley, 2004).

Czy raking usuwa błąd braku odpowiedzi?

Tylko w zakresie zmiennych, według których ważysz. Jeśli osoby, które odpowiedziały, różnią się od odmawiających także w cechach spoza wag, obciążenie zostaje. Dlatego dobieraj zmienne ważące, które wiążą się i z udziałem w badaniu, i z badaną cechą, a ograniczenie opisz w artykule.

Powiązane hasła

Przeczytaj też

Budujesz wagi do sondażu albo recenzent pyta o ważenie?

Pomożemy zaplanować i policzyć wagi, sprawdzić ich diagnostykę i błędy standardowe oraz wyjaśnić wyniki tak, żebyś mógł(a) samodzielnie opisać i obronić procedurę.

Oferta dla badaczyPorozmawiaj o projekcie

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Battaglia, M. P., Hoaglin, D. C., & Frankel, M. R. (2009). Practical considerations in raking survey data. Survey Practice, 2(5), 1–10. https://doi.org/10.29115/sp-2009-0019 ● Otwarty dostęp
  2. Bethlehem, J. (2010). Selection bias in web surveys. International Statistical Review, 78(2), 161–188. https://doi.org/10.1111/j.1751-5823.2010.00112.x ● Otwarty dostęp
  3. Chen, Q., Elliott, M. R., Haziza, D., Yang, Y., Ghosh, M., Little, R. J. A., Sedransk, J., & Thompson, M. (2017). Approaches to improving survey-weighted estimates. Statistical Science, 32(2), 227–248. https://doi.org/10.1214/17-sts609
  4. Deville, J.-C., & Särndal, C.-E. (1992). Calibration estimators in survey sampling. Journal of the American Statistical Association, 87(418), 376–382. https://doi.org/10.1080/01621459.1992.10475217
  5. Elliott, M. R., & Valliant, R. (2017). Inference for nonprobability samples. Statistical Science, 32(2), 249–264. https://doi.org/10.1214/16-sts598 ● Otwarty dostęp
  6. Haziza, D., & Beaumont, J.-F. (2017). Construction of weights in surveys: A review. Statistical Science, 32(2), 206–226. https://doi.org/10.1214/16-sts608
  7. Kish, L. (1965). Survey sampling. Wiley.
  8. Kolenikov, S. (2014). Calibrating survey data using iterative proportional fitting (raking). The Stata Journal, 14(1), 22–59. https://doi.org/10.1177/1536867x1401400104 ● Otwarty dostęp
  9. Lumley, T. (2004). Analysis of complex survey samples. Journal of Statistical Software, 9(8). https://doi.org/10.18637/jss.v009.i08 ● Otwarty dostęp

Cytowania BibTeX

@article{battaglia2009practical, author={Battaglia, Michael P. and Hoaglin, David C. and Frankel, Martin R.}, title={{Practical considerations in raking survey data}}, journal={Survey Practice}, year={2009}, volume={2}, number={5}, pages={1--10}, doi={10.29115/sp-2009-0019}}
@article{bethlehem2010selection, author={Bethlehem, Jelke}, title={{Selection bias in web surveys}}, journal={International Statistical Review}, year={2010}, volume={78}, number={2}, pages={161--188}, doi={10.1111/j.1751-5823.2010.00112.x}}
@article{chen2017approaches, author={Chen, Qixuan and Elliott, Michael R. and Haziza, David and Yang, Ye and Ghosh, Malay and Little, Roderick J. A. and Sedransk, Joseph and Thompson, Mary}, title={{Approaches to improving survey-weighted estimates}}, journal={Statistical Science}, year={2017}, volume={32}, number={2}, pages={227--248}, doi={10.1214/17-sts609}}
@article{deville1992calibration, author={Deville, Jean-Claude and Särndal, Carl-Erik}, title={{Calibration estimators in survey sampling}}, journal={Journal of the American Statistical Association}, year={1992}, volume={87}, number={418}, pages={376--382}, doi={10.1080/01621459.1992.10475217}}
@article{elliott2017inference, author={Elliott, Michael R. and Valliant, Richard}, title={{Inference for nonprobability samples}}, journal={Statistical Science}, year={2017}, volume={32}, number={2}, pages={249--264}, doi={10.1214/16-sts598}}
@article{haziza2017construction, author={Haziza, David and Beaumont, Jean-François}, title={{Construction of weights in surveys: A review}}, journal={Statistical Science}, year={2017}, volume={32}, number={2}, pages={206--226}, doi={10.1214/16-sts608}}
@book{kish1965survey, author={Kish, Leslie}, title={{Survey sampling}}, year={1965}, publisher={Wiley}}
@article{kolenikov2014calibrating, author={Kolenikov, Stanislav}, title={{Calibrating survey data using iterative proportional fitting (raking)}}, journal={The Stata Journal}, year={2014}, volume={14}, number={1}, pages={22--59}, doi={10.1177/1536867x1401400104}}
@article{lumley2004analysis, author={Lumley, Thomas}, title={{Analysis of complex survey samples}}, journal={Journal of Statistical Software}, year={2004}, volume={9}, number={8}, doi={10.18637/jss.v009.i08}}
R