Wprowadzenie do wykorzystania R`a

Transkrypt

Wprowadzenie do wykorzystania R`a
Konspekt do zaj¦¢: Statystyczne metody analizy
danych
dr Agnieszka Nowak-Brzezi«ska
14 pa¹dziernika 2009
0.1
Wprowadzenie
Operator przypisania to < −, który mo»e by¢ te» zast¡piony = lub − >. Gdy
chcemy do zmiennej a przypisa¢ warto±¢ 5 u»yjemy nast¦puj¡cego polecenia:
Jak wida¢, gdy u»yjemy instrukcji warunkowej:
if (warunek) print ("tekst")
efekt b¦dzie nast¦puj¡cy: Operatory mo»na ª¡czy¢, przez co mo»liwe jest i
takie polecenie:
ha = b < −2 + 2− > c, po wykonaniu którego wszystkie zmienne: a,b oraz
c b¦d¡ miaªy t¦ sam¡ warto±¢, czyli 4. Oczywi±cie mo»na stosowa¢ równie»
znacznie bardziej skomplikowane wyra»enia, jak na poni»szym rysunku.
1
0.2
Typy obiektów
Uwaga !!! Wszystko w R jest obiektem. W zwi¡zku z tym, za obiekt
uznamy nast¦puj¡ce typy danych:
• wektor
• lista
• tablica
• macierz
• tabela danych (ang. data frame)
0.2.1
Wektor
Wektor nale»y rozumie¢ jako ci¡g liczb, ªa«cuchów tekstowych lub warto±ci
logicznych. Wektory tworzymy za pomoc¡ konstruktora - funkcji c(elementy)
np: wektor < −c(3, 4, 2, 4, 5, 7), gdzie kolejne elementy wektora o nazwie
wektor s¡ indeksowane od warto±ci 1, i dost¦p do poszczególnych elementów
uzyskujemy za pomoc¡ selektora []. Dla wektora o elementach 3, 4, 2, 4, 5, 7
pisz¡c wektor[3] uzyskamy warto±¢ 2 za± wektor[5]: 5.
Inne konstruktory wektora
:
Za pomoc¡ konstrukcji < poczatek >:< koniec > mo»emy tak»e tworzy¢
wektory, z tym, »e wektor taki b¦dzie bardziej ci¡giem arytmetycznym utworzonym przez elementy znajdujace si¦ w takim ci¡gu o zadanym pocz¡tku
i ko«cu.
> wektorB < −2 : 8
seq
seq dziaªa tak jak : lecz pozwala tak»e na ustalenie innej ni» +1 lub −1 krok.
Wiadomo, »e wektor < −seq(3 : 6) utworzy wektor z elementów: 3, 4, 5, 6
gdzie kolejne elementy mi¦dzy 3 a 6 s¡ tworzone z ró»nic¡ 1. U»ywaj¡c instrukcji: wektor < −seq(2, 23, 5), otrzymamy wektor z elementów:2, 7, 12, 17, 22.
2
rep
rep - zwraca wektor utworzony przez replikacj¦ elementów pierwszego argumentu. np. wektorA < −rep(2, 10) utworzy wektor 10 elementów (2). Z
kolei wektorB < −rep(c(2, 3, 6), 3) utworzy wektor 2, 3, 6, 2, 3, 6, 2, 3, 6, gdy»
powtórzy elementy 2, 3, 6 trzy razy. Dªugo±¢ wektora zmierzymy funkcj¡
length().
sample
Jeszcze innym konstrukturem wektora jest sample, który tworzy wektor
losowych liczby z okre±lonego przedziaªu i o zadanej dªugo±ci. Istnieje mo»liwo±¢ sterowania tym, czy losowe liczby mog¡ si¦ powtarza¢ czy te» nie. I tak,
standardowo: nie mog¡, je±li za± chcemy dopuszcza¢ powtórzenia, wystarczy
jako 3 argument przy funkcji sample() doda¢ informacj¦: rep=TRUE. Jak
wida¢ na rysunku udaªo si¦ wylosowa¢ z przedziaªu od 1 do 20, 5 liczb, w
których liczba 20 si¦ powtórzyªa.
3
0.2.2
Struktury (factor)
Do reprezentacji zmiennej nominalnej ze zdeniowanymi kategoriami sªu»y
funkcja factor. Mo»emy traktowa¢ j¡ jako funkcj¦ pozwalaj¡c¡ deniowa¢
4
typy wyliczeniowe. Zrzut ekranu przedstawia prób¦ zdeniowania zmiennej
nominalnej z warto±ciami: 2, 1 i 5 przy zdeniowanych kategoriach: 1,2,3,4
oraz 5. Mo»emy teraz zmieni¢ nazwy kategorii (poziomy) za pomoc¡ atry-
butu
LEVELS:
>attr(struktura,"levels")<-c("ndst","dost","dobry","bdb","celuj¡cy")
Zawarto±¢ takiej zmiennej nominalnej b¦dzie nast¦puj¡ca:
Wy±wietl¡ si¦ tylko elementy: ndst,dost, celujacy , gdy» to one odpowiadaj¡
elementom o numerach 2,1 i 5, które na pocz¡tku przypisano do zmiennej
struktura.
0.2.3
Lista
Czasami chcemy zapami¦ta¢ w jednym miejscu wyniki pewnej analizy. Np po
zbadaniu danego zbioru danych, chcemy jednocze±nie zachowa¢ informacje
o elemencie minimalny, maksymalnym oraz ±rednim w zbiorze. Tak¡ mo»liwo±¢ daje nam funkcja list. W podanym poni»ej przykªadzie, dla zadanego
zbioru elementów b¦dziemy pami¦ta¢ pod nazw¡ srednia ±redni¡ arytmetyczn¡ zbioru (wywoªuj¡c funkcj¦ mean() ), miniminum element najmniejszy
w zbiorze, maksimum - element najwi¦kszy. Je±li teraz wypiszemy zawarto±¢
tak utworzonej listy, efekt b¦dzie nast¦puj¡cy: Jak wida¢ kolejno wypisane
s¡ poszczególne elementy, w zale»no±ci od tego ile ich jest zapisanych w
takiej strukturze. Je±li chcemy si¦ odwoªa¢ konkretnie do jednej skªadowej
to mo»emy wprost wypisa¢ jej zawarto±¢ stosouj¡c selektor $. Uwaga! Gdy
5
nie znamy skªadowych danej struktury, jest mo»liwo±¢ wy±wietlenia ich zawarto±ci przy u»yciu atrybutu names. Prosz¦ poszuka¢ informacji na ten
temat. Wykona¢ stosowne ¢wiczenia.
0.2.4
Tablica
Tablic¦ b¦dziemy traktowa¢ jako obiekt zawieraj¡cy grup¦ elementów tego
samego typu. W odró»nieniu do wektora, elementy tablicy mog¡ by¢ indeksowane w jednym lub wi¦cej wymiarach. Tworzenie tablicy umo»liwia
funkcja array(dane,wymiary). Konstruktor array(0,c(2,4)) utworzy tablic¦
o wymiarach 2 × 4 wypeªnion¡ zerami. Za± konstruktor: array(,c(2,4))
stworzy tablic¦ tak»e o wymiarach 2 × 4 ale bez okre±lonych warto±ci (NA).
Chc¡c odwoªa¢ si¦ do poszczególnych elementów tablicy u»ywamy selektora
[], gdzie podajemy indeksy dla wszystkich wymiarów oddzielone przecinkami.
Gdy wi¦c w zmiennej tab zapiszemy nast¦puj¡c¡ tablic¦:


[, 1] [, 2] [, 3]


3
5 
 1
2
4
6
odwoªanie tab[2, 3] zwróci nam warto±¢ 6, za± odwoªanie tab[1, 3] warto±¢:
5. Mo»na odwoªywa¢ si¦ do caªych (peªnych) wierszy i kolumn.Odpowiednio
odwoªanie: tab[2, ] wy±wietli nam caªy drugi wiersz tablicy tab, za± tab[, 3]
caª¡ trzeci¡ kolumn¦.
6
0.2.5
Dodatek
Tablice dwuwymiarowe mog¡ by¢ tworzone równie» przez ª¡czenie ze sob¡
wektorów lub innych tablic 2-wymiarowych za pomoc¡ funkcji: cbind i
rbind.
‚wiczenie:
Co b¦dzie rezultatem:
1. > tabA < −cbind(1 : 5, rep(2, 5), 5 : 1)
2. > tabB < −N U LL
3. > tabB < −rbind(tabB, c(0, 30, 45, 60, 90))
4. > tabB < −rbind(tabB, sin(tabB ∗ pi/180))
5. > tabC < −cbind(rbind(array(1, c(2, 2)), array(2, c(3, 2))), array(3, c(5, 2)))
Wiedz¡c, »e do okre±lania wymiarów tablicy sªu»y atrybut dim, za± do
okre±lania liczby kolumn atrybut ncol i odpowiednio liczby wierszy nrow,
sprawd¹ co zwróci wywoªanie:
1. > dim(tabC)
2. > nrow(tabC)
3. > ncol(tabC)
0.2.6
Macierz
Macierz nale»y traktowa¢ jako tablic¦ dwuwymiarow¡. Stosujemy do tego
funkcj¦ matrix, która domy±lnie traktuje dane wej±ciowe jako kolejne kolumny
macierzy. Mo»na odpowiednio decydowa¢ o wypeªnianiu macierzy: kolumnami b¡d¹ wierszami. Dlatego dwa polecenia:
macierzA<-matrix(c(1,2,3,4,5,6,7,8,9),ncol=3,nrow=3)
oraz
macierzA<-matrix(c(1,2,3,4,5,6,7,8,9),ncol=3,nrow=3,byrow=TRUE)
stworz¡ inne macierze (co pokazuje rysunek). Wida¢, »e u»ycie polecenia
byrow = T RU E powoduje, »e wypelnianie odbywa si¦ wierszami, nie za±
kolumnami.
Wiedz¡c, »e:
• % ∗ % to operator mno»enia macierzy,
• det(A) pozwala obliczy¢ wyznacznik macierzy A,
• solve(A) pozwala wyznaczy¢ macierz odwrotn¡ do macierzy A,
7
• t(A) wyznacza za± macierz transoponowan¡ dla macierzy A
wykonaj ¢wiczenia:
1. utwórz na trzy ró»ne sposoby wektor skªadaj¡cy si¦ z elementów 1, 5, 3, 2, 4, 6
2. Oblicz wyznacznik macierzy:
3. Pomnó» macierz A =
0.2.7
"
"
2 3
−1 2
2 3
−1 2
#
#
przez macierz B =
"
−1 −2
2
4
#
Tabela danych
Niew¡tpliwie sporym ograniczeniem w przypadku tablic czy macierzy jest zapewnienie jednorodno±ci ich elementów. Mog¡ to by¢ zarówno dane liczbowe,
tekstowe jak i zmienne logiczne, jednak w jednej tablicy te dane nie mog¡
by¢ pomieszane. Szcz¦±liwie w ±rodowisku R rozwi¡zano ten problem funkcj¡
tworzenia tzw. ramek danych (ang. data.frame). Wiedz¡c, »e standardowo
w ±rodowisku R mamy tablice LET T ERS przechowuj¡c¡ 26 wielkich liter
alfabetu ªaci«skiego, za± letters odpowiednio te same litery tyle maªe, zaªadujemy do takiej tabeli danych (któr¡ nazwiemy litery ) 10 liter wielkich i
przypiszemy im logiczne warto±ci TRUE lub FALSE oznaczaj¡ce odpowiednio to czy ddana litera jest parzysta czy nie.
litery < −daqta.f rame(LET T ERS[1 : 10], 1 : 10, rep(c(F, T ), 5))
names(litery) < −c(¨litera”, ńumer”, ćzyparzysta”)
0.3
0.3.1
Konwersje typów
Konwersja dla typów prostych
Konwersja typów prostych jest realizowana za pomoc¡ funkcji:as.nazwa_typu.
Zapis:
8
< t < −T RU E
> print(as.integer(t))
jest poprawny i w rezultacje wy±wietli warto±¢ 1, gdy» logiczna 1 b¦dzie
odpowiadaªa warto±ci T RU E , za± 0 warto±ci F ALSE . Dlatego np. zapis
”5”+”4” zwróci bª¡d, za± as.integer(”5”)+as.integer(”4”) b¦dzie poprawne
i da w wyniku warto±¢ 9.
0.3.2
Konwersja dla typów zªo»onych
Konwersja mo»e tak»e dotyczy¢ obiektów typu zªo»onego jak wektor. Poni»szy
kod
>dane<-c(2,1,3,3,4,5,3,2,7,6,8,6,6,5,3,1)
>unikatowe<-as.vector(levels(as.factor(dane)))
>print(unikatowe)
w rezultacie wy±wietli niepowtarzaj¡ce sie elementy ze zbioru dane. Mo»na
te» rzutowa¢ tablice na typy proste:
>logiczne<-array(c(0,0,1,0,1,1),c(2,3))
>as.logical(logiczne)
Wówczas efektem b¦dzie wy±wietlenie kolejno: F F T F T T
0.3.3
Do prze¢wiczenia
1. funkcje konwersji dla typów prostych:
• numeric
• integer
• real
• single
• string
• logical
2. funkcje konwersji dla klas obiektow zlo»onych:
• vector
• factor
• matrix
• array
• list
• data.frame
3. operatory arytmetyczne: +, −, ∗, /,, %/%, %%
9
4. operatory logiczne: ==,! =,i,i =, h, h=
5. logiczne "i"(&&), ªub"(kk), «ie"(!)
6. funkcje matematyczne: sqrt,round,ceiling,oor,logb
7. sortowanie: sort
8. funkcje agreguj¡ce: mad,max,mean,min, median, product,quantile,sd,sum
9. funkcja paste wspomaga funkcj¦ print.
10. Funkcje agreguj¡ce maj¡ to do siebie, »e dziaªaj¡ dla caªej tablicy.
Gdy chcemy zastosowa¢ dan¡ funkcj¦ dla konkretnej kolumny - stosujemy funkcj¦: apply(tablica,rodzaj_obliczen,funkcja_agregujaca). Je±li
obliczenia maj¡ dotyczy¢ tylko wierszy to jako drugi argument wpiszemy
1, je±li tylko kolumn to wpiszemy 2, a jesli jednocze±cie kolumn i wierszy to c(1, 2). Czyli gdy stworzyny macierz A:
> A < −matrix(c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5), ncol = 5, nrow =
3, byrow = T RU E)
i chcemy wyliczy¢ ±redni¡ tylko z wierszy to u»yjemy komendy:
apply(A, 1, ”mean”)
0.4
Zadania do wykonania
1. napisz w jednej komendzie polecenie wypisania sze±cianów liczb od 1
do 5
2. Co da w wyniku: > as.logical((1 : 10)%%2) ?
3. czym ró»ni¡ si¦ 2 komendy:
> matrix(c(1, 2, 3, 4, 5, 6), ncol = 2, nrow = 3)
oraz
> matrix(c(1, 2, 3, 4, 5, 6), ncol = 2, nrow = 3, byrow = T RU E) ?
4. Zrób wgl¡d w konstrukcj¦ p¦tli i instrukcji warunkowych w R (if, while,
for).
5. Stwórz tablic¦ o wymiarach 5 × 5 (wypeªnij jej losowymi warto±ciami
z przedziaªu: [1..9]) i oblicz sum¦ elementów 2 kolumny
6. Oblicz sum¦ elementów nieparzystych
7. wpisz do ostatniej kolumny liczby od 1 do 5 (kolejno)
8. Sprawd¹ ile jest elementów mniejszych od 4
10
9. Stwórz tablic¦ dochody, w której umie±¢ dochody z ka»dego miesi¡ca.
Napisz funkcj¦ wypisuj¡c¡ dla ka»dego miesi¡ca uzyskane dochody, w
formacie: Dochody w miesi¡cu: i wynosily: x. Dodatkowo w osobnej
strukturze, zapisz najmniejszy, najwi¦kszy i ±redni dochód.
11