Rysujemy rozkład cen krok po kroku, część 2

Kontynuując temat z wczoraj, narysujemy rozkład cen mieszkania dla każdej z  dzielnic Warszawy.

Punktem wyjścia jest przygotowanie danych, wykonajmy pierwsze 32 linie tak jak w poprzednim wpisie.

Aby wyświetlić na rożnych panelach dane dla kolejnych dzielnic, wystarczy zmodyfikowac formułę na cenam2~data|dzielnica, oraz za zabiór danych wskazać mieszkaniaKWW2011Warszawa2.

Kolejne panele przedstawiają kolejne dzielnice, ale ich kolejność jest alfabetyczna. Taka sama jak kolejność poziomów zmiennej czynnikowej dzielnica. Nie zawsze kolejność alfabetyczna będzie najlepsza. Użyjemy funkcji reorder by zmienić kolejność poziomów tak by odpowiadała medianie ceny metra kwadratowego w danej dzielnicy. Kod generujący obrazek będzie taki sam, zmieni się tylko kolejność dzielnic.

Dla niektórych dzielnic jest mało punktów, co powoduje, że trudno mieć zaufanie do wyznaczonego trendu. Tym razem usuniemy te dzielnice, dla których nie ma przynajmniej 2000 wierszy. Kod generujący wykres jest bez zmian, usuwamy tylko obserwacje z dzielnic w których obserwacji było mniej niż 2k.

Rysujemy rozkład cen krok po kroku

Dostałem maila od Grzegorza L. z pytaniem jak zrobić krok po kroku wykresy z wpisów http://smarterpoland.pl/?p=169 i http://smarterpoland.pl/?p=172. W sumie cztery wykresy, każdy z nich postaram się opisać jak powstawał krok po kroku. Dziś zajmiemy się pierwszym z nich czyli zmiana cen mieszkań w dzielnicy Zoliborz w rożnych grupach wielkości mieszkań.

Zaczniemy od opisu jak dane były przygotowane a następnie pokażemy jak zrobić wykres krok po kroku. Skrypt R z wszystkimi komendami poniżej opisanymi znajduje się tutaj.

Część 1: Przygotowanie danych
Poniższy skrypt wczytuje do R dane odczytując je bezpośrednio z Internetu, następnie wybiera tylko dane dla Warszawy, dla dzielnicy Zoliborz. Wybiera tylko mieszkania o powierzchni do 300m2 i zgłoszone w ostatnich 3 latach. Następnie dodajemy do danych nowa zmienna opisującą wielkość mieszkania w jednej z trzech grup, małe do 49 m2, średnie od 49 do 68m2 i duże, o powierzchni ponad 68m2. Następnie dodatkowo wybieramy tylko podzbiór mieszkań z Zoliborza.

Część 2: Generowanie obrazków.

Ok, mamy przygotowane dane, teraz czas na zrobienie rysunku. Zaczniemy od prostego użycia funkcji xyplot{lattice}.

Miło ze strony funkcji xyplot(), że jest w stanie narysować na osi OX zmienna typu Date, ale sam wykres nie powala na kolana.
Za bardzo w oczy rzucają się punkty, których jest tak dużo że nic ciekawego nie widać. Zmniejszymy więc wielkość punktów zaznaczając je jednopikselową kropka (pch=”.”), dodamy linie pomocnicze siatki i wygładzoną linię trendu (type=”g” i “smooth”).

Już trochę lepiej, ale wciąż niewiele widać. Skala OY jest liniowa a dla prawoskośnych zmiennych dobrym pomysłem jest skala logarytmiczna. Dodajemy argument scales, który pozwala na zmianę osi OY na logarytmiczną.

Co nam się nie podoba tym razem? Wiele rzeczy. Po pierwsze przydała by się legenda. Dodamy ją argumentem auto.key, przy okazji określimy gdzie i jak ma być legenda rysowana, choć wcale nie musimy tego określać, wystarczyłoby auto.key=T. Druga rzecz to widoczność linii trendu w każdej z grup. Są mało widoczne z uwagi na grubość linii i z uwagi na duży rozstrzał na osi OY. Zmienimy i to i to, podamy grubość linii lwd=3 i ustalimy zakres zmienności na osi OY na 6-16k/m2. ostatnia poważna zmienna będzie dotyczyła znaczników na osi OY. Poprzednio wyglądały one słabo, jakieś potęgi 10 (ile to 10^4.2?), tym razem jawnie wskażemy w którym punktach mają pojawiać się znaczniki osi podając argument at.

Wykres nabiera kształtów. Nadpiszemy teraz funkcję rysującą panel, w taki sposób by dodatkowo rysować trend wyznaczony metodą regresji liniowej. Rysujemy go na czarno przerywaną linią wykorzystując funkcję panel.xyplot().

Czas na ostatnie modyfikacje. Co zmienimy? Po pierwsze punkty w legendzie są rysowane pustymi okręgami, a lepiej wyglądać będą wypełnione. Poniżej używam funkcji trellis.par.set() by o zmienić.
Po drugie, porzednie linie pomocnicze siatki nie były rysowane w tych samych miejscach co znaczniki na osi OY, usuwam więc argument type=”g” a zamiast tego w funkcji rysującej panel ręcznie dorysowuje linie pomocnicze w odpowiednich miejscach i pionowo i poziomo funkcją panel.abline(). Po trzecie zmieniam sposób rysowania punktów. Używam do tego funkcji panel.xyplot() z type=”p” i cex=1/4 dzięki czemu każda oferta sprzedaży jest zaznaczona jednym niewielkim szarym punktem.

I koniec.

Jeszcze mała autoreklama. Więcej o pakiecie lattice można przeczytać w drugim wydaniu ,,Przewodnika po pakiecie R” wydanego przez wydawnictwo GiS w tym roku (jeden podrozdział dostępny w Internecie) lub w książce Lattice Multivariate Data Visualization with R, w całości poświęconej temu pakietowi (zobacz tutaj). Oczywiście można też znaleźć sporo informacji korzystając po prostu z googla.

Zmiany zamożności Polaków na kolorowo

Trzy dni temu pisaliśmy o tym jak zmienia się zamożność gospodarstw badanych w ramach Diagnozy Społecznej (ponad 20 tys gospodarstw).
Generalny wniosek jest taki, że coraz więcej gospodarstw domowych poprawiło swój standard przez ostatnie 6 lat (porównywaliśmy wyniki z lat 2005 i 2011). Zobaczmy jak ta sytuacja wygląda w rożnych województwach.
Na poniższych wykresach wykonamy analizę gradacyjną, kolorami zaznaczając wyniki różnych województw.


Aby było czytelniej wybraliśmy pięć województw, dla których wyniki były ciekawe. Są to województwa Zachodni-pomorskie, Mazowieckie, Dolnośląskie, Lubuskie i Świętokrzyskie. Etykiety zamiast przy punktach zostały umieszczone w prawej dolnej legendzie. Jak czytać te wykresy? Ponieważ odpowiedzi są w skali uporządkowanej możemy interpretować bezpośrednio położenie k-tego punktu,  anie tylko ścieżkę do niego prowadzącą (jak na poprzednich przykładach).
Etykieta 5 oznacza, że wystarcza tylko na najtańsze jedzenie, ubranie, opłaty, kredyt. Ponieważ na wykresie współrzędne punktów to skumulowane częstości dla danego i niższych poziomów, więc współrzędne punktów z etykietą 5 oznaczają frakcję osób, którym starcza tylko na najtańsze jedzenie, kredyt, ubrania lub i na to nie. W województwie zachodnio-pomorskim w roku 2005 takich osób było około 40% (współrzędna OX brązowej 5), ale w roku 2011 było już takich osób niewiele ponad 20%. Praktycznie w każdym z narysowanych województw współrzędna OY dla cyfry 7 to 80%, co oznacza, że w roku 2011 80% gospodarstw w tych województwach deklarowało, że muszą żyć oszczędnie, bardzo oszczędnie a czasem i to nie wystarcza. W roku 2005 procent takich deklaracji był wyższy w każdym z województw, najwięcej spadł w Świętokrzyskim z około 90%.

Im dalej punkt od przekątnej tym większa zmiana do tego poziomu. Przykładowo różowa 6 ilustruje, że w województwie Lubuskim osób które żyją bardzo oszczędnie a i to czasem nie starcza było ponad 60% w roku 2005 a w 6 lat później było ich już tylko około 40%.

Mniejsze zmiany dotknęły województw Mazowieckiego i Dolnośląskiego.

Na zakończenie wykres dla wszystkich województw, dosyć gęsty, 16 krzywych zachodzi na sobie co utrudnia odcyfrowywanie wyników. W każdym województwie krzywa jest w większości pod przekątną co znaczy, że jest raczej lepiej niż przed 6 laty.

 

Mapa wartości samochodów

Wczoraj graficznie przedstawialiśmy jak wygląda rozkład cen w zależności od roku produkcji. Co ciekawe w skali logliniowej zależność pomiędzy ceną a rokiem produkcji jest bardzo bliska liniowej dla wielu marek. Zakładając zależność liniową możemy wyznaczyć dwie liczby dla każdej marki. Średnią procentową zmianę ceny w ciągu roku i orientacyjną średnią cenę auta wyprodukowanego w roku 2006. Rok 2006 został wybrany by móc porównywać ceny różnych marek ze sobą, oczekiwaną cenę w roku 2006 wyznaczmy bez względu na to czy dany samochód był produkowany w tym roku czy nie (wykorzystamy liniową zależność aby oszacować średnią cenę w roku 2006).
Na poniższej mapie zaznaczono każdą markę w układzie dwóch współrzędnych, utraty wartości w ciągu roku oraz orientacyjnej ceny w roku 2006. Należy zaznaczyć, że wartość procentowa na osi OX to różnica pomiędzy średnimi cenami dwóch kolejnych roczników, a nie różnica pomiędzy ceną danego rocznika w dwóch kolejnych latach. Tą drugą wartość będzie można ustalić za rok.

 

Dodatkowo na tej mapie wielkością punktu zaznaczono jak wiele aut było wykorzystanych do oszacowania obu wskaźników (cztery wielkości do 100, od 100 do 200, od 200 do 500, powyżej 500) oraz z jakiego kraju pochodzi dana marka. Jeżeli chodzi o pochodzenie to z uwagi na przejęcia oraz przenoszenie produkcji do innych krajów należy tę informację traktować z dystansem.

To co ciekawego widać na tej mapie to że są auta tanie, które nie tracą wiele z czasem na wartości (np Fiat Uno), drogie, które też dużo na wartości tracą (Porche Cayenne), tanie które dużo tracą (Dacia Logan), drogie które mało tracą (Volkswagen Bora) i całe spektrum innych możliwości.

Aby łatwiej ten wykres się analizowało możemy dokonać zbliżenia

Volkswagen Passat traci średni 16% na rok i kosztuje z roku 2006 około 40tys. W otoczeniu znaleźć można np Toyote Corolle Verso. Na prawo znajdziemy Forda S-Maxa o podobnej cenie ale za to znacznie większej utracie na wartości.

Zobaczmy co się stanie jeżeli zagregujemy modele z tej samej marki.

 

Otrzymujemy mapę marek, im bardziej na lewo tej mapy tym mniejsza utrata na wartości im niżej tym tańsze auta.

 

 

 

 

 

 

 

 

Zakup kontrolowany, czyli wybieramy auto dla rodziny

Od prawie czterech lat szukam rodzinnego auta. Ostatnio rozmawiałem ze znajomym, który był zdziwiony dlaczego to taki trudny wybór. Jak to stwierdził wystarczy wprowadzić dane do komputera, określić funkcje celu i wybrać najlepszą opcję. Hmmm, może i tak.

Mamy już dane zebrane  z serwisu otomoto.pl, więc spróbujmy zobaczyć jak wyglądają rozkłady cen w czasie różnych marek. Informacje o zmianach cen znaleźć można na wielu serwisach, np. autocentrum.pl, ale tutaj przedstawimy te zmiany lepiej i czytelniej. Tak jest, konkurujemy z eutotax.

Aktualnie wysoko na liście rozważanych marek stoi Passat. Poniższe wykresy będą wykonane dla prawie każdej marki obecnej w zbiorze danych cenyAut2011. Ale dla ustalenia uwagi zobaczmy  wygląda cena Passata i jak ta cena zależy od roku produkcji (oś OX), pojemności i typu silnika (poszczególne panele) oraz wersji marki (rożne kolory kropek).

Na panelu po prawej stronie podana jest nazwa marki, liczba ofert sprzedaży aut tej marki, oraz informacja o rozkładzie cen dla aut produkowanych w danym roczniku. Każda niebieska kropka to jedna oferta sprzedaży. Czerwona kropka oznacza medianę cen, czerwone kreski oznaczają odpowiednio kwantyle 5-25% i 75-95%. Ceny są w skali logarytmicznej. Na wykresie mamy tylko dane o autach używanych, w tej kategorii mediany cen układają się prawie idealnie w linii prostej, co odpowiada stałej procentowej zmianie w cenie. Tę informację jeszcze wykorzystamy.

Z wykresów widzimy, że passaty  w dieslu z silnikiem 1900cm3 są dosyć popularne. 5 lat to jeszcze wersja B6. Zobaczmy teraz jak wyglądają podobne wykresy dla konkurencji.

 

Obrazki dla innych marek można znaleźć w katalogu tutaj.

Lub korzystając z poniższej listy marek, dla której zebrano takie wykresy.
Alfa Romeo 147, Alfa Romeo 156, Alfa Romeo 159, Alfa Romeo 166, Alfa Romeo GT,
Audi A2, Audi A3, Audi A4, Audi A5, Audi A6, Audi A6 Allroad, Audi A7, Audi A8, Audi Q5, Audi Q7, Audi TT,
BMW 118, BMW 316, BMW 318, BMW 320, BMW 325, BMW 330, BMW 520, BMW 525, BMW 530, BMW 535, BMW 730, BMW 740, BMW X3, BMW X5, BMW X6,
Chevrolet Aveo, Chevrolet Lacetti,
Chrysler 300C, Chrysler Grand Voyager, Chrysler Pacifica, Chrysler PT Cruiser, Chrysler Sebring, Chrysler Town & Country, Chrysler Voyager,
Citroen Berlingo, Citroen C1, Citroen C2, Citroen C3, Citroen C4, Citroen C4 Picasso, Citroen C5, Citroen C8, Citroen Saxo, Citroen Xsara, Citroen Xsara Picasso,
Dacia Logan,
Daewoo Lanos, Daewoo Matiz, Daewoo Nubira,
Dodge Grand Caravan, Dodge RAM,
Fiat 500, Fiat Brava, Fiat Bravo, Fiat Croma, Fiat Doblo, Fiat Ducato, Fiat Grande Punto, Fiat Marea, Fiat Multipla, Fiat Palio, Fiat Panda, Fiat Punto, Fiat Seicento, Fiat Stilo, Fiat Uno,
Ford C-MAX, Ford Fiesta, Ford Focus, Ford Focus C-Max, Ford Fusion, Ford Galaxy, Ford KA, Ford Mondeo, Ford Mustang, Ford S-Max, Ford Transit,
Honda Accord, Honda Civic, Honda CR-V, Honda Jazz,
Hyundai Accent, Hyundai Coupe, Hyundai Getz, Hyundai i30, Hyundai Matrix, Hyundai Santa Fe, Hyundai Tucson,
Jaguar S-Type, Jaguar X-Type,
Jeep Cherokee, Jeep Grand Cherokee,
Kia Carens, Kia Carnival, Kia Cee’d, Kia Picanto, Kia Rio, Kia Sorento, Kia Sportage,
Lancia Lybra,
Land Rover Discovery, Land Rover Freelander, Land Rover Range Rover,
Lincoln Town Car,
Mazda 2, Mazda 3, Mazda 323, Mazda 323F, Mazda 5, Mazda 6, Mazda 626, Mazda CX-7, Mazda MPV, Mazda Premacy, Mazda RX-8,
Mercedes-Benz A 140, Mercedes-Benz A 160, Mercedes-Benz A 170, Mercedes-Benz A 180, Mercedes-Benz B 180, Mercedes-Benz C 180, Mercedes-Benz C 200, Mercedes-Benz C 220, Mercedes-Benz CLK 200, Mercedes-Benz E 200, Mercedes-Benz E 220, Mercedes-Benz E 270, Mercedes-Benz E 280, Mercedes-Benz E 320, Mercedes-Benz E 350, Mercedes-Benz ML 270, Mercedes-Benz ML 320, Mercedes-Benz ML 350, Mercedes-Benz S 320, Mercedes-Benz S 350, Mercedes-Benz S 500, Mercedes-Benz SLK 200, Mercedes-Benz Sprinter, Mercedes-Benz Vito,
Mini Cooper,
Mitsubishi Carisma, Mitsubishi Colt, Mitsubishi Eclipse, Mitsubishi Galant, Mitsubishi L200, Mitsubishi Lancer, Mitsubishi Outlander, Mitsubishi Pajero, Mitsubishi Space Star,
Nissan Almera, Nissan Almera Tino, Nissan Micra, Nissan Navara, Nissan Note, Nissan Patrol, Nissan Primera, Nissan Qashqai, Nissan Terrano, Nissan X-Trail,
Opel Agila, Opel Astra, Opel Combo, Opel Corsa, Opel Frontera, Opel Insignia, Opel Meriva, Opel Omega, Opel Signum, Opel Tigra, Opel Vectra, Opel Vivaro, Opel Zafira,
Peugeot 106, Peugeot 107, Peugeot 206, Peugeot 206 CC, Peugeot 207, Peugeot 306, Peugeot 307, Peugeot 308, Peugeot 406, Peugeot 407, Peugeot 607, Peugeot 807,
Peugeot Partner,
Porsche 911, Porsche Cayenne,
Renault Clio, Renault Espace, Renault Grand Espace, Renault Grand Scenic, Renault Kangoo, Renault Laguna, Renault Megane, Renault Modus, Renault Scenic, Renault Thalia, Renault Trafic, Renault Twingo,
Renault Vel Satis,
Rover 25, Rover 45, Rover 75,
Saab 9-3, Saab 9-5,
Seat Alhambra, Seat Altea, Seat Arosa, Seat Cordoba, Seat Ibiza, Seat Leon, Seat Toledo,
Skoda Fabia, Skoda Felicia, Skoda Octavia, Skoda Roomster, Skoda Superb,
Smart Fortwo,
Subaru Forester, Subaru Impreza, Subaru Legacy,
Suzuki Grand Vitara, Suzuki Jimny, Suzuki Swift, Suzuki SX4,
Toyota Auris, Toyota Avensis, Toyota Aygo, Toyota Camry, Toyota Celica, Toyota Corolla, Toyota Corolla Verso, Toyota Land Cruiser, Toyota RAV-4, Toyota Yaris,
Volkswagen Bora, Volkswagen Caddy, Volkswagen Caravelle, Volkswagen Fox, Volkswagen Golf, Volkswagen Golf Plus, Volkswagen Jetta, Volkswagen Lupo, Volkswagen Multivan, Volkswagen New Beetle, Volkswagen Passat, Volkswagen Passat CC, Volkswagen Polo, Volkswagen Sharan, Volkswagen Tiguan, Volkswagen Touareg, Volkswagen Touran, Volkswagen Transporter,
Volvo C30, Volvo S40, Volvo S60, Volvo S80, Volvo V40, Volvo V50, Volvo V70, Volvo XC 70, Volvo XC 90

Podkręcone wykresy

Trafiłem dziś na taki wykres:

źródło: Bankier.pl,artykuł http://www.bankier.pl/wiadomosc/Gospodarcze-osiagniecia-partii-politycznych-2417944.html

Czytaj dalej Podkręcone wykresy

Przyjąć czy odrzucić?

Dzieci śpią, czas przyjrzeć się jeszcze raz danym o głosowaniu posłów. Pewnie ostatni raz  przed ciszą wyborczą.

Dwa tematy są na taśmie, pierwszy to frekwencja posłów na głosowaniach a drugi to badanie koalicji i sojuszy w sejmie.

Zacznijmy od frekwencji. Na podstawie zbioru danych poslowieMeta zobaczmy na jakim procencie głosowań dany poseł był nieobecny. Wyniki przedstawimy w rozbiciu na ostatnią deklarowaną przez posła partię. Nazwiska i imiona posłów których nie było na ponad 42% głosowań wpiszemy na rysunku.

Nie jest tak źle, z niewielkimi wyjątkami posłowie uczestniczą w głosowaniach często. Najsumienniejsi są posłowie PO, którzy jak widać nie biorą w tym temacie przykładu z premiera.

Druga wizualizacja wymaga większego opisu, zacznijmy jednak od jej wklejenia.

Na powyższym wykresie są dwie panele, zacznijmy od omówienia górnego. Z 6583 głosowań większość dotyczyła przyjęcia lub odrzucenia jakiejś ustawy, poprawki, wniosku. Dokładnie rzecz biorąc 36.8% głosowań dotyczyło odrzucenia czegoś, 61.7% dotyczyło przyjęcia czegoś. Zobaczmy jak w czasie zmieniała się liczba głosowań za przyjęciem lub za odrzuceniem czegoś. Tak więc na osi OX mamy czas w którym odbyło się głosowanie. Osobno analizujemy głosowania za przyjęciem osobno za odrzuceniem. Znak x oznacza że danego dnia głosowano na dany temat a wielkość tego krzyżyka oznacza ile było głosowań tego dnia. Rekord padł 5 grudnia 2008 roku gdy to głosowano za przyjęciem 379 rzeczy i odrzuceniem 44 rzeczy. Grudzień poprzedniego roku był również pracowity 20 grudnia 2007 głosowano za przyjęciem 206 rzeczy. Legenda opisująca jak wielkość krzyżyka przełożyć na liczbę głosowań jest na górze. Szarymi krzywymi oznaczono estymatory jądrowe gęstości przedstawiające okresy szczególnie aktywne pod względem głosowań. Czerwona przerywana linia pokazuje których głosowań jest więcej, czy za przyjęciem czy za odrzuceniem.

Na dole tego wykresu pokazano koalicje. Koalicje wyznaczono następująco. Dla każdego miesiąca sprawdzono w których głosowaniach nie było zgodności pomiędzy posłami, czyli w których głosowaniach przynajmniej 10% posłów zagłosowało inaczej niż reszta. Bazując tylko na tych głosowaniach sprawdzono dla każdego głosowania i każdej partii czy posłowie tej partii głosowali podobnie. Dalej analizowane są tylko partie, które głosowały spójnie w głosowaniach gdzie pojawiała się różnica głosów. W ramach wybranego miesiąca liczona jest korelacja Pearsonowska pomiędzy głosami partii. Na bazie tej korelacji wyznaczany jest dendrogram który jest wykorzystywany do podziału partii na dwie grupy. I to sa grupy które są przedstawione na dolnym panelu.

Podsumowując. Dla każdego miesiąca wyznaczono partie i głosowania takie, że w ramach partii głosy były podobne, ale pomiędzy partiami się różniły. Następnie wykonano hierarchiczną analizę skupisk by określić które partie podobnie głosowały w danym roku. Uff. Zaskakujące jest, że jeżeli była duża różnica głosów w skali miesiąca to PiS i PO głosowali najczęściej różnie. To jest tym dziwniejsze, że programy tych partii nie różnią się aż tak diametralnie.

 

Zbiór danych opisujący głosowania posłów VI kadencji

Dziś bardzo smakowity zbiór danych. Wybory za kilka dni więc mam nadzieje, że uda się przed wyborami przygotować jeszcze jakąś wizualizacje.

Ale od początku. Kilka dni temu znalazłem blog  Januarego Weinera na którym autor umieścił interesująca analizę danych o głosowaniach posłów VI kadencji. Link do tego wpisu jest tutaj: http://biokompost.wordpress.com/2011/10/01/statystyczna-mapa-sejmu/. Znajdziecie na tym blogu kilka interesujących wizualizacji, głównie badających na ile podobnie głosowali rożni posłowie. Jest też filmik pokazujący zmiany w czasie, wszystko z użyciem podstawowych technik redukcji wymiaru więc warto przeczytać.

Zapytałem Januarego o te dane i wczoraj je dostałem. Mamy więc pierwszy zbiór danych, którego sam nie zebrałem, mam nadzieje że to pierwszy z wielu. Dane są jak już wspomniałem super ciekawe, zostały wyciągnięte ze strony orka.sejm.gov.pl a następnie wyczyszczone. Skrypt R wczytujący te dane znajdziecie tutaj. Katalog z danymi w postaci tekstowej znajdziecie tutaj. Wizualizacje dotyczące tego zbioru pojawią się wkrótce.

Btw: w rozwiniętych demokracjach rząd udostępnia dane dotyczące głosowań w postaci łatwo dostępnej (czyli nie kolekcja pdf’ów), dotyczące prac nad ustawami it. Dane udostępnia i wykonuje jakieś wstępne analizy, np: http://www.govtrack.us/congress/repstats.xpd.

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.

 

Ranking uczelni i paretooptymalność

Paretooptymalność oznacza, że nie ma innych obiektów lepszych w każdym rozważanym sensie. Poza tym to ładne słowo, jedno z niewielu których jeszcze nie zapomniałem ze wstępu do teorii gier. Front paretooptymalny to zbiór obiektów, takich że od żadnego z nich nie istnieje obiekt jednostajnie lepszy. Obiekty z frontu są nieporównywalne.

Tak tez pewnie jest z uczelniami, jedne są lepsze jeżeli chodzi o współpracę z przemysłem, inne mogą mieć więcej publikacji, jeszcze inne mogą mieć lepszy PR. Na kilku rysunkach będę chciał pokazać w jakich kategoriach które uczelnie są wysoko. W zbiorze danych o rankingu z Rzeczpospolitej mamy 32 atrybuty, to za dużo a techniki skalowania nie doprowadziły do niczego co byłoby łatwe w interpretowaniu. Dlatego poniżej te 32 atrybuty zamieniłem w 6 atrybutów odpowiadających 6 grupom atrybutów z oryginalnego rankingu. Nowy atrybut to suma punktów z atrybutów dla danej grupy, tz. atrybut prestiż to suma punktów za preferencje pracodawców, ocenę kadry akademickiej, uznanie międzynarodowe i wybór olimpijczyków. Reszta podobnie. Na każdym z poniższych wykresów pokazywane jest 90 uczelni w układzie opisanym przez dwa atrybuty. Każdy punkt odpowiada jednej uczelni. 10 uczelni które mają najwyższą sumę atrybutów jest oznaczonych przez nazwy a kropki odpowiadające tym uczelnią maja ciemniejsze kolory. Kolory oznaczają typ uczelni (wyróżniłem 6 typów, w tym uniwersytety, politechniki itp). Jasny pomarańcz to politechnika która nie jest jedną z 10 najlepszych uczelni w danym zestawieniu, ciemno pomarańczowy to politechnika która znalazła się w 10 najlepszych w danym zestawieniu. Obie osie są w skali pierwiastkowej bo tak lepiej wyglądają.

Jeżeli mamy 6 atrybutów to wszystkich par jest 30 (kolejność ma znaczenie bo mózg inaczej interpretuje składowa pozioma a inaczej pionową). Wykresy dla wszystkich par są w katalogu tutaj. Poniżej przedstawiam 6 wybranych najciekawszych wykresów. Skrypt użyty do wygenerowania tych wykresów jest tutaj. Informacja, które charakterystyki agregują poszczególne grupy można odczytać też z tego wykresu.

Efektywność naukowa a innowacyjność.

 

Żółte kropki na tym wykresie oznaczają uniwersytety medyczne. Są one oznaczone jako uczelnie o bardzo wysokiej efektywności naukowej ale bardzo niskiej innowacyjności. Liter rankingu Rzeczpospolitej (uniwersytet Warszawski) nie jest najlepszy ani pod względem efektywności naukowej ani pod względem innowacyjności. UJ bije go w obu przypadkach. Jeżeli chodzi o innowacyjność to najlepsze są politechniki (Wroclawska, Warszawska, Gdanska, Poznanska) stojące tuz za AGH. Ale do tego jeszcze wrócimy.

Umiędzynarodowienie a potencjał naukowy.

 

Umiędzynarodowienie nie jest jakoś szczególnie silnie skorelowane z potencjałem naukowym. Czołówka najbardziej umiędzynarodowionych uczelni zawiera i te o wysokim potencjale naukowym (UW, UJ, swoją drogą termin potencjał naukowy brzmi podejrzanie) i te o wynikach gorszych niż średnia w tej kategorii (Akademia Koźmińskiego).

 

Warunki studiowania a potencjał naukowy

Zależność pomiędzy warunkami studiowania a potencjałem naukowym jest ciekawa. Te dwie cechy wydają się ze sobą korelować, ale jest to wynikiem obecności dwóch skupisk (paradoks Simpsona). Uczelnie o przeciętnych lub niskich warunkach studiowania i przeciętnym lub niskim potencjale naukowym (w tej grupie nie widać korelacji) i grupie kilku uczelnie w którym oba te współczynniki są wysokie.

Btw: W kategorii warunki studiowania wygrywa UAM. Tam jeszcze nie pracowałem, ale proszę śmiało o przesyłanie ofert na gmaila.

Potencjał naukowy a prestiż

Słowo prestiż jest już tak nadużywane, że trudno nawet powiedzieć co to oznacza w kontekście uczelni wyższej. Jest to jeden z najbardziej skośnych charakterystyk, tylko 7 uczelni ma ten współczynnik powyżej 100 a zdecydowana większość ma ten współczynnik poniżej 50.

Ciekawym eksperymentem będzie poprowadzić linię regresji na powyższym rysunku i zobaczyć prestiż których uczelni przewyższa ,,rzeczywisty” potencjał naukowy (PR robi swoje) a dla których uczelni jest on zaniżony.

Innowacyjność a potencjał naukowy

 

Podobnie wracamy do innowacyjności. Moim zdaniem jest to jedna z ważniejszych wartości wartych promowania. Potrzebujemy jak ryba wody kreatywnych rozwiązań, pomysłów, odważnych działań, zamiast walenia pałkami po łapach lub głowach tych co się wychylają.

Na tym wykresie ciekawie rozkładają się trzy grupy punktów. Niebieskie kropki oznaczają akademie (wojskowe, rolnicze, humanistyczne), za wyjątkiem AGH wszystkie pozostałe akademie mają niską innowacyjność i niski potencjał naukowy. Pomarańczowe kropki to politechniki. Większość z nich cechuje się wysoką innowacyjnością i potencjałem naukowym średnio trochę lepszym niż średnia (Maturzyści, idźcie studiować na Politechniki, potrzebujemy w kraju więcej inżynierów). Fioletowe kropki to uniwersytety, te charakteryzują się wysokim potencjałem naukowym ale innowacyjność jest tylko trochę lepsza niż średnia.