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]