1. Wczytywanie danych do programu R Otwórz R. Zmień katalog roboczy za pomocą File/Change Dir. Wczytaj plik przypisując go obiektowi o nazwie students: > students<-read.table( students.txt, header=t, sep= \t ) Sprawdź, czy R prawidłowo wczytał dane: > students height shoesize gender population 1 181 44 male berlin 2 160 38 female berlin 3 174 42 female berlin 4 170 43 male berlin 5 172 43 male berlin 6 165 39 female berlin 7 161 38 female berlin 8 167 38 female warsaw 9 164 39 female warsaw 10 166 38 female warsaw 11 162 37 female warsaw 12 158 36 female warsaw 13 175 42 male warsaw 14 181 44 male warsaw 15 180 43 male warsaw 16 177 43 male warsaw 17 173 41 male warsaw Można też wydrukować same nazwy kolumn (czasem cała tabela nie mieści się na ekranie i wtedy może to być pomocne): > names(students) [1] "height" "shoesize" "gender" "population" 2. Przygotowanie danych do analizy Do poszczególnych kolumn można się odwoływać stosując następująca składnię: najpierw nazwa obiektu, następnie znak $ i nazwa kolumny: Students$height Jest to dosyć pracochłonne, a dane mogą zostać przydzielone wg kolumn do odrębnych zmiennych. Przygotujmy więc tak dane, aby rozdzielić je wg kolumn: > attach(students) Teraz można odwoływać się do poszczególnych kolumn poprzez ich nagłówki: > height [1] 181 160 174 170 172 165 161 167 164 166 162 158 175 181 180 177 173 3. Prosta statystyka Jaki jest średni wzrost i rozmiar buta? > mean(height) [1] 169.7647 1
> mean(shoesize) [1] 40.47059 A jakie są odchylenia standardowe? > sd(height) [1] 7.578996 > sd(shoesize) [1] 2.695312 Jaki jest rozkład płci i miejsca pochodzenia (ile jest obserwacji w każdej grupie)? > table(gender) gender female male 9 8 > table(population) population berlin warsaw 7 10 Komenda table może też być też wykorzystywana do tworzenia tabel dwudzielczych: > table(gender,population) population gender berlin warsaw female 4 5 male 3 5 4. Użyteczne wykresy > hist(height) Powyższa funkcja zwraca histogram rozkładu cechy height. Jest to rozkład dla całej badanej populacji. Ale czy istnieje różnica wzrostu w zależności od miejsca pochodzenia? Zmienna height jest dzielona na dwie grupy przy wykorzystaniu zmiennej gender i tworzone są oddzielne wykresy ramkowe dla tych dwóch grup: > boxplot(height~gender) A więc jest duża różnica we wzroście w zależności od płci. Czy to samo dotyczy miejsca pochodzenia? > boxplot (height ~ population) Jak powiązane są ze sobą wysokość i rozmiar buta? Odpowiedź na to pytanie ilustruje wykres rozrzutu: > plot(height, shoesize) Zaznaczmy na tym samym wykresie płeć różnymi kolorami (pierwszy kolor jest zawsze czarny, a kolejne numery wskazują inne kolory): > plot(height, shoesize, col=as.numeric(gender)) Płeć jest automatycznie kodowana jako zmienna numeryczna w powyższym poleceniu rysowania 2
Skąd wiadomo, które obserwacje są kodowane jako 1, a które jako 2? Możemy porównać oryginalną zmienną i zmienną przekodowaną. Zmienne są łączone wierszami dzięki następującemu poleceniu: > data.frame(gender, as.numeric(gender)) gender as.numeric.gender. 1 male 2 2 female 1 3 female 1 4 male 2 5 male 2 6 female 1 7 female 1 8 female 1 9 female 1 10 female 1 11 female 1 12 female 1 13 male 2 14 male 2 15 male 2 16 male 2 17 male 2 Wynika stąd, że mężczyźni otrzymali kod 2, a kobiety 1. Tak więc, na wykresie kobietom odpowiada kolor czarny, a mężczyznom czerwony. Możemy też dodać do wykresu miejsce pochodzenia stosując odrębny sposób oznaczeń (argument pch): > plot(height, shoesize, col=as.numeric(gender), pch=as.numeric(population)) Symbole rozpoczynają się od kółka, któremu odpowiada 1. Kolejne liczby dają różne symbole. Której populacji odpowiadają trójkąty? > data.frame(population, as.numeric(population)) population as.numeric.population. 1 berlin 1 2 berlin 1 3 berlin 1 4 berlin 1 5 berlin 1 6 berlin 1 7 berlin 1 8 warsaw 2 9 warsaw 2 10 warsaw 2 11 warsaw 2 12 warsaw 2 13 warsaw 2 14 warsaw 2 15 warsaw 2 16 warsaw 2 17 warsaw 2 3
Można też dodać legendę do wykresu po jego narysowaniu: > plot(height, shoesize, col=as.numeric(gender), pch=as.numeric(population)) > legend(x="bottomright", legend=c("male berlin", "female berlin","male warsaw", "female warsaw"), pch=c(2,1,2,1),col=c(1,1,2,2)) Najpierw podawana jest pozycja legendy (argument x). Argument legend podaje, jaki tekst ma się pojawić, argumenty pch i col określają szczególny dot. symboli i ich kolorów. Symbole i kolory są podawane w takiej samej kolejności jak tekst. 5. Przekodowywanie zmiennych Zmienne płeć i populacja są faktorami. Czasem istnieje konieczność zamiany faktora na wektor (np. w celu przeprowadzenia analiz statystycznych): > gen<-as.numeric(gender) > pop<-as.numeric(population) > class(gen) > class(pop) Można też tego dokonać stosujące bardziej ogólną komendę ifelse: > gen<-ifelse(gender=="male", 1, 2) > pop<-ifelse(population=="berlin", 1, 2) > class(gen) > class(pop) 6. Tworzenie nowego zbioru danych Utwórzmy nowy zbiór danych ze zmiennych height, shoesize, gen i pop: > students.new<-data.frame(height, shoesize, gen, pop) > students.new 1 181 44 1 1 2 160 38 2 1 3 174 42 2 1 4 170 43 1 1 5 172 43 1 1 6 165 39 2 1 7 161 38 2 1 8 167 38 2 2 9 164 39 2 2 10 166 38 2 2 11 162 37 2 2 12 158 36 2 2 13 175 42 1 2 14 181 44 1 2 15 180 43 1 2 16 177 43 1 2 17 173 41 1 2 4
> class(students.new) [1] "data.frame" Zamknijmy poprzedni zbiór danych i otwórzmy nowy: > detach(students) > attach(students.new) 7. Tworzenie podzbioru danych Utwórzmy dwa podzbiory danych ze zbioru students.new. Podzielmy go ze względu na płeć: > which(gen==1) [1] 1 4 5 13 14 15 16 17 Na podstawie tego wybierzmy za pomocą indeksów odpowiedni podzbiór (weźmiemy tylko wiersze, dla których płeć jest męska): > students.berlin<-students.new[which(gen==1),] > students.berlin 1 181 44 1 1 4 170 43 1 1 5 172 43 1 1 13 175 42 1 2 14 181 44 1 2 15 180 43 1 2 16 177 43 1 2 17 173 41 1 2 Utwórzmy podobny podzbiór dla kobiet: > students.berlin.females<-students.new[which(gen==2),] > students.berlin.females 2 160 38 2 1 3 174 42 2 1 6 165 39 2 1 7 161 38 2 1 8 167 38 2 2 9 164 39 2 2 10 166 38 2 2 11 162 37 2 2 12 158 36 2 2 Czasem zależy nam na podziale zbioru danych na podzbiory wg zmiennej ciągłej, takiej jak np. wzrost. Zwykle stosuje się w tym celu medianę tej zmiennej. Utwórzmy dwa podzbiory danych dla osób o wzroście powyżej i poniżej mediany. > median(height) [1] 170 > students.short<- students.new[which(height<=median(height) ),] > students.short 5
2 160 38 2 1 4 170 43 1 1 6 165 39 2 1 7 161 38 2 1 8 167 38 2 2 9 164 39 2 2 10 166 38 2 2 11 162 37 2 2 12 158 36 2 2 > students.long<- students.new[which(height>median(height)), ] > students.long 1 181 44 1 1 3 174 42 2 1 5 172 43 1 1 13 175 42 1 2 14 181 44 1 2 15 180 43 1 2 16 177 43 1 2 17 173 41 1 2 8. Kończenie pracy w R Aby zakończyć wpisujemy: > q() R pyta się wówczas, czy zapisać przestrzeń roboczą, czy nie. Jest to zwykle dobry pomysł. Można wtedy powrócić do przeprowadzanej analizy. Plik ma rozszerzenie.rdata. Wchodzimy w File- >Load Workspace i wybieramy odpowiedni plik. 6