Моделирование случайных величин X и Y - PullRequest
0 голосов
/ 09 мая 2019

У меня есть следующий алгоритм для генерации значений для X и Y.

Шаг 1. Генерация U1, U2 ~ U (0,1)

Шаг 2. t = -бета * log (U1 * U2)

Шаг 3. Генерация U3 ~ U (0,1)

Шаг 4. X = t * U3, Y = t-X


Обратите внимание, что вы можете сравнить способ генерирования X и Y, генерируя U1 и U2 и определяя X = -beta * log (U1) и Y = -beta * log (U2)


Вот мой подход к реализации этого алгоритма в R:

f<-function(alpha,beta){ # alpha=2, beta=3 for example

  N<-1000
  t<-rep(0,N)
  X<-rep(0,N)
  Y<-rep(0,N)

  for(j in 1:N) 
  {
    u<-runif(alpha)

    t[j]<- -beta*log(prod(u)) 

    U3<-runif(1)

    X[j]<-t[j]*U3
    Y[j]<-t[j]-X[j]

  }

  c<-list(X,Y)

  return(c)
}
alpha<-2
beta<-3
y1<-f(alpha,beta)


hist(y1,freq=F,nclass=10,col="gray")

#COMPARISON, defining x and y directly as -beta*ln(u):

u1<-runif(1)
u2<-runif(1)
betaa<-2
x<- -betaa*log(u1)
y<- -betaa*log(u2)
x
y

Код работает только в числовой части, генерирует 1000 значений для «X» и «Y». Там, где у меня проблемы, это часть histogram, потому что она ничего не показывает, помечает ошибку

Hist (у1, частота = F, nclass = 10, Col = "серый") Ошибка в hist.default (y1, freq = F, nclass = 10, col = "grey"): «х» должен быть числовым

Я не понимаю, почему, как я могу это исправить?

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 09 мая 2019

Ваша проблема в том, что переменная y1 имеет тип list.

typeof(y1)
[1] "list"

Что вам нужно сделать, это удалить из списка (y1), чтобы оно удвоилось, с чем может работать Hist ().

поэтому коррекция должна быть:

y1 = unlist(y1)
hist(y1,freq=F,nclass=10,col="gray")
...