GNU R to język programowania oraz środowisko do obliczeń statystycznych oraz wizualizacji wyników. Jest to projekt GNU podobny do języka oraz środowiska S stworzonego w Bell Laboratories (dawniejsze AT&T, aktualnie Lucent Technologies) przez Johna Chambersa oraz jego współpracowników. R bywa traktowane jako implementacja języka oraz całego środowiska S. Wprawdzie są pomiędzy nimi istotne różnice, ale przeważajaca ilość kodu napisanego pod S działa bez problemów pod R. W tej chwili GNU R rozprowadzany jest w postaci kodu źródłowego oraz w postaci binarnej wraz z wieloma dystrybucjami Linuksa. Dostępna jest także wersja dla Microsoft Windows oraz Mac OS.
Kod źródłowy R opublikowany jest na zasadach licencji GNU GPL. Dostępne są prekompilowane binarne wersje dla systemów Windows, Macintosh oraz wielu systemów uniksowych.
GUI
Istnieje parę graficznych interfejsów dla R, wśród nich wymienić da się RKWard, SciViews-R oraz Rcmdr. Wiele edytorów ma specjalne tryby pracy dla R, np. Emacs (Emacs Speaks Statistics), jEdit, Kate oraz Tinn. Jest także wtyczka R plug-in dla Eclipse.
Cechy
R dostarcza szeroką gamę technik statystycznych (liniowe oraz nieliniowe modelowanie, klasyczne testy statystyczne, analiza szeregów czasowych, klasyfikacja, grupowanie,...) oraz graficznych. W dodatku R jest rozszerzalne za pomocą dodatkowych pakietów oraz skryptów pisanych przez użytkownika.
Jedną z mocnych stron R jest łatwość z jaką da się tworzyć dobrze zaprojektowane wykresy z jakością nadającą się do publikacji. Dotyczy to także symboli oraz formuł matematycznych. Wiele uwagi poświęcono minimalizacji wyborów jakie musi wykonać użytkownik nadając formę wykresowi. Mimo istnienia ustawień domyślnych użytkownik ma możliwość pełnej kontroli wykresu.
Przykładowe skrypty
Przykład 1.
Histogram wygenerowany za pomocą kodu z przykładu 1.
Generowanie liczb losowych oraz wykreślenie histogramu
# generowanie 3000 liczb losowanych z rozkładu normalnego
x <- rnorm(3000)
# obliczenie histogramu (bez rysowania) dla 50 przedziałów
histX <- hist(x, breaks=50, plot=FALSE)
# wykreślenie histogramu z kolorem wypełnienia słupków ustawionym na czerwony
plot(histX, col="red")
Przykład 2.
Podstawowe statystyki – w trybie interakcyjnym obliczane są proste statystyki dla danych w wektorze x wygenerowanym w poprzednim przykładzie
> summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-3.47300 -0.71500 -0.04161 -0.02642 0.63570 3.05000
>
Przykład 3.
Podstawowe operacje:
Przypisanie to <-. Wektor to c(pierwszy element, drugi element, ...). Przeważajaca ilość operacji da się wykonywać zarówno na skalarach jak oraz na wektorach – w tym drugim przypadku jeśli operacja nie ma sensu wektorowego jest wykonywana na wszystkich elementach wektora.
> x <- 2
> x
[1] 2
> y <- c(1,7,10)
> y
[1] 1 7 10
> sin(y)
[1] 0.8414710 0.6569866 -0.5440211
> 1:100
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
[55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
[91] 91 92 93 94 95 96 97 98 99 100
> sin(1:100) + 3
[1] 3.841471 3.909297 3.141120 2.243198 2.041076 2.720585 3.656987 3.989358
[9] 3.412118 2.455979 2.000010 2.463427 3.420167 3.990607 3.650288 2.712097
[17] 2.038603 2.249013 3.149877 3.912945 3.836656 2.991149 2.153780 2.094422
[25] 2.867648 3.762558 3.956376 3.270906 2.336366 2.011968 2.595962 3.551427
[33] 3.999912 3.529083 2.571817 2.008221 2.356462 3.296369 3.963795 3.745113
[41] 2.841377 2.083478 2.168225 3.017702 3.850904 3.901788 3.123573 2.231745
[49] 2.046247 2.737625 3.670229 3.986628 3.395925 2.441211 2.000245 2.478449
[57] 3.436165 3.992873 3.636738 2.695189 2.033882 2.260819 3.167356 3.920026
[65] 3.826829 2.973449 2.144480 2.102072 2.885215 3.773891 3.951055 3.253823
[73] 2.323228 2.014854 2.612218 3.566108 3.999520 3.513978 2.555887 2.006111
[81] 2.370112 3.313229 3.968364 3.733190 2.823924 2.076542 2.178182 3.035398
[89] 3.860069 3.893997 3.105988 2.220534 2.051718 2.754748 3.683262 3.983588
[97] 3.379608 2.426618 2.000793 2.493634
> mean(sin(1:100) + 3)
[1] 2.998728
> var(sqrt(80:1))
[1] 4.359722
Przykład 4.
Regresja liniowa:
Zmiennej x przypisujemy wartości 1,2,..,10, natomiast zmiennej y wartości funkcji liniowej o współczynniku nachylenia 3 oraz stałej 5 plus błąd losowy o rozkładzie normalnym (średnia=0, odchylenie standardowe=1). Komenda lm(y~x) dopasowuje do wygenerowanych danych model regresji liniowej.
> x<-c(1:10)
> y<-5+3*x+rnorm(10)
> summary(lm(y~x))
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-2.2687 -0.6058 0.1234 0.8704 2.0585
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.6991 0.9836 4.778 0.00139 **
x 3.0101 0.1585 18.989 6.12e-08 ***
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
Residual standard error: 1.44 on 8 degrees of freedom
Multiple R-Squared: 0.9783, Adjusted R-squared: 0.9756
F-statistic: 360.6 on 1 and 8 DF, p-value: 6.121e-08
Przykład 5.
Regresja logistyczna: Przykładowe dane:
y <- c(5,8,15,25)
N <- c(100,100,100,100)
x <- factor(c(1:4))
Komenda glm(cbind(y,N-y)~x,family=binomial) dopasowuje do danych model regresji logistycznej. Wynik estymacji (w kolumnie Estimate jest logarytm OR czyli ilorazu szans):
Call:
glm(formula = cbind(y, N - y) ~ x, family = binomial)
Deviance Residuals:
[1] 0 0 0 0
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.9444 0.4588 -6.417 1.39e-10 ***
x2 0.5021 0.5886 0.853 0.393606
x3 1.2098 0.5375 2.251 0.024407 *
x4 1.8458 0.5137 3.593 0.000326 ***
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2.0424e+01 on 3 degrees of freedom
Residual deviance: -2.2871e-14 on 0 degrees of freedom
AIC: 24.455
Number of Fisher Scoring iterations: 3
Polskie książki o R
Linki zewnętrzne