Podstawowym sposobem na wyszukiwanie informacji (dokumentacji) jest funkcja help dostępna także pod synonimem ?. Argumentem może być funkcja lub jej nazwa, przekazana jako ciąg znakowy.
?help
? 'help'
help(help)
help("help")
Komentarze w R są ciągami dowolnych znaków występujących po symbolu #, który nie jest elementem ciągu znakowego.
# To jest przykładowy komentarz.
Poszczególne funkcjonalności dostarczane do R są grupowane w moduły zwane pakietami.
Lista załadowanych pakietów (.packages())
: caret, ggplot2, lattice, stats, graphics, grDevices, utils, datasets, methods, base.
Lista dostępnych pakietów:
(.packages(all.available=TRUE))
Opis zbioru danych:
? cars
Załadowanie pakietu:
library(class)
Wyładowanie pakietu:
detach('package:class', unload=TRUE)
Funkcjonalności wszystkich pakietów są zawsze dostępne, dzięki operatorowi zasięgu :::
tools::md5sum(dir(
recursive=T, include.dirs=F)[1])
0.Primer.nb.html
"d4e123364c20f26fee56c610d3a41637"
Wywołanie funkcji:
set.seed(123) # ziarno liczby losowej
Argumenty pozycyjne:
log(8, 2)
[1] 3
Argumenty nazwane:
log(base=2, x=8)
[1] 3
Argumenty pozycyjne i nazwane:
dir('.', full.names=1, recursive=TRUE)
[1] "./0.Primer.nb.html" "./0.Primer.Rmd" "./1.Linear Regression.nb.html"
[4] "./1.Linear Regression.Rmd"
Każde wyrażenie jest funkcją. Jeżeli z przyczyn syntaktycznych nie można użyć symbolu bezpośrednio jako funkcji, należy go zamknąć pomiędzy symbolami backticks `. Osobne wyrażenia mogą być umieszczone w jednej linii, muszą jednak pozostać oddzielone znakiem średnika ;:
x<-6:1; `<-`(y, `+`(x, runif(length(x))))
paste(c('x: ', paste(x, collapse=', '), '; y: ', paste(signif(y, 3), collapse=', ')), collapse='')
[1] "x: 6, 5, 4, 3, 2, 1; y: 6.29, 5.79, 4.41, 3.88, 2.94, 1.05"
Każde wyrażenie jest funkcją, cd.:
`==`(-1, FALSE); `^`(2, 3)
[1] FALSE
[1] 8
Funkcja anonimowa:
sapply(x, function(x) 2*x)
[1] 12 10 8 6 4 2
Wartość domyślna argumentu:
g<-function(z, y=10){ return(z+y); }
g(2)
[1] 12
Funkcja jest obiektem, można ją przekazywać:
sapply(x, g)
[1] 16 15 14 13 12 11
Introspekcja:
args(g)
function (z, y = 10)
NULL
Introspekcja argumentów funkcji:
formals(g)
$z
$y
[1] 10
Manipulacja:
formals(g)$y<--1
g(2)
[1] 1
Manipulacja, cd.:
body(g)
{
return(z + y)
}
body(g) <- expression({z*pi})
g(1)
[1] 3.141593
Przypisanie wartości:
d<-4 # przypisanie
d=5 # argument nazwany; globalnie działa jak przypisanie
d.d <- 6 # kropki są dopuszczalnymi elementami nazw zmiennych
Typy danych:
-.15; 0x7F; 1.2e3; 1+2i # liczby
NULL; Inf; NaN; NA; pi; exp(1) # symbole specjalne
"napis"; 'napis'; "'napis'"; '"napis"' # ciągi znakowe
1==TRUE; 0==FALSE; 2==TRUE; 2==FALSE # wartości logiczne
1:6; c(1,1,2,3,5,8); seq(1, 2, 0.25) # wektor wartości homogenicznych
# (.NET / Java / C - tablica, Python ~ lista)
Coercion:
c(1, 'dwa', 3)
[1] "1" "dwa" "3"
Iloczyn skalarny (inner / dot product):
drop(1:3 %*% 3:1)
[1] 10
sum(1:3 * 3:1)
[1] 10
1+2; 1-2; 1/2; 2*.5
1:3 * 2; 1:3 - 1
2^3; 2**3; 3%%2; 5%/%2
1==2; 1!=2; 1>2; 1>=2; 1<2; 1<=2
!TRUE; 1 | 0; TRUE || FALSE; TRUE & FALSE; TRUE && FALSE
Logical:
c(1,0) && c(1,0)
c(1,0) || c(1,0)
xor(c(1,0,1), c(0,1,1))
Elementwise:
c(1,0) & c(1,1)
c(1,0) | c(1,1)
Compound statement - ostatnie wyrażenie jest wartością zwracaną przez wyrażenie:
{'jeden'; 2; 'rezultat'}
[1] "rezultat"
if (FALSE) NULL else 'nieprawda'
[1] "nieprawda"
ifelse(sample(rep(0:1, each=3)), 'prawda', 'fałsz')
[1] "prawda" "prawda" "fałsz" "fałsz" "prawda" "fałsz"
i<-5; repeat {if (i > 25) break else {print(i); i <- i + 5;}}
[1] 5
[1] 10
[1] 15
[1] 20
[1] 25
i<-5; while (i <= 25) {print(i); i <- i + 5}
[1] 5
[1] 10
[1] 15
[1] 20
[1] 25
for (i in seq(from=5, to=25, by=5)) print(i)
[1] 5
[1] 10
[1] 15
[1] 20
[1] 25
Atrybuty:
lin.reg<-lm(x~y)
attributes(lin.reg)
$names
[1] "coefficients" "residuals" "effects" "rank" "fitted.values" "assign"
[7] "qr" "df.residual" "xlevels" "call" "terms" "model"
$class
[1] "lm"
Atrybuty nazwane:
names(lin.reg) # to samo co attributes(lin.reg)$names
[1] "coefficients" "residuals" "effects" "rank" "fitted.values" "assign"
[7] "qr" "df.residual" "xlevels" "call" "terms" "model"
lin.reg$coefficients # to samo co coef(lin.reg)
(Intercept) y
-0.3823234 0.9564768
Klasa dla funkcji generycznych; w przypadku braku innej możliwości coercion:
class(lin.reg)
[1] "lm"
summary(lin.reg) # to samo co summary.lm(lin.reg)
Call:
lm(formula = x ~ y)
Residuals:
1 2 3 4 5 6
0.3684 -0.1541 0.1652 -0.3317 -0.4302 0.3823
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.38232 0.40793 -0.937 0.401704
y 0.95648 0.09226 10.367 0.000489 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3962 on 4 degrees of freedom
Multiple R-squared: 0.9641, Adjusted R-squared: 0.9551
F-statistic: 107.5 on 1 and 4 DF, p-value: 0.0004887
methods(class='lm') # to samo co methods(class=lm)
[1] add1 alias anova case.names coerce confint cooks.distance
[8] deviance dfbeta dfbetas drop1 dummy.coef effects extractAIC
[15] family formula hatvalues influence initialize kappa labels
[22] logLik model.frame model.matrix nobs plot predict print
[29] proj qr residuals rstandard rstudent show simulate
[36] slotsFromS3 summary variable.names vcov
see '?methods' for accessing help and source code
Typ obiektu R:
typeof(lin.reg)
[1] "list"
Wszystko jest obiektem:
class(typeof)
[1] "function"
typeof(class)
[1] "builtin"
mode(class)
[1] "function"
Konwersja typu:
as.complex(8)
[1] 8+0i
Sprawdzenie typu:
is(0i, 'complex')
[1] TRUE
Indeksowanie kolekcji od 1, nie od 0:
x[1]; x[[1]]
[1] 6
[1] 6
Wektory liczb mogą być indeksami:
x[1:2]; x[c(2,5,6)]
[1] 6 5
[1] 5 2 1
“Z wyjątkiem”:
x[-1:-3]
[1] 3 2 1
m <- matrix(data=c(101:112), nrow=3, ncol=4); print(m)
[,1] [,2] [,3] [,4]
[1,] 101 104 107 110
[2,] 102 105 108 111
[3,] 103 106 109 112
Wiersz(e), kolumna(y):
m[4]; m[1,2]; m[1:2, 1:2]; m[1,]; m[,2:4]
[1] 104
[1] 104
[,1] [,2]
[1,] 101 104
[2,] 102 105
[1] 101 104 107 110
[,1] [,2] [,3]
[1,] 104 107 110
[2,] 105 108 111
[3,] 106 109 112
Wektory wartości logicznych mogą być indeksami:
logical.vector <- sample(6) > 3
x[logical.vector]
[1] 6 3 2
x[x%%2==0]
[1] 6 4 2
list(a=1, b=2, c=3, d=4, e=5, f=6, g=7, h=8, i=9, j=10)[c('a', 'd')]
$a
[1] 1
$d
[1] 4
Reprezentują wartości heterogeniczne / krotki (tuple):
l <- list(1, '2', FALSE, 4, complex=5i)
l[[5]]; l$complex
[1] 0+5i
[1] 0+5i
m<-matrix(data=1:12, nrow=4, ncol=3,
dimnames=list(c('wrsz1', 'wrsz2', 'wrsz3', 'wrsz4'),
c('kol1', 'kol2', 'kol3')))
print(m)
kol1 kol2 kol3
wrsz1 1 5 9
wrsz2 2 6 10
wrsz3 3 7 11
wrsz4 4 8 12
Wymiary macierzy:
dim(m)
[1] 4 3
Nazwy wymiarów macierzy:
dimnames(m)
[[1]]
[1] "wrsz1" "wrsz2" "wrsz3" "wrsz4"
[[2]]
[1] "kol1" "kol2" "kol3"
Nazwy wybranego wymiaru macierzy (tutaj kolumn):
colnames(m)
[1] "kol1" "kol2" "kol3"
Zmiana wartości nazw wymiaru, tutaj wierszy. Należy zwrócić uwagę, że wartości funkcji mogą być l-value:
rownames(m) <- NULL
Transpozycja macierzy:
m; t(m)
kol1 kol2 kol3
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
[,1] [,2] [,3] [,4]
kol1 1 2 3 4
kol2 5 6 7 8
kol3 9 10 11 12
Mnożenie macierzy:
m.2<-3:14
dim(m.2)<-c(dim(m)[2], dim(m)[1])
m; m.2; m.2 %*% m
kol1 kol2 kol3
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
[,1] [,2] [,3] [,4]
[1,] 3 6 9 12
[2,] 4 7 10 13
[3,] 5 8 11 14
kol1 kol2 kol3
[1,] 90 210 330
[2,] 100 236 372
[3,] 110 262 414
Trójwymiarowa:
a<-array(data=1:24, dim=c(3, 4, 2))
print(a)
, , 1
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
, , 2
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[3,] 15 18 21 24
traffic.lights<-factor(c('green', 'red', 'red', 'amber', 'green'))
levels(traffic.lights)
[1] "amber" "green" "red"
data.frame(
city = c('Seattle', 'Washington', 'Chicago',
'New York', 'Portland', 'St Louis',
'Denver', 'Boston','Minneapolis', 'Austin',
'Philadelphia', 'San Francisco', 'Atlanta',
'Los Angeles', 'Richardson'), rank = c(100, 96, 94, 93, 93, 92, 90, 90, 89, 87,
85, 84, 82, 80, 80))
summary(y~x)
Length Class Mode
3 formula call
Sys.Date()
[1] "2018-04-03"
date()
[1] "Tue Apr 3 17:42:00 2018"
salary <- c(187000, 165000, 96000, 144000, 158000)
occupation <- c('dev', 'dev', 'test', 'dev', 'dev')
location <- c('WU', 'WE', 'WF', 'WI', 'WN')
name.last <- c('Doe', 'Kowalski', 'Nowak', 'Wski', 'Czyński')
name.first <- c('John', 'Paweł', 'Jan', 'Piotr', 'Zdzisław')
top.5.minions <- data.frame(
name.last, name.first, location, occupation, salary)
View(top.5.minions) # podgląd
fix(top.5.minions) # edycja
Serializacja binarna – zapis stanu obiektu do zewnętrznego pliku:
save(top.5.minions, file = 'top.5.rdata')
Lista aktualnie zadeklarowanych zmiennych:
ls() # to samo co objects()
[1] "a" "A" "alpha" "autodane"
[5] "autodata" "autodata.train" "aux" "aux.numerator"
[9] "B" "B0" "B0.conf" "B0.err"
[13] "B0.t" "B0.t.pr" "B1" "B1.conf"
[17] "B1.err" "B1.t" "B1.t.pr" "B2"
[21] "B2.conf" "B2.err" "B2.t" "B2.t.pr"
[25] "c" "C" "cena" "cena.diff"
[29] "cena.diff.power" "cena.est" "cena.est.conf" "cena.est.diff"
[33] "cena.est.diff.power" "cena.mean" "coef" "cov.przebieg.cena"
[37] "cov.wiek.cena" "cov.x" "d" "d1"
[41] "d2" "data.test" "data.train" "d.d"
[45] "delta" "df" "doctorates" "doctorates.m"
[49] "est.fnc" "est.var" "exAnte" "exAnte.rel"
[53] "F" "ff" "F.pValue" "g"
[57] "i" "indices" "interval" "iris"
[61] "l" "lin.reg" "location" "logical.vector"
[65] "m" "m.2" "minions.no" "more.cols"
[69] "n" "name.first" "name.last" "new.car"
[73] "next.3.minions" "nmbrs" "no" "numbers"
[77] "occupation" "p" "partition" "przebieg"
[81] "przebieg.cena.mult" "przebieg.diff" "przebieg.diff.power" "przebieg.mean"
[85] "R2" "R2.adj" "rank" "reminder3"
[89] "reminder4" "result" "result.conf" "RSS"
[93] "S2" "salary" "Sigma" "top.5.minions"
[97] "toxins.and.cancer" "traffic.lights" "TSS" "tValue"
[101] "tValues" "var.przebieg" "var.wiek" "wiek"
[105] "wiek.cena.mult" "wiek.diff" "wiek.diff.power" "wiek.mean"
[109] "x" "X" "x.1" "x.2"
[113] "x.mult" "y" "year"
Usuń zmienną:
rm(top.5.minions)
Zawartość pliku z serializowanym binarnie obiektem R:
file.show('top.5.rdata')
RDX2
X
������������� ���
top.5.minions�������
������������������������� ���levels��������� ���Czyński�� ���Doe�� ���Kowalski�� ���Nowak�� ���Wski������� ���class�������� ���factor������
������������������������������� ���Jan�� ���John��� ���Paweł�� ���Piotr��� ��� Zdzisław������������� ���factor������
������������������������������� ���WE�� ���WF�� ���WI�� ���WN�� ���WU������������� ���factor������
������������������������������� ���dev�� ���test������������� ���factor����������A������A$@����@�p�����A������AI������������ ���names�������� ��� name.last�� ���
name.first�� ���location�� ���
occupation�� ���salary������� ��� row.names���
������������������������ ���
data.frame��������
Deserializacja obiektu z pliku do zmiennej:
load('top.5.rdata')
Usunięcie pliku:
file.remove('top.5.rdata')
Wczytanie danych z pliku płaskiego:
read.table('/usr/miswdm/autodane.csv', header=1, sep=',')
Wczytanie danych z pliku csv (jedna z możliwych kombinacji wartości dostępnych parametrów):
autodane<-read.csv('/usr/miswdm/autodane.csv')
Zapis danych do pliku csv (jedna z możliwych kombinacji wartości dostępnych parametrów):
write.csv2(autodane, 'autodane.csv')
Wczytanie zbioru danych:
data('iris')
summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Pierwsze i ostatnie elementy zbioru:
head(iris)
tail(iris, 2)
Liczba wierszy:
nrow(iris)
[1] 150
Liczba kolumn:
ncol(iris)
[1] 5
x.1 <- c('a', 'b', 'c', 'd', 'e')
x.2 <- c('A', 'B', 'C', 'D', 'E')
paste(x.1, x.2)
[1] "a A" "b B" "c C" "d D" "e E"
paste(x.1, x.2, sep=':')
[1] "a:A" "b:B" "c:C" "d:D" "e:E"
paste(x.1, x.2, sep='', collapse='-')
[1] "aA-bB-cC-dD-eE"
Column bind:
minions.no<-length(top.5.minions)
year<-rep(as.integer(format(Sys.Date(), '%Y')),
minions.no)
rank<-sample(minions.no)
more.cols<-data.frame(year, rank)
cbind(top.5.minions, more.cols)
Row bind:
next.3.minions<-data.frame(
name.last=c('Ała', 'Ocha', 'Ska'),
name.first=c('Wojciech', 'Zbigniew', 'Anna'),
location=c('WY', 'WX', 'WT'),
occupation=c('dev', 'tester', 'mgr'),
salary=c(154000, 75500, 121000),
year=year[1:3],
rank=sample(seq(minions.no+1,minions.no+3))
)
rbind(top.5.minions, next.3.minions[-6:-7])
numbers<-1:10
nmbrs<-numbers
reminder3=numbers%%3
reminder4=nmbrs%%4
d1<-data.frame(number=numbers, reminder3)
d2<-data.frame(nmbr=nmbrs, reminder4)
merge(d1, d2)
Inner join:
merge(d1, d2, by.x='number', by.y='nmbr')
Natural join:
names(d2)[1]<-'number'
merge(d1, d2)
Left outer join:
merge(d1, d2[1:nrow(d2)%%2==1,], all.x=1)
Maksimum z wierszy macierzy:
m<-1:20
dim(m)<-c(5,4)
apply(X=m, MARGIN=1, FUN=max)
[1] 16 17 18 19 20
Maksimum z kolumn macierzy
apply(X=m, MARGIN=2, FUN=max)
[1] 5 10 15 20
List apply:
x <- as.list(1:5)
lapply(x,function(x) 2^x)
[[1]]
[1] 2
[[2]]
[1] 4
[[3]]
[1] 8
[[4]]
[1] 16
[[5]]
[1] 32
Stworzenie wektora z wartości listy:
unlist(lapply(x,function(x) 2^x))
[1] 2 4 8 16 32
List apply dla zbioru danych:
d <- data.frame(x=1:5, y=6:10)
lapply(d, FUN=function(x) 2^x)
$x
[1] 2 4 8 16 32
$y
[1] 64 128 256 512 1024
Dla każdego wektora w zbiorze danych:
lapply(d, max)
$x
[1] 5
$y
[1] 10
Apply, który zwraca macierz (ewentualnie wektor albo tablicę):
sapply(d, FUN=function(x) 2^x)
x y
[1,] 2 64
[2,] 4 128
[3,] 8 256
[4,] 16 512
[5,] 32 1024
Wyznaczanie wartości funkcji w przedziałach ze względu na zmienną:
autodata<-read.table('/usr/miswdm/Auto.data')
tapply(autodata$mpg, autodata$cylinders, mean)
3 4 5 6 8
20.55000 29.28392 27.36667 19.97349 14.96311
Wyznaczanie statystyki po danych zagregowanych względem cechy:
aggregate(autodata$mpg,
by=list(cylinders=autodata$cylinders),
FUN=mean)
tapply(autodata$acceleration, autodata$cylinders, median)
3 4 5 6 8
13.5 16.2 19.9 16.0 13.0
Liczba obserwacji dla indeksu całkowitoliczbowego:
tabulate(autodata$year)
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[37] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 27 28
[73] 40 26 30 34 28 36 29 27 28 30
Liczba obserwacji dla wskaźnika:
table(autodata$year)
70 71 72 73 74 75 76 77 78 79 80 81 82
29 27 28 40 26 30 34 28 36 29 27 28 30
Podzbiór:
subset(autodata, select = c(name, year, acceleration),
subset = horsepower >= median(autodata$horsepower))
Dyskretyzacja ciągłej zmiennej przedziałami:
c<-cut(rnorm(40, mean = 60, sd = 10), breaks = 4)
c
[1] (61,71.4] (50.7,61] (71.4,81.7] (61,71.4] (40.3,50.7] (61,71.4] (50.7,61] (40.3,50.7] (50.7,61]
[10] (40.3,50.7] (50.7,61] (50.7,61] (40.3,50.7] (61,71.4] (61,71.4] (40.3,50.7] (71.4,81.7] (61,71.4]
[19] (50.7,61] (61,71.4] (61,71.4] (61,71.4] (61,71.4] (61,71.4] (50.7,61] (50.7,61] (50.7,61]
[28] (50.7,61] (50.7,61] (40.3,50.7] (71.4,81.7] (71.4,81.7] (40.3,50.7] (50.7,61] (50.7,61] (61,71.4]
[37] (50.7,61] (61,71.4] (50.7,61] (50.7,61]
Levels: (40.3,50.7] (50.7,61] (61,71.4] (71.4,81.7]
table(c)
c
(40.3,50.7] (50.7,61] (61,71.4] (71.4,81.7]
7 16 13 4
Podział na zbiór uczący i walidujący przez próbkowanie losowe:
autodata.train<-rep(FALSE, nrow(autodata))
autodata.train[sample(1:nrow(autodata), 0.75*nrow(autodata))]<-TRUE
data.train<-autodata[autodata.train, c(-3, -8)]
data.test<-autodata[!autodata.train, c(-3, -8)]
nrow(data.test) + nrow(data.train) == nrow(autodata)
[1] TRUE
suppressMessages(library(caret))
partition<-createDataPartition(iris$Species, p=.75, list=FALSE)
data.train<-iris[partition,]
data.test<-iris[-partition,]
nrow(data.test) + nrow(data.train) == nrow(iris)
[1] TRUE
Usuwanie duplikatów:
autodata[!duplicated(autodata$name),]
Ranking kolejności elementów:
x<-sample(1:10, 4)
order(x)
[1] 4 1 2 3
Sortowanie wektora:
sort(x, decreasing = FALSE)
[1] 1 2 5 7
Funkcje plot
, abline
oraz grid
:
x<-c(0,1,1,2,3,5,8,13,21,34)
y<-log(x+1)
m<-lm(y ~ x)
plot(y ~ x); abline(m); grid()
Współrzędne wskazania kursorem:
toxins.and.cancer=read.csv('/usr/miswdm/toxins.and.cancer.csv')
attach(toxins.and.cancer) # globalna dostępność data frame'u
plot(air_on_site/Surface_Area, deaths_lung/Population)
locator(1)
$x
[1] 0.0003928701
$y
[1] 0.0007044395
Dodatkowe etykiety wskazanych punktów:
identify(air_on_site/Surface_Area,
deaths_lung/Population, State_Abbrev)
doctorates<-read.csv('/usr/miswdm/doctorates.csv')
doctorates.m <- as.matrix(doctorates[3:7]) # lista jako macierz, wymóg barplot
rownames(doctorates.m) <- doctorates[, 2]
barplot(doctorates.m[1, ]) # w 2001 roku
barplot(doctorates.m, beside=TRUE, horiz=TRUE,
legend=TRUE, cex.names=.75)
barplot(t(doctorates.m), legend=TRUE, ylim=c(0, 66000))
Histogram rozkładu normalnego:
n<-rnorm(1200)
hist(n, breaks = 11, prob=T)
curve(dnorm(x), col=2, add=T) # funkcja gęstości prawdopodobieństwa rozkładu normalnego
Funkcja curve:
curve(sin, -4, 4)
Rysowanie rozkładu:
stem(n)
The decimal point is at the |
-3 | 00
-2 | 77666655
-2 | 444333332222211111100000000
-1 | 9999999998888888777777777777777766666666666655555555555555555
-1 | 44444444444444444433333333333333333333222222222222222222221111111111+42
-0 | 99999999999999999999999999999988888888888888888888888888888888777777+107
-0 | 44444444444444444444444444444443333333333333333333333333333333333333+125
0 | 00000000000000000011111111111111111111111111111111111111111111111111+128
0 | 55555555555555555555555566666666666666666666666666666666666666666666+100
1 | 00000000000000000000000000000000111111111111111111111111111111122222+39
1 | 5555555555555555566666666666666777777777777888888899999
2 | 00112233333333334444
2 | 5677
3 | 13
Maksimum:
max(n)
[1] 3.30433
Minimum:
min(n)
[1] -3.046967
Średnia:
mean(n)
[1] -0.02948162
Odchylenie standardowe:
sd(n)
[1] 1.002142
Wariancja; zgodny, nieobciążony estymator dla próbki:
\(\begin{aligned} Var(X)=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2 \end{aligned}\)
var(n)
[1] 1.004288
Mediana:
median(n)
[1] -0.02470827
Kwantyle rozkładu:
quantile(n, probs=c(0, .4, .5, .6, 1))
0% 40% 50% 60% 100%
-3.04696657 -0.27647091 -0.02470827 0.22162236 3.30432984
Tukey’s summary:
fivenum(n)
[1] -3.04696657 -0.69400946 -0.02470827 0.66303614 3.30432984
Podsumowanie rozkładu i jego wybranych statystyk:
summary(n)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-3.04697 -0.69337 -0.02471 -0.02948 0.66293 3.30433
Współczynnik korelacji Pearsona:
cor (x, y)
[1] 0.9068053
Współczynnik korelacji Spearmana:
cor (x, y, method="spearman")
[1] 1
Współczynnik kowariancji zmiennych losowych \(Cov(X, Y)=\mathbb{E}[(X-\mathbb{E}[X])\cdot(Y-\mathbb{E}[Y])]=\mathbb{E}[XY]-\mathbb{E}[X]\cdot\mathbb{E}[Y]\):
cov (x, y)
[1] 11.49988
Współczynnik kowariancji zmiennej losowej z samą sobą \(Cov(X, X)=\mathbb{E}[(X-\mathbb{E}[X])^2]=\mathbb{E}[X^2]-{\mathbb{E}[X]}^2=Var(X)\):
cov(x, x) == var(x)
[1] TRUE
q()