Regresja liniowa w R vs SAS

Wielką zaletą prowadzenia laboratoriów jest to, że gdy nie ma się czasu na realizację jakiegoś niewielkiego projektu, zawsze można zadać go studentom jako pracę na ocenę. W poprzednim roku prowadziłem przedmiot R i SAS dla około 30 studentów (nigdy nie wiadomo jak liczyć studentów, czy tych zapisanych w USOSie, czy tych co rzeczywiście przychodzą na zajęcia, czy tych co przystępują do zaliczenia). Ostatni projekt dotyczył między innymi porównania czasów wykonywania regresji liniowej na modelach o tym samym rozmiarze w R i w SAS. Kilkanaście rozwiązań i kilkanaście różnych odpowiedzi. Poniżej przedstawię wyniki studenta, Michała Marciniaka. Porównania dotyczą seryjnych wersji R (2.13.0 32bit) i SAS (9.2 32 bit). Wykonano je na Windowsie 7 procesor intel i5 i 4GB RAM.

Poniżej na trzech wykresach przedstawiono czasy wykonania regresji liniowej dla modelu z 10, 100, 1000 predyktorami oraz od 1tys do 100 mln wierszy. Dla R porównano czasy działania funkcji lm, lm.fit (odpada tworzenie model.frame), glm i glm.fit. Dla SASa procedury GENMOD, MIXED, GLM i REG.

 

Porównywane funkcje z pakietu R wykorzystują dekompozycje QR, procedury programu SAS pracują na macierzy wariancji-kowariancji zmiennych objaśnianych i objaśniających. Dla małych zbiorów danych funkcje R są szybsze, dla dużych przewagę ma SAS. W R najszybsza jest oczywiście funkcja lm.fit, wymaga ona jednak zakodowania zmiennych jakościowych wcześniej. R operuje na danych w przechowywanych pamięci więc wielkość danych na których możemy wykonać regresje jest ograniczona ilością posiadanego RAM. A w wersji 32bitowej również maksymalną ilością pamięci, którą można zaadresować dla jednego programu czyli 2GB dla Winows i 4GB dla Linuxa. W przypadku SASa nie mamy takiego ograniczenia, niezbędne dane doczytywane są na bieżąco z dysku.

Dwa komentarze dotyczące tych porównań. Gdyby użyta była wersja 64bit R to możnaby przetwarzać większe zbiory danych niż ww. 3mln wierszy. Wykonywanie regresji można znacznie przyśpieszyć instalując optymalizowaną dla procesora (lub wielowątkową) bibliotekę BLAS.

Kody użyte do generowania danych i przygotowania wykresów znajdują się w katalogu tutaj.

 

One thought on “Regresja liniowa w R vs SAS”

Dodaj komentarz

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