251. Jak kodować brakujące wartości w praktyce?
W poprzedniej lekcji omówiono mechanizmy braków danych: MCAR, MAR i MNAR. Zanim jednak zaczniemy oceniać mechanizm braków lub wybierać metodę analizy, musimy poprawnie zapisać brak w bazie. To etap pozornie techniczny, lecz w praktyce wpływa na każdy kolejny krok: obliczanie statystyk opisowych, działanie filtrów, wykrywanie wartości niemożliwych, regresję, imputację i raportowanie wyników.
Najważniejsza zasada brzmi: brak danych nie jest zwykłą wartością pomiaru. Pustą odpowiedź, odmowę, brak pomiaru, pytanie nieadekwatne do danej osoby oraz błąd techniczny należy rozróżniać, jeśli może to mieć znaczenie dla kontroli jakości albo późniejszej analizy. W tej lekcji pokazano, jak kodować braki danych w sposób jednoznaczny, odwracalny i bezpieczny dla oprogramowania statystycznego. Przykłady są zgodne z praktyką badań medycznych, zdrowia publicznego i nauk społecznych, a ich rozwinięciem może być szkolenie dostępne na statystyka.edu.pl.
1. Czym jest ang. missing value?
Missing value, czyli brak danych, oznacza, że dla określonej jednostki badania i określonej zmiennej nie dysponujemy obserwacją, która mogłaby zostać wykorzystana jako rzeczywisty pomiar. Brak może dotyczyć wyniku laboratoryjnego, odpowiedzi na pytanie kwestionariuszowe, informacji socjodemograficznej, ekspozycji, wyniku leczenia albo daty zdarzenia.
W zapisie tabelarycznym można myśleć o bazie jako o macierzy obserwacji. Jeśli yij oznacza wartość zmiennej j u osoby i, to brak danych można oznaczyć wskaźnikiem:
Rij = 1, gdy wartość yij jest zaobserwowana, oraz Rij = 0, gdy jej brakuje.
Symbol Rij nie jest samą brakującą wartością. Jest informacją o tym, czy wartość istnieje w bazie. W badaniach bardziej szczegółowych można dodatkowo przechowywać przyczynę braku, na przykład „odmowa”, „nie dotyczy”, „nie wykonano badania” lub „błąd aparatury”. Taki kod przyczyny nie zastępuje jednak właściwego oznaczenia braku w zmiennej analitycznej.
2. Najpierw rozróżnij znaczenie, potem wybierz kod
Najczęstszy błąd polega na wpisywaniu jednego kodu dla wszystkich nieobecnych wartości. Wstępnie wygodne rozwiązanie może później uniemożliwić ustalenie, czy respondent nie odpowiedział, odmówił odpowiedzi, nie spełniał kryterium pytania, czy po prostu nie wykonano pomiaru.
2.1. Brak zwykły
To sytuacja, w której wartość powinna być zebrana, ale nie została zarejestrowana. Przykładem jest brak ciśnienia tętniczego podczas wizyty, mimo że pomiar był przewidziany w protokole. W analizowanej zmiennej należy zapisać brak systemowy albo jednoznaczny kod braku, a przyczynę – jeśli jest znana – w osobnej zmiennej.
2.2. Odmowa odpowiedzi
Odmowa nie jest równoważna przypadkowemu pominięciu pytania. W badaniu dotyczącym zdrowia psychicznego osoba może odmówić odpowiedzi na pytanie o używanie substancji psychoaktywnych. Wartość analityczna pozostaje brakująca, ale przyczyna może być zakodowana osobno, na przykład jako 99 = odmowa w zmiennej pomocniczej powod_braku.
2.3. „Nie dotyczy”
Odpowiedź „nie dotyczy” pojawia się wtedy, gdy pytanie nie ma zastosowania do danej osoby. Jeśli ankieta pyta o liczbę hospitalizacji w czasie ciąży, odpowiedź nie dotyczy osób, które nie były w ciąży lub których badanie nie obejmowało tego obszaru. Nie należy automatycznie kodować „nie dotyczy” jako zera. Zero oznacza bowiem, że dana cecha ma wartość równą zero, a nie że pytanie było nieadekwatne.
2.4. Pomiar niewykonany i błąd techniczny
W badaniu klinicznym wynik stężenia glukozy może być nieobecny, ponieważ pacjent nie zgłosił się na pobranie krwi, próbka została odrzucona albo analizator uległ awarii. Wszystkie te sytuacje tworzą brak w zmiennej glukoza, lecz mogą wymagać odrębnego opisu w raporcie i odmiennych działań naprawczych.
3. Jakie techniki kodowania są bezpieczne?
3.1. Brak systemowy
Najbezpieczniejszym rozwiązaniem jest użycie natywnego, systemowego oznaczenia braku dostępnego w danym programie, na przykład wartości NA w R, wartości system-missing w SPSS albo brakującej wartości w Stata. Taki zapis jest zwykle rozpoznawany przez procedury statystyczne i nie jest traktowany jako liczba.
Brak systemowy ma jednak ograniczenie: sam w sobie nie mówi, dlaczego obserwacji nie ma. Dlatego w badaniach, w których przyczyna braku ma znaczenie, warto utworzyć osobną zmienną opisującą przyczynę lub status obserwacji.
3.2. Kody specjalne
W niektórych systemach dane są gromadzone w arkuszach lub formularzach, które wymagają wpisania wartości liczbowej. Wtedy można stosować kody specjalne, na przykład:
-9– brak odpowiedzi;-8– odmowa;-7– nie dotyczy;-6– pomiar niewykonany;-5– błąd techniczny.
Takie kody są dopuszczalne tylko wtedy, gdy zostaną później zdefiniowane jako brakujące. Jeżeli program potraktuje -9 jako rzeczywistą wartość, średnia, mediana, odchylenie standardowe i model statystyczny mogą zostać poważnie zniekształcone.
3.3. Puste komórki, tekst „brak” i symbole
Puste komórki mogą być użyteczne w arkuszu roboczym, ale są niejednoznaczne. Nie wiadomo, czy pustka oznacza brak odpowiedzi, nie dotyczy, błąd importu czy przypadkowe usunięcie wartości. Teksty takie jak „brak”, „bd”, „n/d”, „—” i „?” również utrudniają automatyczne przetwarzanie, zwłaszcza gdy występują w kilku wariantach.
Jeżeli dane muszą być wymieniane między programami, lepiej przyjąć jeden ustalony standard, na przykład NA, oraz przechowywać przyczynę braku w osobnej kolumnie. Najważniejsza jest konsekwencja w całym zbiorze.
4. Brak danych a zero, wartość graniczna i „nie zmierzono”
Brak danych trzeba odróżnić od wartości, która rzeczywiście wynosi zero. W badaniu bólu wynik 0 w skali od 0 do 10 oznacza brak bólu. Puste pole oznacza, że nie uzyskano odpowiedzi. Podobnie w badaniu aktywności fizycznej „0 minut ćwiczeń” nie jest tym samym co brak informacji o aktywności.
Nie wolno też utożsamiać braku z wartością graniczną. Wzrost 0 cm jest wartością biologicznie niemożliwą u osoby dorosłej, ale nie powinien być używany jako kod braku. Wiek 999 nie oznacza „brak danych”, dopóki nie zostanie formalnie zdefiniowany jako kod specjalny – a nawet wtedy jest rozwiązaniem ryzykownym, bo może przejść przez część kontroli jako liczba.
Dobrym testem jest pytanie: czy ta liczba opisuje badaną cechę, czy jedynie stan rejestracji danych? Jeśli opisuje stan rejestracji, nie powinna być traktowana jako zwykła wartość pomiaru.
5. Oddziel zmienną analityczną od zmiennej statusu
Praktyczny i bezpieczny układ obejmuje co najmniej dwie zmienne:
| id | glukoza | status_glukozy |
|---|---|---|
| 001 | 92 | zmierzono |
| 002 | NA | nie zgłosił się |
| 003 | NA | błąd próbki |
| 004 | 105 | zmierzono |
Zmiennej glukoza używamy w analizie liczbowej, a status_glukozy w kontroli jakości, tabeli przepływu uczestników i analizie przyczyn braków. Dzięki temu można określić, ile braków wynikało z odmowy, ile z problemów organizacyjnych, a ile z awarii aparatury.
Warto również rozważyć zmienną wskaźnikową, na przykład glukoza_obserwowana, gdzie 1 oznacza dostępny pomiar, a 0 jego brak. Taki wskaźnik nie powinien zastępować samej zmiennej pomiarowej, ale może ułatwiać porównanie osób z kompletnymi i niekompletnymi danymi.
6. Przykład 1: badanie pacjentów z nadciśnieniem
Załóżmy, że w poradni zebrano dane 250 pacjentów. Zmienne obejmują wiek, płeć, ciśnienie skurczowe, masę ciała i informację o przyjmowaniu leków. U 18 osób nie uzyskano pomiaru ciśnienia.
Na etapie wprowadzania danych nie należy wpisywać w kolumnie cisnienie_skurczowe wartości 0, 999 ani średniej z pozostałych pacjentów. Można zastosować wartość systemowo brakującą oraz osobną zmienną:
cisnienie_skurczowe = NA;status_cisnienia = odmowaalbopomiar_niewykonany;data_pomiaru = NA, jeśli pomiaru nie wykonano.
Po imporcie należy sprawdzić zakres biologicznie prawdopodobnych wartości, na przykład 70–260 mmHg, ale nie wolno uznawać każdej wartości spoza tego zakresu za brak bez weryfikacji dokumentacji. Wartość 280 może być błędem wpisu, ale może też oznaczać rzeczywisty, skrajny pomiar wymagający potwierdzenia.
W raporcie można podać, że pomiaru nie uzyskano u 18 z 250 osób, czyli u 7,2% badanych, oraz rozdzielić przyczyny. Sam procent nie informuje jeszcze, czy brak może prowadzić do obciążenia wyników; potrzebne są dalsze analizy zgodne z założeniami dotyczącymi mechanizmu braków (Rubin, 1976; Sterne et al., 2009).
7. Przykład 2: kwestionariusz depresji w badaniu studentów
W badaniu przesiewowym zastosowano 9-itemową skalę objawów depresyjnych. Odpowiedzi są kodowane od 0 do 3, a wynik całkowity jest sumą pozycji. Student może nie udzielić odpowiedzi na jedną pozycję albo zaznaczyć „wolę nie odpowiadać”.
Najpierw trzeba ustalić regułę obliczania wyniku, zanim rozpocznie się analizę. Jeżeli protokół pozwala obliczyć wynik przy najwyżej jednej brakującej pozycji, można wykorzystać wcześniej określoną procedurę, na przykład sumowanie ośmiu odpowiedzi i przeskalowanie wyniku. Nie należy jednak automatycznie zastępować każdej brakującej odpowiedzi średnią osoby lub średnią grupy.
Przykładowo, dla osoby z odpowiedziami 1, 0, 2, NA, 1, 0, 2, 1, 0 można – jeśli przewiduje to instrukcja narzędzia – oszacować wynik na podstawie pozostałych pozycji. Jeżeli brakuje czterech pozycji, bardziej uzasadnione może być pozostawienie całego wyniku jako brakującego. Reguła musi być zapisana w protokole, ponieważ sposób obchodzenia się z brakami wpływa na porównywalność wyników i może zmienić liczbę osób kwalifikowanych do dalszej oceny.
Przyczynę braku, na przykład odmowę odpowiedzi, można zakodować w metadanych lub osobnej zmiennej. Nie należy zmieniać odpowiedzi „wolę nie odpowiadać” na kategorię „0 objawów”. To prowadziłoby do błędnej interpretacji klinicznej.
8. Kodowanie braków a analiza statystyczna
Sam sposób zapisu braku nie rozwiązuje problemu brakujących danych. Jest jednak warunkiem poprawnej analizy. Po zakodowaniu należy opisać:
- liczbę i odsetek braków dla każdej ważnej zmiennej;
- liczbę osób z co najmniej jednym brakiem;
- wzorce braków, czyli współwystępowanie braków między zmiennymi;
- znane przyczyny braków;
- różnice między osobami z danymi kompletnymi i niekompletnymi;
- metodę postępowania w analizie głównej i analizach wrażliwości.
Wykluczanie przypadków kompletnych może być akceptowalne w określonych warunkach, ale nie powinno być decyzją wynikającą wyłącznie z wygody. Imputacja jednokrotna, na przykład zastępowanie braku średnią, zwykle nie odzwierciedla niepewności związanej z nieobserwowaną wartością. W wielu badaniach rozważa się imputację wielokrotną, w której tworzy się kilka zbiorów danych z uzupełnionymi wartościami, analizuje każdy z nich, a następnie łączy wyniki zgodnie z regułami Rubina. Praktyczne wskazówki dotyczące modeli imputacyjnych, zmiennych pomocniczych i zmiennych kategorycznych przedstawili White, Royston i Wood (2011) oraz Sterne i współpracownicy (2009).
Ważne jest, aby model imputacji uwzględniał zmienne używane w analizie głównej oraz – jeśli to możliwe – zmienne przewidujące wystąpienie braku lub samą wartość. Nie oznacza to jednak, że poprawne kodowanie gwarantuje spełnienie założenia MAR. Kod przyczyny braku może zwiększyć wiarygodność oceny, ale nie pozwala bezpośrednio obserwować wartości, których nie zebrano.
9. Słownik kodów i metadane
Każdy projekt powinien mieć słownik danych. Dla każdej zmiennej warto określić nazwę, etykietę, typ, jednostkę, dopuszczalny zakres, kody odpowiedzi oraz reguły braków.
| Element | Przykład dla zmiennej „palenie” |
|---|---|
| Nazwa | palenie_status |
| Typ | kategoryczna |
| Kategorie | 0 = nigdy, 1 = obecnie, 2 = w przeszłości |
| Brak | NA |
| Przyczyna braku | odmowa, brak odpowiedzi, nie dotyczy |
| Źródło | kwestionariusz uczestnika |
Słownik powinien mieć wersję i datę aktualizacji. Jeżeli w połowie badania zmieniła się instrukcja kodowania, trzeba zachować informację o tej zmianie. W przeciwnym razie połączenie kilku plików może doprowadzić do sytuacji, w której ten sam kod oznacza różne rzeczy w różnych częściach bazy.
10. Kontrola po zakodowaniu
Po imporcie danych należy wykonać kontrolę techniczną i merytoryczną. Minimalny zestaw obejmuje:
- sprawdzenie, czy każdy kod specjalny został rozpoznany jako brak;
- wyszukanie tekstów „brak”, „bd”, „nie wiem”, „n/d” i podobnych wariantów;
- policzenie braków w każdej zmiennej;
- porównanie liczby rekordów przed i po imporcie;
- sprawdzenie, czy brak nie został zamieniony na zero;
- kontrolę zgodności między zmienną pomiarową a przyczyną braku;
- zapisanie daty i wyniku kontroli w dzienniku zmian.
Warto wykonać również test odwracalności: wyeksportować kilka rekordów z systemu analitycznego i sprawdzić, czy można jednoznacznie odtworzyć ich status w bazie źródłowej. Jeżeli po imporcie nie wiadomo, czy -9 oznaczał odmowę, czy błąd techniczny, dokumentacja jest niewystarczająca.
Najczęstsze błędy
- Wpisywanie zera jako braku. Zero jest wartością merytoryczną, jeżeli badana cecha może przyjmować taką wartość.
- Używanie kodu 99 bez deklaracji. Wiek 99 lat może być rzeczywisty, a kod 99 może zostać potraktowany jako liczba.
- Mieszanie kilku kodów bez słownika. Same symbole nie wystarczą, jeśli nikt nie zna ich znaczenia.
- Traktowanie „nie dotyczy” jak zwykłego braku. Taka informacja może wskazywać na strukturę formularza, a nie na nieuczestniczenie respondenta.
- Automatyczne zastępowanie braków średnią. Zmniejsza zmienność danych i zwykle zaniża niepewność oszacowań.
- Usuwanie rekordów bez zapisu decyzji. Należy odnotować, ile rekordów usunięto, dlaczego i przed którą analizą.
- Zakładanie, że brak jest losowy, bo jego odsetek jest mały. Mały odsetek nie gwarantuje braku obciążenia.
- Zapominanie o brakach w zmiennych pomocniczych. Brak wieku, ekspozycji, wyniku lub zmiennej zakłócającej może wpływać na model tak samo jak brak głównego wyniku.
- Używanie języka przyczynowego bez uzasadnienia. Sam fakt różnego odsetka braków między grupami nie dowodzi, że interwencja spowodowała brak.
Przykład praktyczny: przygotowanie bazy z oddziału ratunkowego
W badaniu analizowano czas od przyjęcia pacjenta do podania leku przeciwbólowego. W bazie znajdują się: identyfikator, wiek, płeć, natężenie bólu przy przyjęciu, czas przyjęcia, czas podania leku i powód braku pomiaru.
U jednego pacjenta ból nie został oceniony, ponieważ był nieprzytomny. U drugiego pacjenta skala bólu nie została wpisana przez personel. U trzeciego pacjenta lek nie został podany, ponieważ po ponownej ocenie nie było wskazania klinicznego. Te sytuacje należy zakodować odmiennie:
bol_przyjecie = NA,status_bolu = pacjent_nieprzytomny;bol_przyjecie = NA,status_bolu = brak_wpisu;czas_podania = NA,status_leku = nie_wskazano.
Nie wolno wpisywać 0 jako natężenia bólu u osoby nieprzytomnej ani jako czasu podania leku, którego nie podano. W pierwszym przypadku nie znamy oceny bólu, a w drugim brak czasu jest konsekwencją konkretnej decyzji klinicznej. W analizie czasu do podania leku można zdefiniować populację i wynik zgodnie z protokołem, ale nie należy udawać, że każdy brak oznacza obserwację równą zero.
Raport powinien wskazać liczbę pacjentów z brakującą oceną bólu, przyczyny braków i sposób ich uwzględnienia. Takie raportowanie jest zgodne z zaleceniami dotyczącymi przejrzystości badań obserwacyjnych i raportowania badań medycznych (von Elm et al., 2007; Sterne et al., 2009).
Co warto zapamiętać?
- Brak danych jest informacją o nieobserwowaniu wartości, a nie wartością równą zero.
- Najbezpieczniej używać braku systemowego lub jednego, formalnie zdefiniowanego kodu specjalnego.
- Przyczynę braku warto przechowywać w osobnej zmiennej, zwłaszcza w badaniach klinicznych i ankietowych.
- „Nie dotyczy”, „odmowa”, „pomiar niewykonany” i „błąd techniczny” mogą mieć różne znaczenie metodologiczne.
- Każdy kod musi znaleźć się w słowniku danych i być rozpoznawany przez używane oprogramowanie.
- Kodowanie missing values nie zastępuje analizy mechanizmu braków ani analizy wrażliwości.
- Wyniki dotyczące braków należy raportować razem z liczbami, odsetkami, przyczynami i metodą postępowania analitycznego.
Poprawne kodowanie missing values jest więc częścią jakości pomiaru i dokumentacji badania. Dobrze przygotowana baza pozwala później odróżnić problem danych od problemu modelu statystycznego, a także ogranicza ryzyko niejawnych i nieodwracalnych decyzji analitycznych.
Źródła i dalsza lektura
- Roderick J. A. Little; Donald B. Rubin (2019). Statistical Analysis with Missing Data. 3rd edition. Wiley. Informacja wydawcy / źródło.
- Donald B. Rubin (1976). Inference and Missing Data. Biometrika, 63(3), 581–592. DOI: 10.1093/biomet/63.3.581.
- Jonathan A. C. Sterne; Ian R. White; John B. Carlin; Michael Spratt; Patrick Royston; Michael G. Kenward; Angela M. Wood; James R. Carpenter (2009). Multiple imputation for missing data in epidemiological and clinical research: potential and pitfalls. BMJ, 338, b2393. DOI: 10.1136/bmj.b2393.
- Ian R. White; Patrick Royston; Angela M. Wood (2011). Multiple imputation using chained equations: Issues and guidance for practice. Statistics in Medicine, 30(4), 377–399. DOI: 10.1002/sim.4067.
- Erik von Elm; Douglas G. Altman; Matthias Egger; Stuart J. Pocock; Peter C. Gøtzsche; Jan P. Vandenbroucke; for the STROBE Initiative (2007). The Strengthening the Reporting of Observational Studies in Epidemiology (STROBE) Statement: Guidelines for Reporting Observational Studies. PLoS Medicine, 4(10), e296. DOI: 10.1371/journal.pmed.0040296.
- Katie E. V. Fielding; Ian R. White; Michael J. Lee; Jane A. Thompson; Ian R. White; Jonathan A. C. Sterne; et al. (2015). Reporting of missing data in randomised controlled trials: a systematic survey of the methodological literature and a proposed guide. BMJ Open, 5(12), e008431. DOI: 10.1136/bmjopen-2015-008431.
Więcej kolejnych lekcji publicznego szkolenia znajdziesz na statystyk.edu.pl.