Rozkłady zmiennych losowych

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:

Prefiksy:

Przykł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

If else

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?

For

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?

While

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?