Jak obliczyć różnicę między sąsiadującymi w kolumnie wartościami?
Transkrypt
Jak obliczyć różnicę między sąsiadującymi w kolumnie wartościami?
Kącik debiutanta Jak obliczyć różnicę między sąsiadującymi w kolumnie wartościami? Sebastian Perwel Predictive Solutions PAPI (ang. Paper and Pencil Interview) – wywiad przeprowadzany za pomocą papierowego kwestionariusza CAPI (ang. Computer-Assisted Personal Interview) – wspomagany komputerowo wywiad indywiadualny CAWI (ang. Computer-Assisted Web Interview) – wspomagany komputerowo wywiad za pośrednictwem ankiety internetowej CATI (ang. Computer-Assisted Telephone Interview) – wspomagany komputerowo wywiad telefoniczny [W jednym z poprzednich artykułów nauczyliśmy się numerować kolejno obserwacje w zbiorze danych]. W dzisiejszym artykule chciałbym pokazać, w jaki sposób szybko możemy upewnić się, że rekordy w zbiorze danych są ponumerowane po kolei i sprawdzić czy na pewno dysponujemy wszystkimi potrzebnymi do analiz obserwacjami. Taki mały zabieg obliczeniowy pozwoli nam wykryć pewne anomalie zbioru, którym dysponujemy. Z sytuacją brakujących rekordów możemy spotkać się przykładowo przy okazji dużych badań terenowych, w trakcie których dane zbierane były za pomocą ankiet papierowych (PAPI), a następnie wprowadzane do komputera ręcznie. Należy zauważyć, że odchodzi się od takich form zbierania danych, na rzecz badań wspieranych komputerowo (CAPI, CAWI, CATI) i przy użyciu takich narzędzi jak IBM SPSS Data Collection, które ułatwiają kontrolę tego procesu. Wciąż jednak możemy się spotkać z wykorzystaniem papierowych kwestionariuszy przykładowo w badaniach w obszarze edukacji, gdzie częstą formą zbierania danych są ankiety audytoryjne, lub wtedy, kiedy istnieje potrzeba dotarcia do trudno osiągalnych respondentów jak np. osoby bezdomne. Spróbujmy wcielić się w rolę koordynatora międzynarodowego badania w obszarze edukacji. W ramach badania jesteśmy na etapie kończenia prac w terenie i otrzymaliśmy już wstępne zbiory danych z czterech regionów, które połączyliśmy w jeden plik. Chcemy przeprowadzić audyt zebranych danych. Musimy wiedzieć, że każdy z przygotowanych wcześniej w centrali kwestionariuszy otrzymał swój indywidualny, kolejny numer w zakresie od 1 do N. Przy czym wszystkie kwestionariusze wysłane do regionu drugiego miały numery wyższe od tych z pierwszego, kwestionariusze wysłane do regionu trzeciego miały numery wyższe niż te z pierwszego i drugiego, itd. Zwrotnie otrzymaliśmy uzupełnione zbiory danych, zawierające m.in. zmienną Id z informacją o numerze kwestionariusza, z jakiego pochodzą dane. W tym momencie będziemy chcieli sprawdzić, jakich numerów w zbiorze nam brakuje. Sprawdzimy w ten sposób, w jakim stanie są dane, ale także upewnimy się, że nie popełniliśmy błędu przy łączeniu zbiorów i czy przez przypadek nie wprowadziliśmy niektórych obserwacji dwukrotnie. Wyszukiwanie braków w numeracji na zmiennej Id zacznę od otwarcia załączonego do artykułu zbioru Badanie_szkoły.sav i posortowania obserwacji rosnąco według zmiennej Id, za pomocą opcji dostępnej w menu [Dane] u [Sortuj obserwacje]. Następnie będę chciał od wartości zmiennej Id odjąć wartość tej zmiennej z poprzedniego rekordu. Za chwilę dowiemy się dlaczego. Powróćmy dzisiaj do okna obliczania wartości zmiennej dostępnego w menu [Przekształ-] [cenia] u [Oblicz wartości…]. Wyliczanie różnic między sąsiadującymi rekordami w obrębie jednej zmiennej wymaga od nas zapoznania się z funkcją LAG. Określenie LAG na pewno jest znane bliżej wszystkim miłośnikom wieloosobowych gier komputerowych rozgrywanych przez sieć. Oznaczające opóźnienie reakcji gry względem reakcji gracza „lagi”, podyktowane przykładowo przepustowością łącza, są często irytującym doświadczeniem, szczególnie wtedy, gdy gra wymaga szybkich decyzji w odpowiedzi na ruchy adwersarza. W przypadku funkcji LAG takie „opóźnianie” będzie dla nas przydatne. Funkcję LAG możemy wykorzystać w poznanym już w tej serii artykułów kreatorze wyliczeń wartości. Jest ona dostępna w grupie funkcji [Różne]. 2 Kącik debiutanta · Jak obliczyć różnicę między sąsiadującymi w kolumnie wartościami? Aby poprawnie rozwiązać nasze zadanie, użyjemy wyrażenia zawartego w kreatorze na rysunku 1. Rysunek 1. Wyrażenie z funkcją LAG Spróbujmy zobrazować mechanizm tej funkcji za pomocą tabeli 1. Mając w zbiorze zmienną Id chcemy ją przesunąć o jeden rekord. Funkcja sprawi, że nowa zmienna będzie zaczynała się w miejscu, w którym występuje druga wartość zmiennej bez przesunięcia, jak w tabeli 1. Aby sprawdzić zgodność numeracji odejmę „opóźnioną” zmienną od zmiennej oryginalnej, tworząc trzecią kolumnę. Wartości 1 będą nas informowały o tym, że wartość poprzedzająca daną obserwację w zbiorze jest mniejsza o 1. Id LAG(Id) Id - LAG(Id) 1 . 1 2 3 4 5 . 1 1 1 1 1 2 3 Tabela 1. Różnica między zmienną Id i nią samą przesuniętą o jeden rekord 4 5 6 Załóżmy jednak, że w analizowanym zbiorze danych brakuje obserwacji, przez co rekordy nie są ponumerowane kolejno po sortowaniu. Spójrzmy na tabelę 2., która prezentuje to jak zachowałby się mechanizm wykorzystujący funkcję LAG w przypadku brakującego rekordu o wartości Id równej 4. W rezultacie odjęcia od zmiennej pierwotnej, zmiennej przesuniętej o jeden rekord otrzymamy zmienną prezentowaną w trzeciej kolumnie tej tabeli. Id LAG(Id) Id - LAG(Id) 1 . 1 2 3 5 6 . 1 1 2 1 1 2 Tabela 2. Różnica między zmienną Id z brakującą obserwacją nr 4 i nią samą przesuniętą o jeden rekord 3 5 6 7 W tym przypadku wartość 2 w trzeciej kolumnie tabeli 2. informuje nas o tym, że w naszym zbiorze brakuje obserwacji poprzedzającej obserwację nr 5, czyli brakuje obserwacji nr 4. Jeżeli już wprowadziliśmy nasze polecenie jak na rysunku 1. możemy kliknąć [ok] i przejść do zbioru oraz posortować obserwacje malejąco według tak wyliczonej zmiennej. Na początku zbioru znajdą się teraz obserwacje, przed którymi brakuje rekordów. I chociaż dzięki takiemu zabiegowi nie zobaczymy tego, czego w zbiorze nie ma, to przynajmniej zdobędziemy 3 Kącik debiutanta · Jak obliczyć różnicę między sąsiadującymi w kolumnie wartościami? wiedzę na temat istniejących „dziur” oraz lokalizacji braków danych. Na końcu możemy również sprawdzić jak w poszczególnych regionach przebiega zbieranie danych i jakiej jakości są to dane. Wykonam w tym celu tabelę krzyżową dla zmiennej Region (kolumny) i zmiennej wyliczonej z pomocą funkcji LAG (wiersze), dzięki której dowiemy się czy nasz zbiór przypomina bardziej ser holenderski, czy szwajcarski. Id regionu POPRAWNY_NR 0 1 2 6 7 9 12 14 15 18 Tabela 3. Braki danych w poszczególnych regionach 20 Ogółem Ogółem 1 2 3 4 0 3383 6 0 0 0 0 0 1 0 0 3390 0 3296 9 1 1 0 0 0 1 0 0 3308 0 1135 0 0 0 0 0 0 0 0 0 1135 20 2273 24 0 7 2 2 1 2 2 1 2334 20 10087 39 1 8 2 2 1 3 2 1 10167 Jak możemy zauważyć w tabeli 3. najwięcej braków występuje w czwartym regionie. Przykładowo aż w 24 przypadkach w regionie czwartym brakuje jednej obserwacji poprzedzającej dany przypadek. W czwartym regionie wystąpił też przypadek, którego Id różni się o 20 od Id poprzedzającej go obserwacji, co oznacza, że w danych występuje luka na 19 obserwacji. W momencie, w którym obliczona w przykładzie zmienna przyjmuje duże wartości, czyli gdy przed daną obserwacją brakuje wielu obserwacji, możemy założyć, że w zbiorze danych brakuje rekordów z jednego oddziału, lub nawet z całej szkoły. Warto się takiemu przypadkowi bliżej przyjrzeć. Z kolei małe wartości będą informowały nas o jednostkowych brakach, wynikających np. z braku zwrotu kwestionariusza. Zera w tym przypadku będą informowały nas o tym, że obserwacje takie są powtórzone. Oprócz sprawdzania poprawności numeracji rekordów, funkcję LAG możemy również wykorzystać w sytuacji, w której dysponujemy danymi zawierającymi przykładowo wartość sprzedaży w poszczególnych latach, a chcemy obliczyć zmianę nominalnej wartości rok do roku, odejmując od wartości dla roku x wartości roku x-1. Na tym skończymy omawianie obliczania różnic między sąsiadującymi komórkami jednej zmiennej. Zachęcam do lektury kolejnych artykułów z serii dla debiutantów analizy. Predictive Solutions ul. Racławicka 58 · 30-017 Kraków tel. 12 636 96 80 · faks wew. 102 [www.predictivesolutions.pl]