Prace dyplomowe · SPSS

Przygotowanie danych w SPSS – zmienne, braki danych, przekodowanie i wynik skali

Zanim uruchomisz pierwszy test, zbiór musi mieć opisane zmienne, zdefiniowane kody braków, odwrócone pozycje i policzony wynik skali. Pokazujemy, jak zrobić to w widoku zmiennych, w oknach Recode into Different Variables i Compute Variable oraz w składni, i jak sprawdzić każdy krok na tabelach z SPSS.

Strona główna / Blog / Przygotowanie danych w SPSS
W skrócie: Przygotowanie danych w SPSS to pięć kroków: opis zmiennych w Variable View (typ, etykiety, poziom pomiaru), kontrola minimum i maksimum, zdefiniowanie kodów braków (np. 99) w kolumnie Missing, przekodowanie pozycji odwróconych w Transform → Recode into Different Variables i wynik skali w Compute Variable. Wynik licz funkcją MEAN.n, np. MEAN.5(…), a nie SUM ani zwykłym dodawaniem. SUM zaniża wynik osobom z brakami, a dodawanie odrzuca każdą osobę z choćby jednym brakiem. Każdy krok wklejaj przyciskiem Paste do składni i sprawdzaj tabelą częstości albo tabelą krzyżową.

Po co przygotowywać dane, zanim cokolwiek policzysz

Kod 99 policzony jak odpowiedź, nieodwrócona pozycja albo suma liczona z dziurami potrafią przesunąć średnią o kilka punktów, a na wydruku nic nie wygląda podejrzanie. Van den Broeck i in. (2005) opisują czyszczenie danych jako cykl trzech kroków: przesiewu, diagnozy i poprawiania podejrzanych wartości według reguł ustalonych z góry. W SPSS przekłada się to na pięć czynności:

  1. opis zmiennych w Variable View;
  2. kontrola zakresu odpowiedzi;
  3. braki danych zdefiniowane przez użytkownika (kody 99, 999);
  4. przekodowanie pozycji odwróconych;
  5. wynik skali w Compute Variable.

Ten wpis pokazuje, jak zrobić to w menu i w składni SPSS. Logikę liczenia wyniku (klucz, wzór na odwrócenie, wybór sumy lub średniej) wyjaśnia poradnik jak policzyć wynik kwestionariusza. Zamianę eksportu z formularza na liczby opisuje wpis o danych z Google Forms i LimeSurvey. Tabele, które SPSS wydrukuje już po analizie, objaśnia poradnik jak czytać wyniki z SPSS. O samym programie pisze hasło IBM SPSS Statistics.

Nazwy menu i okien podajemy po angielsku, według dokumentacji IBM SPSS Statistics 32.0.0. W polskiej dokumentacji IBM menu Transform nazywa się „Przekształć”, a Compute Variable – „Oblicz zmienną” (IBM Corp., b.d.-a). W polskim interfejsie nazwy mogą się różnić.

Plik przykładowy

Liczby we wpisie pochodzą z jednego zbioru symulowanego: 150 osób studiujących wypełniło fikcyjną sześciopozycyjną skalę zaangażowania w naukę (odpowiedzi 1–5). Pozycje z2 i z5 są sformułowane odwrotnie, czyli wyższa odpowiedź oznacza mniejsze zaangażowanie. Kod 99 znaczy „brak odpowiedzi”, puste pole to brak systemowy, a w wieku brak zakodowano jako 999. W pozycji z3 jest też jedna literówka. Plik przygotowanie-danych-spss-przyklad.sav ma etykiety zmiennych i wartości, ale braki nie są w nim jeszcze zdefiniowane, bo to pierwsze ćwiczenie. Te same surowe kody są w pliku CSV. Po wczytaniu CSV etykiety trzeba wpisać samodzielnie (zob. hasło plik .sav).

Liczby w tabelach policzyliśmy w R regułami SPSS (kod w sekcji składnia i kod R).

Widok zmiennych: typ, poziom pomiaru i etykiety

W edytorze danych są dwie karty: Data View z danymi i Variable View z opisem zmiennych. W widoku zmiennych każdy wiersz to jedna zmienna, a kolumny to jej atrybuty: nazwa, typ, szerokość, liczba miejsc po przecinku, etykieta zmiennej, etykiety wartości, braki danych i poziom pomiaru. Wszystkie te ustawienia zapisują się razem z plikiem (IBM Corp., b.d.-l). Docelowy opis zbioru z przykładu wygląda tak:

Docelowe atrybuty zmiennych w widoku zmiennych SPSS dla zbioru przykładowego
NameTypeLabelValuesMissingMeasure
idNumericNumer ankietyNoneNoneNominal
plecNumericPłeć{1, kobieta}…NoneNominal
wiekNumericWiek w latach{999, brak odpowiedzi}999Scale
z1 … z6NumericZaangażowanie 1 …{1, zdecydowanie się nie zgadzam}…99Ordinal
z2_r, z5_rNumericZaangażowanie 2 (przekodowana) …{1, zdecydowanie się zgadzam}…NoneOrdinal
n_wazneNumericLiczba ważnych odpowiedziNoneNoneScale
zaang_srNumericZaangażowanie: średnia pozycji (1–5)NoneNoneScale
zaang_sumaNumericZaangażowanie: suma (6–30)NoneNoneScale
  • Type. Odpowiedzi muszą być liczbami (Numeric). Zmiennych tekstowych (String) nie da się używać w obliczeniach (IBM Corp., b.d.-k).
  • Label i Values. Etykieta zmiennej trafia do tytułów tabel, a etykiety wartości mówią, co znaczy 1, a co 5. Ten sam opis wpisz do książki kodowej.
  • Measure. Do wyboru są Nominal, Ordinal i Scale. Zmienne utworzone przekształceniem albo zaimportowane dostają poziom domyślny. Na przykład zmienna liczbowa z mniej niż 24 różnymi wartościami staje się nominalna (IBM Corp., b.d.-j). Po imporcie i po każdym Compute sprawdź tę kolumnę. Płeć to skala nominalna, a pojedyncza pozycja Likerta – zwykle porządkowa. Status wyniku skali omawia wpis czy skala Likerta jest ilościowa.

Najpierw kontrola zakresu

Zanim zdefiniujesz braki, uruchom Analyze → Descriptive Statistics → Descriptives albo Frequencies na wszystkich pozycjach. W przykładzie każda pozycja ma maksimum 99, a wiek – 999, czyli kody braków. W z3 pojawiła się jednak wartość 44 (ankieta nr 13). To literówka, której nie wyłapie żadna definicja braków. Sprawdź ankietę i popraw wartość albo zamień ją na brak. Po zdefiniowaniu braków kody 99 znikną z minimum i maksimum.

Braki danych: systemowe i zdefiniowane przez użytkownika

SPSS zna dwa rodzaje braków. Brak systemowy (system-missing, w danych widoczny jako kropka) to puste pole. Brak zdefiniowany przez użytkownika (user-missing) to zwykła liczba, np. 99, którą oznaczasz jako brak. W widoku zmiennych kliknij komórkę w kolumnie Missing. Możesz wpisać do trzech pojedynczych wartości albo przedział i jedną wartość dodatkową. Przedziały działają tylko dla zmiennych liczbowych. Braki użytkownika są wyłączane z większości obliczeń i zapisują się razem z plikiem (IBM Corp., b.d.-c). W składni robi to polecenie MISSING VALUES z1 TO z6 (99) wiek (999). (IBM Corp., b.d.-d).

Osobny kod pozwala rozróżnić przyczyny braku, np. 98 „nie wiem” i 99 „odmowa”, i widać go w tabeli częstości. Tak wygląda pozycja z2 po zdefiniowaniu braków:

Odtworzenie tabeli Frequencies z SPSS dla pozycji z2 po zdefiniowaniu kodu 99 jako braku
Zaangażowanie 2: zniechęcenie (odwrócona)FrequencyPercentValid PercentCumulative Percent
Validzdecydowanie się nie zgadzam149.39.79.7
raczej się nie zgadzam3422.723.433.1
ani tak, ani nie4832.033.166.2
raczej się zgadzam2818.719.385.5
zdecydowanie się zgadzam2114.014.5100.0
Total14596.7100.0
Missingbrak odpowiedzi (99)42.7
System1.7
Total53.3
Total150100.0

Tabela SPSS Frequencies. Liczby policzone w R tymi samymi metodami co SPSS; układ tabeli jak w SPSS. Dane symulowane.

Kolumna Percent liczy odsetki od wszystkich 150 osób, a Valid Percent – od 145 osób z odpowiedzią. Do opisu rozkładu odpowiedzi bierz Valid Percent i podaj obok liczbę braków. Niezdefiniowany kod 99 trafiłby do części Valid i zawyżył średnią. Podobnie z wiekiem: po zdefiniowaniu 999 średnia wynosi 21.64 roku (n = 147), a bez tego – 41.19.

Czy braki są przypadkowe, wyjaśniają hasło braki danych (MCAR, MAR, MNAR) i wpis braki danych w ankiecie.

Pozycje odwrócone: Recode into Different Variables

Pozycję odwróconą przekoduj zawsze do nowej zmiennej, żeby oryginał został do kontroli (IBM Corp., b.d.-g):

  1. Transform → Recode into Different Variables.
  2. Przenieś z2 na listę, w polu Output Variable Name wpisz z2_r i kliknij Change. To samo zrób dla z5 → z5_r.
  3. Kliknij Old and New Values. Po lewej (Old Value) wybierz Value i wpisz 1, po prawej (New Value) wpisz 5, kliknij Add. Powtórz dla 2 → 4, 3 → 3, 4 → 2 i 5 → 1. Pary pojawią się na liście Old–>New.
  4. Zamknij okno wartości i w głównym oknie kliknij Paste zamiast OK. Polecenie trafi do okna składni, skąd je uruchomisz.

Parę 3 → 3 wpisz, choć nic nie zmienia. W nowej zmiennej każda wartość niewymieniona w specyfikacji dostaje brak systemowy (IBM Corp., b.d.-f). Bez tej pary wszystkie odpowiedzi „ani tak, ani nie” stałyby się brakami. Z tej samej reguły wynika, że kod 99 w z2_r zamienia się w brak systemowy. To bezpieczne, ale znika rozróżnienie między 99 a pustym polem. Można to ustawić jawnie opcjami System- or user-missing i All other values.

Nowa zmienna nie ma jeszcze etykiet wartości. Nadaj je według pierwotnej odpowiedzi: w z2_r wartość 1 to odpowiedź „zdecydowanie się zgadzam” ze zniechęceniem, czyli najniższe zaangażowanie. W składni służy do tego VALUE LABELS. To polecenie najpierw usuwa wszystkie dotychczasowe etykiety zmiennej, a dodaje bez usuwania ADD VALUE LABELS (IBM Corp., b.d.-i).

Zawsze sprawdź wynik tabelą krzyżową starej i nowej zmiennej: Analyze → Descriptive Statistics → Crosstabs.

Odtworzenie tabeli Crosstabulation z SPSS: z2 przed przekodowaniem i z2_r po przekodowaniu
Countz2_rTotal
12345
z2100001414
200034034
300480048
402800028
521000021
Total2128483414145

Tabela SPSS z2 * z2_r Crosstabulation (zamiast etykiet pokazano kody). Liczby policzone w R tymi samymi metodami co SPSS; układ tabeli jak w SPSS. Dane symulowane.

Poprawne przekodowanie daje wszystkie liczebności na przekątnej „od prawego górnego do lewego dolnego rogu”. Liczba 145 w rogu musi się zgadzać z Valid Total z tabeli częstości.

Krótsza droga to Compute Variable z wyrażeniem 6 - z2, czyli wzór (max + min) − x. Działa tylko wtedy, gdy kod 99 jest już zdefiniowany jako brak. Jeśli nie jest, 6 − 99 daje −93. Unikaj Recode into Same Variables: nadpisuje oryginał. Więcej w hasłach pozycja odwrócona i rekodowanie.

Wynik skali: Compute Variable, SUM i MEAN.5

Wynik liczysz w Transform → Compute Variable. Wpisz nazwę zmiennej docelowej, w polu Expression wpisz wyrażenie albo wklej funkcję z listy Function group. Etykietę nadasz przyciskiem Type & Label (IBM Corp., b.d.-a). Najważniejsza decyzja dotyczy braków, bo trzy podobne wyrażenia robią z nimi trzy różne rzeczy (IBM Corp., b.d.-e, b.d.-h):

  • z1 + z2_r + z3 + z4 + z5_r + z6 – brak, gdy brakuje którejkolwiek odpowiedzi;
  • SUM(z1, z2_r, z3, z4, z5_r, z6) – suma odpowiedzi, które są. Wystarczy jedna (domyślne .n wynosi 1);
  • MEAN.5(z1, z2_r, z3, z4, z5_r, z6) – średnia dostępnych odpowiedzi, ale tylko u osób z co najmniej pięcioma ważnymi odpowiedziami.

Zanim wybierzesz regułę, policz ważne odpowiedzi funkcją NVALID. Nie liczy ona braków systemowych ani braków użytkownika (IBM Corp., b.d.-b):

Odtworzenie tabeli Frequencies z SPSS dla liczby ważnych odpowiedzi n_wazne
Liczba ważnych odpowiedziFrequencyPercentValid PercentCumulative Percent
Valid453.33.33.3
52617.317.320.7
611979.379.3100.0
Total150100.0100.0

Tabela SPSS Frequencies dla zmiennej n_wazne. Liczby policzone w R tymi samymi metodami co SPSS; układ tabeli jak w SPSS. Dane symulowane.

Komplet odpowiedzi ma 119 osób (79.3%). Jednej brakuje 26 osobom, a dwóch – pięciu. Tak wygląda pięć wersji wyniku na tych samych danych:

Odtworzenie tabeli Descriptive Statistics z SPSS dla pięciu sposobów liczenia wyniku skali
NMinimumMaximumMeanStd. Deviation
zaang_plus (z1 + … + z6)1196.0029.0017.825.23
zaang_sum (SUM)1506.0029.0016.995.39
zaang_sr (MEAN.5)1451.004.832.95.89
zaang_suma (MEAN.5 × 6)1456.0029.0017.695.36
zaang_bez99 (MEAN.5, 99 niezdefiniowane)1501.0023.204.875.42
Valid N (listwise)119

Tabela SPSS Descriptive Statistics. Liczby policzone w R tymi samymi metodami co SPSS; układ tabeli jak w SPSS. Dane symulowane.

  • zaang_plus traci 31 osób, w tym 26 z jednym brakiem.
  • zaang_sum ma wszystkich, ale zaniża wynik osobom z brakami. U 26 osób z jednym brakiem jest średnio o 2.85 punktu niższy niż suma proporcjonalna.
  • zaang_sr i zaang_suma to ta sama reguła w dwóch metrykach (1–5 albo 6–30). Te wersje raportuj.
  • zaang_bez99 pokazuje skutek pominięcia kroku z brakami. Maksimum 23.20 na skali 1–5 jest niemożliwe. Dlatego po każdym Compute sprawdź minimum i maksimum.

Valid N (listwise) to liczba osób z wynikiem we wszystkich zmiennych naraz, a nie N próby.

Skąd próg pięciu z sześciu pozycji? Gdy podręcznik narzędzia nie podaje reguły braków, ustal ją przed analizą i opisz w pracy. Uśrednianie dostępnych pozycji to wygodna reguła, a nie metoda bez założeń. Mazza i in. (2015) pokazali w symulacjach, że może dawać obciążenie nawet przy brakach całkowicie losowych. Przy większej liczbie braków lepsze są metody oparte na modelu, np. imputacja wielokrotna albo największa wiarygodność ze zmiennymi pomocniczymi (Graham, 2009). Jak to zrobić w R, pokazuje wpis braki danych i imputacja wielokrotna w R. Następny krok to zwykle alfa Cronbacha w SPSS.

Składnia i przykład reprodukowalny

Składnia SPSS i ten sam proces w R

Pierwszy blok to cała procedura z tego wpisu w składni SPSS, zapisana według IBM Command Syntax Reference (wersja 32.0.0). Składni nie uruchamialiśmy w SPSS, bo liczby na stronie policzyliśmy w R. Zanim wkleisz polecenia do własnego zbioru, sprawdź nazwy zmiennych i kody braków. Pamiętaj też, że z1 TO z6 oznacza wszystkie zmienne leżące w pliku między z1 a z6. Drugi blok to kod R, który tworzy pliki .sav i CSV i liczy liczby z tabel tymi samymi regułami co SPSS.

1. Przygotowanie danych: składnia do wklejenia

Jak uruchomić: otwórz plik .sav, utwórz nowe okno składni, wklej polecenia i uruchom je po kolei. Plik zapisz z rozszerzeniem .sps i dołącz do dokumentacji pracy.

Co odczytać: minimum i maksimum przed zdefiniowaniem braków, tabele krzyżowe przekodowania, rozkład n_wazne oraz N, minimum i maksimum wyniku skali.

SPSS (składnia)
* B262 – przygotowanie danych w SPSS (składnia do wklejenia; nie była uruchamiana w SPSS).
* Aktywny zbiór danych: przygotowanie-danych-spss-przyklad.sav.

* 1. Kontrola zakresu PRZED zdefiniowaniem braków (szukaj kodów i literówek).
DESCRIPTIVES VARIABLES=wiek z1 z2 z3 z4 z5 z6.
FREQUENCIES VARIABLES=z1 z2 z3 z4 z5 z6.

* 2. Literówka w z3 (wartość 44, ankieta nr 13): po sprawdzeniu ankiety -> brak systemowy.
RECODE z3 (44=SYSMIS).

* 3. Braki zdefiniowane przez użytkownika i poziom pomiaru.
MISSING VALUES z1 TO z6 (99) wiek (999).
VARIABLE LEVEL id plec (NOMINAL) /z1 TO z6 (ORDINAL) /wiek (SCALE).

* 4. Pozycje odwrócone do NOWYCH zmiennych (para 3=3 jest konieczna).
RECODE z2 z5 (1=5) (2=4) (3=3) (4=2) (5=1) INTO z2_r z5_r.
VARIABLE LABELS z2_r 'Zaangażowanie 2 (przekodowana)' /z5_r 'Zaangażowanie 5 (przekodowana)'.
VALUE LABELS z2_r z5_r 1 'zdecydowanie się zgadzam' 2 'raczej się zgadzam' 3 'ani tak, ani nie'
  4 'raczej się nie zgadzam' 5 'zdecydowanie się nie zgadzam'.
VARIABLE LEVEL z2_r z5_r (ORDINAL).
CROSSTABS /TABLES=z2 BY z2_r.
CROSSTABS /TABLES=z5 BY z5_r.

* 5. Liczba ważnych odpowiedzi i wynik skali (co najmniej 5 z 6 odpowiedzi).
COMPUTE n_wazne = NVALID(z1, z2_r, z3, z4, z5_r, z6).
COMPUTE zaang_sr = MEAN.5(z1, z2_r, z3, z4, z5_r, z6).
COMPUTE zaang_suma = MEAN.5(z1, z2_r, z3, z4, z5_r, z6) * 6.
VARIABLE LABELS n_wazne 'Liczba ważnych odpowiedzi' /zaang_sr 'Zaangażowanie: średnia pozycji (1-5)'
  /zaang_suma 'Zaangażowanie: suma proporcjonalna (6-30)'.
VARIABLE LEVEL n_wazne zaang_sr zaang_suma (SCALE).

* 6. Kontrola po przekształceniach.
FREQUENCIES VARIABLES=n_wazne.
DESCRIPTIVES VARIABLES=zaang_sr zaang_suma.

2. Te same kroki w R (pakiet haven)

Dane wejściowe: 150 osób, 6 pozycji 1–5 z kodem 99, pustymi polami i jedną literówką, wiek z kodem 999 (dane symulowane, set.seed(2621)); pakiet haven zapisuje plik .sav z etykietami.

Co odczytać: zakres przed zdefiniowaniem braków, tabelę częstości z2, tabelę krzyżową przekodowania, rozkład liczby ważnych odpowiedzi i statystyki pięciu wersji wyniku.

R
# B262 – przygotowanie danych tak jak w SPSS: braki zdefiniowane przez użytkownika (99, 999),
# Recode into Different Variables dla pozycji odwróconych, NVALID, SUM, MEAN.5 i wynik skali.
# Dane symulowane, set.seed(2621): 150 osób studiujących, fikcyjna skala zaangażowania w naukę
# (6 pozycji, odpowiedzi 1–5; pozycje z2 i z5 sformułowane odwrotnie). Kod 99 = brak odpowiedzi,
# puste pole = brak systemowy; w wieku kod 999 = brak odpowiedzi.
suppressPackageStartupMessages(library(haven))
set.seed(2621)
n <- 150
theta <- rnorm(n)
kier <- c(1, -1, 1, 1, -1, 1)                          # -1 = pozycja odwrócona
z <- sapply(kier, function(k) findInterval(0.75 * k * theta + rnorm(n, 0, 0.66), c(-1.3, -0.45, 0.4, 1.25)) + 1)
colnames(z) <- paste0("z", 1:6)
for (j in 1:6) {                                        # braki: część jako kod 99, część pusta
  b <- sample(n, sample(5:8, 1)); z[b, j] <- ifelse(runif(length(b)) < 0.6, 99, NA)
}
z[sample(which(!is.na(z[, 3]) & z[, 3] != 99), 1), 3] <- 44   # literówka do wychwycenia
plec <- sample(1:3, n, TRUE, c(.66, .30, .04))
wiek <- round(19 + rgamma(n, 1.8, 0.6)); wiek[sample(n, 3)] <- 999
dane <- data.frame(id = 1:n, plec, wiek, z)

# Plik CSV (surowe kody) i .sav z etykietami zmiennych i wartości (braki NIE są jeszcze zdefiniowane)
write.csv(dane, "../przygotowanie-danych-spss-przyklad.csv", row.names = FALSE, na = "")
lik <- c("zdecydowanie się nie zgadzam" = 1, "raczej się nie zgadzam" = 2, "ani tak, ani nie" = 3,
         "raczej się zgadzam" = 4, "zdecydowanie się zgadzam" = 5, "brak odpowiedzi" = 99)
et <- c(z1 = "Zaangażowanie 1: chęć do nauki", z2 = "Zaangażowanie 2: zniechęcenie (odwrócona)",
        z3 = "Zaangażowanie 3: koncentracja", z4 = "Zaangażowanie 4: wysiłek",
        z5 = "Zaangażowanie 5: odkładanie nauki (odwrócona)", z6 = "Zaangażowanie 6: satysfakcja")
sav <- dane
sav$id <- labelled(sav$id, label = "Numer ankiety")
sav$plec <- labelled(sav$plec, c("kobieta" = 1, "mężczyzna" = 2, "inna lub wolę nie odpowiadać" = 3), label = "Płeć")
sav$wiek <- labelled(sav$wiek, c("brak odpowiedzi" = 999), label = "Wiek w latach")
for (v in names(et)) sav[[v]] <- labelled(sav[[v]], lik, label = et[[v]])
for (v in names(sav)) attr(sav[[v]], "format.spss") <- "F8.0"   # liczby całkowite bez miejsc po przecinku
write_sav(sav, "../przygotowanie-danych-spss-przyklad.sav")

# Krok 1. Kontrola zakresu PRZED zdefiniowaniem braków (jak Frequencies / Descriptives na surowych danych)
sapply(dane[c("wiek", paste0("z", 1:6))], function(x) c(min = min(x, na.rm = TRUE), max = max(x, na.rm = TRUE)))
which(dane$z3 == 44)                                    # numer wiersza z literówką
dane$z3[dane$z3 == 44] <- NA                            # po sprawdzeniu ankiety: brak (w SPSS: sysmis)

# Krok 2. MISSING VALUES z1 TO z6 (99) wiek (999): kody braków stają się brakami
um <- dane; for (v in paste0("z", 1:6)) um[[v]][um[[v]] %in% 99] <- NA; um$wiek[um$wiek %in% 999] <- NA

# Tabela Frequencies dla z2: Valid 1–5, Missing 99 i System (jak w SPSS)
czest <- c(table(factor(dane$z2[dane$z2 %in% 1:5], levels = 1:5)))
miss <- c(`99` = sum(dane$z2 %in% 99), System = sum(is.na(dane$z2)))
tab <- data.frame(Frequency = c(czest, sum(czest), miss, sum(miss), n), check.names = FALSE,
                  row.names = c(paste("Valid", 1:5), "Valid Total", "Missing 99", "Missing System", "Missing Total", "Total"))
tab$Percent <- round(100 * tab$Frequency / n, 1)
tab$`Valid Percent` <- c(round(100 * czest / sum(czest), 1), 100, rep(NA, 4))
tab$`Cumulative Percent` <- c(round(100 * cumsum(czest) / sum(czest), 1), rep(NA, 5))
tab

# Krok 3. RECODE z2 z5 (1=5) (2=4) (3=3) (4=2) (5=1) INTO z2_r z5_r: wartości niewymienione -> sysmis
rek <- function(x) c(5, 4, 3, 2, 1)[match(x, 1:5)]
um$z2_r <- rek(dane$z2); um$z5_r <- rek(dane$z5)
table(z2 = um$z2, z2_r = um$z2_r)                       # Crosstabulation: kontrola przekodowania
c(z2_braki = sum(is.na(um$z2)), z2_r_braki = sum(is.na(um$z2_r)))

# Krok 4. NVALID: liczba ważnych odpowiedzi na 6 pozycji
poz <- c("z1", "z2_r", "z3", "z4", "z5_r", "z6")
um$n_wazne <- rowSums(!is.na(um[poz]))
table(n_wazne = um$n_wazne)

# Krok 5. Pięć sposobów liczenia wyniku (Descriptive Statistics)
X <- um[poz]
um$zaang_plus <- rowSums(X)                                         # z1 + z2_r + ... (brak, gdy jakikolwiek brak)
um$zaang_sum <- ifelse(um$n_wazne >= 1, rowSums(X, na.rm = TRUE), NA) # SUM(...): suma dostępnych
um$zaang_sr <- ifelse(um$n_wazne >= 5, rowMeans(X, na.rm = TRUE), NA) # MEAN.5(...): średnia 1–5
um$zaang_suma <- um$zaang_sr * 6                                     # MEAN.5(...) * 6: suma proporcjonalna 6–30
# Błąd: 99 nie zdefiniowano jako brak (w z2_r i z5_r i tak zniknęło, bo RECODE INTO nie zna 99)
bez99 <- dane; bez99$z2_r <- rek(dane$z2); bez99$z5_r <- rek(dane$z5)
um$zaang_bez99 <- ifelse(rowSums(!is.na(bez99[poz])) >= 5, rowMeans(bez99[poz], na.rm = TRUE), NA)
opis <- function(x) c(N = sum(!is.na(x)), Minimum = min(x, na.rm = TRUE), Maximum = max(x, na.rm = TRUE),
                      Mean = mean(x, na.rm = TRUE), `Std. Deviation` = sd(x, na.rm = TRUE))
w <- c("zaang_plus", "zaang_sum", "zaang_sr", "zaang_suma", "zaang_bez99")
round(t(sapply(um[w], opis)), 2)
c(`Valid N (listwise)` = sum(complete.cases(um[w])))

# Krok 6. Ile osób z 1 brakiem i jak bardzo SUM zaniża ich wynik względem sumy proporcjonalnej
j1 <- um$n_wazne == 5
round(c(osoby = sum(j1), roznica_srednia = mean(um$zaang_suma[j1] - um$zaang_sum[j1])), 2)
# Wiek po zdefiniowaniu 999 jako braku
round(c(N = sum(!is.na(um$wiek)), M = mean(um$wiek, na.rm = TRUE), SD = sd(um$wiek, na.rm = TRUE),
        M_z_999 = mean(dane$wiek)), 2)
Wynik w R
    wiek z1 z2 z3 z4 z5 z6
min   19  1  1  1  1  1  1
max  999 99 99 99 99 99 99
[1] 13
               Frequency Percent Valid Percent Cumulative Percent
Valid 1               14     9.3           9.7                9.7
Valid 2               34    22.7          23.4               33.1
Valid 3               48    32.0          33.1               66.2
Valid 4               28    18.7          19.3               85.5
Valid 5               21    14.0          14.5              100.0
Valid Total          145    96.7         100.0                 NA
Missing 99             4     2.7            NA                 NA
Missing System         1     0.7            NA                 NA
Missing Total          5     3.3            NA                 NA
Total                150   100.0            NA                 NA
   z2_r
z2   1  2  3  4  5
  1  0  0  0  0 14
  2  0  0  0 34  0
  3  0  0 48  0  0
  4  0 28  0  0  0
  5 21  0  0  0  0
  z2_braki z2_r_braki 
         5          5 
n_wazne
  4   5   6 
  5  26 119 
              N Minimum Maximum  Mean Std. Deviation
zaang_plus  119       6   29.00 17.82           5.23
zaang_sum   150       6   29.00 16.99           5.39
zaang_sr    145       1    4.83  2.95           0.89
zaang_suma  145       6   29.00 17.69           5.36
zaang_bez99 150       1   23.20  4.87           5.42
Valid N (listwise) 
               119 
          osoby roznica_srednia 
          26.00            2.85 
      N       M      SD M_z_999 
 147.00   21.64    2.12   41.19

Bibliografia oprogramowania

Wyniki na tej stronie pochodzą z uruchomienia pokazanego kodu w R 4.5.3; plik .sav zapisano pakietem haven. W pracy podaj wersję SPSS albo R, której faktycznie użyłeś(-aś).

  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. haven (wersja 2.5.5): Wickham, H., Miller, E., & Smith, D. (2025). haven: Import and export 'SPSS', 'Stata' and 'SAS' files [R package]. https://doi.org/10.32614/CRAN.package.haven

Jak opisać przygotowanie danych w pracy

W rozdziale metod wystarczy kilka zdań o kodach braków, pozycjach odwróconych, regule braków i liczbie osób bez wyniku:

Dane przygotowano w programie IBM SPSS Statistics (wersja …). Kody 99 (brak odpowiedzi) i 999 (brak wieku) zdefiniowano jako braki danych, a jedną wartość spoza zakresu odpowiedzi (44 w pozycji 3) po sprawdzeniu ankiety źródłowej uznano za brak. Pozycje 2 i 5, sformułowane odwrotnie, przekodowano do nowych zmiennych (1 = 5, …, 5 = 1). Wynik skali zaangażowania obliczono jako średnią odpowiedzi na sześć pozycji (zakres 1–5) u osób, które odpowiedziały na co najmniej pięć z nich. Komplet odpowiedzi miało 119 ze 150 osób (79.3%), jednej odpowiedzi brakowało 26 osobom, a 5 osób nie miało wyniku z powodu dwóch braków. Ostatecznie wynik obliczono dla 145 osób (M = 2.95, SD = 0.89). Pełna składnia przygotowania danych znajduje się w załączniku.

W tekście pracy zapisz statystyki zgodnie z APA: M = 2.95, SD = 0.89, z zerem przed kropką, a nie „.89” jak w tabeli SPSS. Zdania do kolejnych testów przygotuje generator opisu wyników w stylu APA, a test do hipotezy pomoże dobrać kreator doboru testu. Akapit umieść w rozdziale metodologicznym.

Najczęstsze błędy

  • Kody 99 i 999 liczone jak odpowiedzi. Sprawdzaj minimum i maksimum przed analizą i po przekształceniach.
  • Brak pary 3 → 3 w Recode into Different Variables. Środkowa odpowiedź staje się brakiem.
  • SUM bez reguły braków. Osoby, które pominęły pytanie, dostają niższy wynik.
  • Poziom pomiaru pozostawiony domyślnie. Wynik skali oznaczony jako Nominal albo kod płci jako Scale.
  • Poprawki w Data View bez śladu. Każdą zmianę zrób przyciskiem Paste i zachowaj plik składni.

Cały proces analizy opisuje przewodnik po statystyce w pracy dyplomowej. Jeśli chcesz, żeby ktoś sprawdził Twój zbiór i składnię przed analizą, zajrzyj do oferty analizy statystyczne dla studentów. Decyzje o danych musisz jednak umieć wyjaśnić samodzielnie.

Najczęstsze pytania

Jak zdefiniować kod 99 jako brak danych w SPSS?

W widoku zmiennych (Variable View) kliknij komórkę w kolumnie Missing i wpisz 99 jako wartość dyskretną. Możesz podać do trzech takich wartości albo przedział i jedną wartość dodatkową. W składni to samo robi polecenie MISSING VALUES z1 TO z6 (99). Wcześniej sprawdź minimum i maksimum, żeby wyłapać literówki.

Czym różni się brak systemowy od braku zdefiniowanego przez użytkownika w SPSS?

Brak systemowy to puste pole, widoczne w danych jako kropka. Brak użytkownika to zwykła liczba, np. 99, oznaczona jako brak w kolumnie Missing. Oba są pomijane w większości obliczeń, ale tylko kod użytkownika pozwala rozróżnić przyczyny braku, np. odmowę i „nie dotyczy”.

Jak odwrócić pozycję skali Likerta w SPSS?

Wybierz Transform → Recode into Different Variables, nadaj nowej zmiennej nazwę (np. z2_r) i w Old and New Values dodaj pary 1→5, 2→4, 3→3, 4→2, 5→1. Pary 3→3 nie pomijaj, bo w nowej zmiennej każda niewymieniona wartość staje się brakiem systemowym. Wynik sprawdź tabelą krzyżową starej i nowej zmiennej.

Czy wynik skali w SPSS liczyć funkcją SUM czy MEAN?

Do raportowania lepsza jest MEAN.n, np. MEAN.5 dla sześciu pozycji. Liczy średnią tylko u osób z co najmniej n odpowiedziami. SUM dodaje dostępne odpowiedzi, więc zaniża wynik osobom z brakami. W przykładzie było to średnio o 2.85 punktu przy jednym braku. Jeśli klucz wymaga sumy, pomnóż średnią przez liczbę pozycji.

Co oznacza Valid N (listwise) w tabeli Descriptives?

To liczba osób, które mają ważne wartości we wszystkich zmiennych z tabeli naraz. Nie jest to liczebność próby ani liczba osób z wynikiem danej skali. Liczebność każdej zmiennej znajdziesz w kolumnie N w jej wierszu i tę liczbę podaj w pracy.

Powiązane hasła

Przeczytaj też

Przygotowujesz dane w SPSS i nie wiesz, czy kody braków i wynik skali są dobrze?

Sprawdzimy widok zmiennych, kody braków, przekodowanie pozycji i składnię liczenia wyników oraz wyjaśnimy każdy krok tak, żebyś umiał(a) samodzielnie opisać i obronić przygotowanie danych.

Oferta dla studentówWyceń analizę

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Graham, J. W. (2009). Missing data analysis: Making it work in the real world. Annual Review of Psychology, 60(1), 549–576. https://doi.org/10.1146/annurev.psych.58.110405.085530
  2. IBM Corp. (b.d.-a). Computing Variables. IBM SPSS Statistics 32.0.0 documentation. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/idh_comp.html ● Otwarty dostęp
  3. IBM Corp. (b.d.-b). Missing value functions. IBM SPSS Statistics 32.0.0 Command Syntax Reference. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_transformation_expressions_missing-value_functions.html ● Otwarty dostęp
  4. IBM Corp. (b.d.-c). Missing values. IBM SPSS Statistics 32.0.0 documentation. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/idh_defvar_msval.html ● Otwarty dostęp
  5. IBM Corp. (b.d.-d). MISSING VALUES. IBM SPSS Statistics 32.0.0 Command Syntax Reference. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_missing_values.html ● Otwarty dostęp
  6. IBM Corp. (b.d.-e). Missing Values in Functions. IBM SPSS Statistics 32.0.0 documentation. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/missingvalues.html ● Otwarty dostęp
  7. IBM Corp. (b.d.-f). Numeric Variables (RECODE command). IBM SPSS Statistics 32.0.0 Command Syntax Reference. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_recode_into_numeric_variables.html ● Otwarty dostęp
  8. IBM Corp. (b.d.-g). Recode into Different Variables. IBM SPSS Statistics 32.0.0 documentation. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/idh_reci_main.html ● Otwarty dostęp
  9. IBM Corp. (b.d.-h). Statistical functions. IBM SPSS Statistics 32.0.0 Command Syntax Reference. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_transformation_expressions_statistical_functions.html ● Otwarty dostęp
  10. IBM Corp. (b.d.-i). VALUE LABELS. IBM SPSS Statistics 32.0.0 Command Syntax Reference. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_value_labels.html ● Otwarty dostęp
  11. IBM Corp. (b.d.-j). Variable measurement level. IBM SPSS Statistics 32.0.0 documentation. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/dataedit_define_variable_measurement.html ● Otwarty dostęp
  12. IBM Corp. (b.d.-k). Variable type. IBM SPSS Statistics 32.0.0 documentation. https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/idh_defvar_type.html ● Otwarty dostęp
  13. IBM Corp. (b.d.-l). Variable View. IBM SPSS Statistics 32.0.0 documentation. https://www.ibm.com/docs/en/spss-statistics/32.0.0?topic=editor-variable-view ● Otwarty dostęp
  14. Mazza, G. L., Enders, C. K., & Ruehlman, L. S. (2015). Addressing item-level missing data: A comparison of proration and full information maximum likelihood estimation. Multivariate Behavioral Research, 50(5), 504–519. https://doi.org/10.1080/00273171.2015.1068157 ● Otwarty dostęp: pełny tekst
  15. Van den Broeck, J., Argeseanu Cunningham, S., Eeckels, R., & Herbst, K. (2005). Data cleaning: Detecting, diagnosing, and editing data abnormalities. PLoS Medicine, 2(10), Article e267. https://doi.org/10.1371/journal.pmed.0020267 ● Otwarty dostęp

Cytowania BibTeX

@article{graham2009missing, author={Graham, John W.}, title={{Missing data analysis: Making it work in the real world}}, journal={Annual Review of Psychology}, year={2009}, volume={60}, number={1}, pages={549--576}, doi={10.1146/annurev.psych.58.110405.085530}}
@misc{ibm32computevariable, author={{IBM Corp.}}, title={{Computing Variables}}, howpublished={IBM SPSS Statistics 32.0.0 documentation}, year={b.d.-a}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/idh_comp.html}}
@misc{ibm32missingvaluefunctions, author={{IBM Corp.}}, title={{Missing value functions}}, howpublished={IBM SPSS Statistics 32.0.0 Command Syntax Reference}, year={b.d.-b}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_transformation_expressions_missing-value_functions.html}}
@misc{ibm32missingvaluesview, author={{IBM Corp.}}, title={{Missing values}}, howpublished={IBM SPSS Statistics 32.0.0 documentation}, year={b.d.-c}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/idh_defvar_msval.html}}
@misc{ibm32missingvaluessyntax, author={{IBM Corp.}}, title={{MISSING VALUES}}, howpublished={IBM SPSS Statistics 32.0.0 Command Syntax Reference}, year={b.d.-d}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_missing_values.html}}
@misc{ibm32missingfunctions, author={{IBM Corp.}}, title={{Missing Values in Functions}}, howpublished={IBM SPSS Statistics 32.0.0 documentation}, year={b.d.-e}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/missingvalues.html}}
@misc{ibm32recodenumeric, author={{IBM Corp.}}, title={{Numeric Variables (RECODE command)}}, howpublished={IBM SPSS Statistics 32.0.0 Command Syntax Reference}, year={b.d.-f}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_recode_into_numeric_variables.html}}
@misc{ibm32recodedifferent, author={{IBM Corp.}}, title={{Recode into Different Variables}}, howpublished={IBM SPSS Statistics 32.0.0 documentation}, year={b.d.-g}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/idh_reci_main.html}}
@misc{ibm32statfunctions, author={{IBM Corp.}}, title={{Statistical functions}}, howpublished={IBM SPSS Statistics 32.0.0 Command Syntax Reference}, year={b.d.-h}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_transformation_expressions_statistical_functions.html}}
@misc{ibm32valuelabels, author={{IBM Corp.}}, title={{VALUE LABELS}}, howpublished={IBM SPSS Statistics 32.0.0 Command Syntax Reference}, year={b.d.-i}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_reference_project_ddita/spss/base/syn_value_labels.html}}
@misc{ibm32measurementlevel, author={{IBM Corp.}}, title={{Variable measurement level}}, howpublished={IBM SPSS Statistics 32.0.0 documentation}, year={b.d.-j}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/dataedit_define_variable_measurement.html}}
@misc{ibm32variabletype, author={{IBM Corp.}}, title={{Variable type}}, howpublished={IBM SPSS Statistics 32.0.0 documentation}, year={b.d.-k}, publisher={IBM}, url={https://www.ibm.com/docs/en/SSLVMB_32.0.0/statistics_mainhelp_ddita/spss/base/idh_defvar_type.html}}
@misc{ibm32variableview, author={{IBM Corp.}}, title={{Variable View}}, howpublished={IBM SPSS Statistics 32.0.0 documentation}, year={b.d.-l}, publisher={IBM}, url={https://www.ibm.com/docs/en/spss-statistics/32.0.0?topic=editor-variable-view}}
@article{mazza2015addressing, author={Mazza, Gina L. and Enders, Craig K. and Ruehlman, Linda S.}, title={{Addressing item-level missing data: A comparison of proration and full information maximum likelihood estimation}}, journal={Multivariate Behavioral Research}, year={2015}, volume={50}, number={5}, pages={504--519}, doi={10.1080/00273171.2015.1068157}}
@article{vandenbroeck2005data, author={Van den Broeck, Jan and Argeseanu Cunningham, Solveig and Eeckels, Roger and Herbst, Kobus}, title={{Data cleaning: Detecting, diagnosing, and editing data abnormalities}}, journal={PLoS Medicine}, year={2005}, volume={2}, number={10}, eid={e267}, doi={10.1371/journal.pmed.0020267}}
R