Ważenie danych w R

Z pojawieniem się pakietu survey (autorstwa Thomasa Lumley'a) powstała możliwość łatwego przeprowadzania analiz z ważeniem danych. W rzeczywistości pakiet ten pozwala na analizowanie danych z prób losowanych w sposób warstwowy, wielostopniowy, zespołowy oraz przeróżne mieszanki powyższych. Poniższa informacja nie ma na celu opisanie wszystkich możliwości pakietu survey. Opisuje jedynie sposób przeprowadzania podstawowych analiz, gdy konieczne/pożądane jest ważenie obserwacji.

Ważenie obserwacji może być koniecznością związaną z zastosowaną w badaniu metodą doboru próby (patrz poniższy przykład z danymi z PGSS-u). Konieczne jest również, gdy mamy do czynienia z danymi w postaci zagregowanej.

Waga jest zmienną, która każdej obserwacji przypisuje pewną dodatnią liczbę. Suma wartości zmiennej dla wszystkich obserwacji powinna być równa liczebności analizowanej zbiorowości.

Pakiet survey zawiera funkcję 'svydesign', służącą do stworzenia obiektu, który będzie zawierał wszystkie niezbędne informacje o schemacie doboru próby. Tworząc ów obiekt określamy przynależność do warstw, zespołów oraz, gdy jest to konieczne, indywidualne prawdopodobieństwa.

Badania Polskiego Generalnego Sondażu Społecznego przeprowadzane są na ogólnopolskiej próbie adresowej gospodarstw domowych. Schemat doboru próby gwarantuje każdemu gospodarstwu domowemu takie samo niezerowe prawdopodobieństwo znalezienia się w próbie. Wywiad przeprowadzany jest tylko z jednym, pełnoletnim mieszkańcem danego gospodarstwa. Różna liczba osób dorosłych w gospodarstwach sprawia, że osoby z liczniejszych gospodarstw domowych mają mniejszą szansę znalezienia się w próbie niż np. osoby mieszkające w pojedynke. Przeprowadzając analizy konieczne jest dokonanie odpowiedniej korekcji za pomocą wagi.

Jako ilustrację rozważmy prosty przykład regresji liniowej dochodów respondenta na jego wykształcenie. Informacja o dochodzie respondenta z pracy zawarta jest w zmiennej 'q32', z kolei jego wykształcenie w latach nauki opisane jest za pomocą zmiennej q131ed. Waga zawarta jest w zmiennej weight.

Załóżmy, że plik pgss.sav zawiera powyższe zmienne z wartościami dla wszystkich respondentów (bez braków danych). Korzystając z pakietu foreign importujemy dane do R:

library(foreign)
d <- read.spss("pgss.sav", to.data.frame=T, max.value.labels=0)
names(d) <- tolower(names(d))

Ostatnie polecenie sprawia, iż wszystkie nazwy zmiennych w obiekcie 'd' ('data.frame') będą pisane małymi literami.

Teraz za pomocą funkcji 'svydesign' tworzymy obiekt zawierający informację o wadze:

library(survey)
PgssDesign <- svydesign(~0, data=d, weights=d$weight)

Pakiet 'survey' zawiera kilka funkcji umożliwiających dokonywanie analiz. Użyjemy funkcji 'svyglm', pokrewnej do podstawowej funkcji 'glm', umożliwiającej budowę uogólnionych modeli liniowych (Generalised Linear Models) (np. McCullagh P. i Nelder, J. A., 1989). Składnia funkcji 'svglm' jest bardzo podobna do składni 'glm', model konstruujemy więc w następujący sposób:

model <- svyglm(q32 ~ q131ed, design=PgssDesign, data=d)
summary(model)

Pakiet 'survey zawiera' również odpowiednią metodę dla 'summary'.