R vs SAS vs SPSS


Takie tytuły rozpoczynają zazwyczaj spory o wyższość jednego święta nad drugim. Ale nie na tym blogu. Dzisiejszy wpis ma za zadanie zilustrować pewne subtelne różnice pomiędzy tymi trzema pakietami statystycznymi. Różnice o często niebagatelnych konsekwencjach.

Wyobraźmy sobie, że podmiot X zleca nam budowę narzędzia analitycznego. Dochodzi do odbioru. Podmiot X sprawdza czy narzędzie liczy wszystko poprawnie, a tu nagle zonk. Okazuje się, że te nawet podstawowe statystyki nie zgadzają się z wartościami referencyjnymi.


O co chodzi?

Niestety w statystyce bywa tak, że ten sam parametr można szacować na różne sposoby. Każdy, kto przeżył kurs statystyki pamięta (;-)), że odchylenie standardowe można szacować na przynajmniej dwa różne sposoby (estymator obciążony i nieobciążony, czyli z dzieleniem przez n i n-1). Rzadziej się mówi o tym, że skośność i kurtoza można wyznaczać na trzy konkurencyjne popularne sposoby. A kwantyle? Okazuje się, że te można wyznaczać na 9(!) różnych sposobów.

I co gorsze, dla różnych pakietów różne sposoby są tymi ,,domyślnymi”!

Przez co, wyniki uzyskane procedurami o podobnych nazwach na tych samych danych mogą się różnić pomiędzy pakietami.
Zazwyczaj różnią się mało. Na tyle, że 99% osób może spokojnie machnąć na to ręką.
Reszta wpisu jest dla tego pozostałego 1% aptekarzy.

Skośność / kurtoza

W programie R do szacowania skośności i kurtozy można wykorzystać np. funkcje skewness i kurtosis, które są dostępne w pakiecie e1071. Obie te funkcje mają dodatkowy argument type, określający, który z trzech popularnych estymatorów skośności/kurtozy ma być wyznaczony.

W R domyślnie wykorzystywana jest trzecia z wymienionych tam definicji, a w SAS i SPSS druga.

 x <- runif(101)
 sapply(1:3, skewness, x=x, na.rm=T)
# [1] 0.1245367 0.1264220 0.1226917
 sapply(1:3, kurtosis, x=x, na.rm=T)
# [1] -1.116490 -1.111956 -1.153602

Kwantyle

W programie R do szacowania kwantyli służy funkcja quantile. Ma ona argument type, który pozwala na wskazanie jednej z 9 różnych metod wyznaczania kwantyli. W R domyślnie wykorzystywana jest definicja 7, w SAS definicja 3, a w SPSS definicja 6.

sapply(1:9, function(q) quantile(x, 0.01, type=q))
        1%         1%         1%         1%         1%         1%         1%         1%         1% 
0.02272536 0.02272536 0.01426692 0.01435151 0.01858073 0.01443609 0.02272536 0.01719918 0.01754457

Kontrasty

W programie R modele liniowe estymuje się z użyciem funkcji lm. Argument contrasts pozwala na wskazanie kontrastów. Domyślne w R to contr.treatment, a w SAS contr.SAS.

 lm(Sepal.Width~Species, data=iris, contrasts = contr.SAS)$coef
#      (Intercept) Speciesversicolor  Speciesvirginica 
#            3.428            -0.658            -0.454 
 lm(Sepal.Width~Species, data=iris, contrasts = list(Species=contr.SAS))$coef
#(Intercept)    Species1    Species2 
#      2.974       0.454      -0.204

Take home

Nawet (wydawałoby się) najbardziej podstawowe statystyki, takie jak skośność czy kwantyle mogą być różnie liczone w różnych pakietach statystycznych.
Warto o tym wiedzieć, jeżeli budujemy rozwiązanie analityczne oparte o R/SAS/SPSS, a nasz produkt będzie oceniany pod kątem poprawności z przygotowanymi szablonowymi odpowiedziami / zgodności z pewnymi regulacjami.

Różnic pomiędzy R a SAS/SPSS jest więcej. Będzie o nich można przeczytać np. w kolejnym wydaniu Przewodnika po pakiecie R 😉

4 thoughts on “R vs SAS vs SPSS”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *