Cztery podstawowe funkcje w R związane z rozkładami zmiennych losowych to dystrybuanta, gęstość, kwantyl i próbkowanie. Aby wywołać każdą z funkcji należy wpisać prefiks oraz skrót rozkładu.
Przykładowe rozkłady:
normpoisbinomunifexpPrefiksy:
pdqrPrzykłady:
#zadanie dodatkowe: po co wpisuję set.seed(1)?
set.seed(1)
#5 obserwacji z rozkładu normalnego o śrendije 10 i odchyleniu standardowym 16
rnorm(5, 10, 16)
## [1] -0.02326097 12.93829319 -3.37005780 35.52449283 15.27212435
#dystrybuanta rozkłady wykładniczego o lambda=1 w punkcie 2
pexp(2, 1)
## [1] 0.8646647
#prawdopodobieństwa kolejnych wyników od 0 do 10 dla zmiennej o rozkładzie poissona z lambda=5
dpois((0:10), 5)
## [1] 0.006737947 0.033689735 0.084224337 0.140373896 0.175467370
## [6] 0.175467370 0.146222808 0.104444863 0.065278039 0.036265577
## [11] 0.018132789
#Teoretyczne kwartyle rozkładu standardowego normalnego
qnorm(c(.25,.5,.75))
## [1] -0.6744898 0.0000000 0.6744898
Często spotykamy się z sytuacją, w której w zalezności od wartości wykonujemy jakąs akcję lub nie. Do tego służy operator if
Jeżeli chcemy usunąc zmienną x funkcją rm() jeżeli jest ona ujemna:
set.seed(21)
x<-rnorm(1)
if (x<0) rm(x)
x
## [1] 0.7930132
ls()
## [1] "x"
Możemy spotkać się z sytuacją, w której chcemy uzaleznić akcję od wartości jakiejś zmiennej.
Jeżeli chcemy wprowadzić nazwę w jednoelementowym wektorze (nie nazwę obiektu) zależnie czy jest ujemna czy dodatnia:
set.seed(23)
x<-rnorm(1)
if (x<0) {
names(x)<-"ujemna"
} else {
names(x)<-"dodatnia"
}
x
## dodatnia
## 0.1932123
#zadanie dodatkowe: co by się stało gdyby x równał się 0?
Najczęsciej używaną pętlą jest pętla for, która powtarza operację ustalona ilość razy, podstawijąc kolejne zdefiniowane wartości.
Tworzymy sumę kwadratów liczb od 0 do 10 (da się to zrobić znacznie prościej):
#ustalamy początkową wartośc jako 0
suma<-0
#dodajemy w pętli
for (i in 0:10) suma<-suma+i^2
suma
## [1] 385
Często w pętli for chcemy dać warunek if else. Wylosujmy wektor 10 obserwacji z rozkładu standardowego normalnego i nadajmy nazwy obserwacja w zależności czy są dodatnie czy ujemne.
set.seed(32)
x<-rnorm(10)
#pętla jest dla 1:10, bo tyle elementów w x
for (i in 1:10){
#piszę w jednej liczni aby pokazać, że jest to mniej czytelne
if (x[i]<0) names(x)[i]<-"ujemna" else if (x[i]>0) names(x)[i]<-"dodatnia"
}
x
## dodatnia dodatnia ujemna dodatnia dodatnia dodatnia
## 0.01464054 0.87328871 -1.02794620 0.68566463 0.44943698 0.40701764
## dodatnia ujemna dodatnia dodatnia
## 0.28473137 -0.62430939 0.83965601 0.31127919
#zadanie dodatkowe: co by się stało gdyby jakiś element x równał się 0?
Nieraz chcemy aby jakaś operacja była wykonywana do momentu osiągnięcia jakiegoś wyniku. Chcemy losować obserwacje z rozkładu jednostajnego na odcinku (0,1) do momentu, aż suma będzie wieksza od 10.
#tworzymy pusty wektor
x<-c()
set.seed(99)
while (sum(x)<=10) x<-c(x,runif(1))
x
## [1] 0.58471185 0.11378168 0.68426474 0.99250878 0.53499358 0.96661406
## [7] 0.67142756 0.29457771 0.35836298 0.17531475 0.54881739 0.50545170
## [13] 0.19383647 0.63690411 0.68780009 0.64019077 0.35788536 0.10258500
## [19] 0.09779092 0.18288626 0.22790347 0.08052415 0.82161842
sum(x)
## [1] 10.46075
#zadanie dodatkowe: co zrobić aby stworzyć wektor, którego suma nie przekracza ustalonej liczby?