In R, voglio generare un campione casuale di una variabile casuale discreta: X
, dove: P(X=a)=P(X=-a)=1/2
. Ho cercato una funzione online, ma non sembra che funzioni direttamente.R-Come generare un campione casuale di una variabile casuale discreta?
risposta
Penso che stai cercando di generare campioni di una variabile casuale Bernoulli. Una variabile casuale di Bernoulli è un caso speciale di una variabile casuale binomiale. Pertanto, puoi provare rbinom(N,1,p)
. Questo genererà campioni N
, con valore 1
con probabilità p
, valore 0
con probabilità (1-p)
. Per ottenere i valori di a
e -a
è possibile utilizzare a*(2*rbinom(N,1,p)-1)
.
index <- sample(1,c(1,2),replace=T)
if (index == 1) {xx = a} else {xx = -a}
Ogni procedura di generazione della distribuzione inizia con $ \ text {uniform} (0,1) $. Poiché le distribuzioni discrete sono molto più facili da generare con $ \ text {uniform} (0,1) $, le persone non concludono una funzione per loro. Tuttavia, puoi scrivere le tue funzioni e riprenderle appena la prossima volta che le userai.
O questo:
> n=10
> X=rep(0,n)
> Y=rbinom(n,1,1/2)
> #Since they the probability is 1/2 for both cases, I assigned "a" when Y=1 and "-a" otherwise.
> X[Y==1]="a"
> X[Y==0]="-a"
> X
[1] "a" "-a" "a" "a" "a" "-a" "a" "-a" "-a" "-a"
> Y
[1] 1 0 1 1 1 0 1 0 0 0
>
1) Se si utilizza sample
, questo è sufficiente:
sample(c(-a,a),1)
es .:
a <- 10
sample(c(-a,a),1)
[1] -10
Prova un'altra coppia:
> sample(c(-a,a),1)
[1] -10
> sample(c(-a,a),1)
[1] 10
Opere.
Se è necessario provare più di un elemento, quindi impostare replace=TRUE
... qui abbiamo campioni 12 volte:
sample(c(-a,a),12,replace=TRUE)
[1] 10 10 -10 10 10 10 -10 -10 10 -10 10 -10
2) è possibile utilizzare runif
; Ecco un esempio di dimensioni 9:
a <- 1
ifelse(runif(9)<.5,-a,a)
[1] -1 1 -1 1 -1 1 -1 1 1
3) è possibile utilizzare rbinom
; Ecco un esempio di dimensione 4:
a <- 6
ifelse(rbinom(4,1,.5),-a,a)
[1] -6 6 -6 6
Il codice è errato. Genera solo 'a' –