Modelowanie rynków finansowych z wykorzystaniem pakietu R Wprowadzenie do pakietu R Mateusz Topolewski woland@mat.umk.pl Wydział Matematyki i Informatyki UMK
Plan działania 1 Co i dlaczego...? 2 Przechowywanie danych 3 Programowanie w R
Czym jest R? Mówiąc R mówimy o 1 języku programowania powstałym na bazie języka S; 2 platformie programistycznej; 3 projekcie, w ramach którego rozwijany jest zarówno język jak i platforma. R jest często nazywany pakietem statystycznym. Jest tak z uwagi na olbrzymią liczbę dostępnych funkcji statystycznych. Możliwości R są jednak znacznie większe. W Internecie można znaleźć przykłady wykorzystania R do automatycznego generowania raportów, wysyłania maili, rysowania fraktali, czy renderowania trójwymiarowych animacji.
RStudio
RStudio Tryby pracy Z R-em możemy pracować w dwóch trybach: wprowadzać polecenia bezpośrednio z poziomu konsoli lub wczytywać całe bloki poleceń ze skryptów. Zewnętrzny skrypt wywołujemy poleceniem source(). Możemy wykonać zaznaczony w edytorze blok poleceń wciskając przycisk Run. Funkcje R zawarte są w pakietach. Nowy pakiet ładujemy poleceniem library() lub zaznaczając w zakładce Packages. Konsola R zapamiętuje historię wykonywanych poleceń.
Zaczynamy... KalkulatoR Konsola R może być wykorzystywana jako prosty kalkulator. R wykonuje proste działania (+,,, /, ˆ) oraz ma wbudowane podstawowe funkcje (sqrt(base), log(base), exp(base), sin(base)). Zmienne Zmienne w R deklarujemy przez przypisanie im wartości (za pomocą operatora =,<- lub ->). Typy przypisywane są automatycznie. Nazwa zmiennej musi zaczynać się od litery i może zawierać wielkie litery, małe litery, cyfry i znaki specjalne. R rozróżnia wielkie i małe litery (x i X to dwie różne zmienne). Na przykład > 2+2 -> X > x <- exp(-2)
Typy zmiennych Wyróżniamy następujące typy zmiennych: liczbowy (liczby całkowite i zmiennoprzecinkowe). Szczególnymi wartościami dla tego typu są nieskończoności (Inf,-Inf) i nieokreśloność (NaN). czynnikowy (nazywany też wyliczeniowym i kategorycznym) znakowy logiczny (TRUE/FALSE) wektorowy lista macierz ramka danych funkcja
Wektory i macierze Wektory Wektory możemy generować na dwa sposoby: ręcznie za pomocą polecenia c(base) (np. x=c(1,3,5)) automatycznie poleceniem seq(base) (np. x=seq(from=1,to=5,by=2)) Elementom wektora możemy również przypisywać nazwy, np. Ania <- c(wzrost = 1.55, waga = 45) Macierze Macierze dwuwymiarowe możemy tworzyć poleceniem matrix(base). Na przykład: M <- matrix(data = c(1,2,3,4), nrow = 2, ncol = 2) Macierze o większej liczbie wymiarów tworzymy poleceniem array(base). Na przykład: M <- array(data = c(1,2,3,4), dim = c(2,2)) Wymiarom macierzy można przypisywać nazwy dodając argument dimnames.
Operacje na wektorach i macierzach Indeksy Wybrany element wektora/macierzy wywołujemy podając jego indeks (lub nazwę) w nawiasach kwadratowych, np. Ania["wzrost"], M[1,2]. Możemy również wybrać całą grupę elementów. I tak poleceniem M[,1] wypiszemy pierwszą kolumnę macierzy M, natomiast M[M>0] wypisze wszystkie elementy dodatnie. Operacje Wektory i macierze tych samych wymiarów możemy dodawać i mnożyć po współrzędnych" tak samo jak liczby rzeczywiste. Mnożenie macierzowe wykonujemy operatorem %*%
Listy Lista to również uporządkowany zbiór elementów, które przeciwieństwie do wektora mogą mieć różne typy. Podobnie jak w przypadku wektora poszczególne elementy mogą mieć nazwy. Do elementów listy możemy się odwoływać jak do elementów wektora, korzystając z nazw poszczególnych pól lub z operatora [[]]. Listy tworzy się zazwyczaj z użyciem funkcji list(). Przykład Tworzymy listę atrybutów Andrzeja: Andrzej <- list(rok = 5, R = TRUE, zainteresowania = c("statystyka","stochastyka")). Zainteresowania Andrzeja możemy sprawdzić na dwa równorzędne sposoby: Andrzej$zainteresowania Andrzej[[3]]
Ramka danych Ramka danych jest szczególnym typem danych. Jest to tabela (dwuwymiarowa), w której każda kolumna zawiera elementy tego samego typu. Równoważnie możemy powiedzieć, że jest to lista wektorów tej samej długości. Do elementów ramki możemy odwoływa się jak do elementów macierzy lub listy. Ramkę danych tworzymy poleceniem data.frame(base) Przykład Dzieci w przedszkolu: dzieci <- data.frame(imie = c("janek", "Basia", "Zosia"), wiek = c(5,5,6), wzrost=c(115,120,118)). Wzrost Zosi możemy sprawdzić poleceniem dzieci$wzrost[dzieci$imie=="zosia"] lub równoważnie dzieci[dzieci[,1]=="zosia",3].
Import i export danych Do wczytywania i zapisywania tablicy danych z pliku tekstowego służą polecenia read.table() i write.table(). Do pracy z arkuszami CSV możemy wykorzystać przystosowane do tego polecenia read.csv(utils), write.csv(utils). Przykład Wczytujemy dane z arkusza dane.csv: > dane <- read.table("dane.csv", header = TRUE, sep = ";", dec = ",", encoding = "utf8") > dane <- read.csv("dane.csv") > write.table(dane, "arkusz.csv") R i SPSS R obsługuje również arkusze SPSS a. Do wczytywania danych służą polecenia read.spss(foreign), spss.get(hmisc)
Instrukcja warunkowa Instrukcja if if (warunek_ logiczny) blok_instrukcji_1 else blok_instrukcji_2 Funkcja ifelse ifelse(warunek_logiczny, wartosc_1, wartosc_2) Przykład if (n>0) n <- n-1 else n <- 0 n <- ifelse(n>0, n-1, 0) Uwaga Blok instrukcji otaczamy nawiasem klamrowym.
Pętle Pętla for Pętla for powtarza blok instrukcji określoną liczbę razy. for (iterator in zbior) blok_instrukcji Pętla while Pętlę while wykonuje blok instrukcji dopóki zadany warunek jest spełniony. while (warunek_logiczny) blok_instrukcji. Przykład for (n in seq(1,10)) A[n] <- n n <- 10 while (n>0) { A[n] <- n; n <- n-1 } Zauważmy, że obie pętle robią dokładnie to samo.
Funkcje Funkcje w R tworzymy według następującego schematu: nazwa_funkcji <- function(lista_argumentów){ } blok_ instrukcji return(wynik) Argumenty funkcji są zmiennymi lokalnymi tworzonymi tylko wewnątrz funkcji, możemy im przypisywać domyślne wartości. Wynikiem działania funkcji może być dowolna struktura danych. Przykład Iloczyny częściowe iloczyny <- function(x){ n <- length(x) for (i in n:1) x[i] <- prod(x[1:i]) return(x) }