模拟随机变量X和Y

时间:2019-05-09 18:16:50

标签: r algorithm random statistics simulation

我有以下算法来生成X和Y的值。

步骤1.生成U1,U2〜U(0,1)

步骤2。t = -beta * log(U1 * U2)

第3步:生成U3〜U(0,1)

步骤4。X= t * U3,Y = t-X


请注意,您可以通过生成U1和U2并定义X = -beta * log(U1)和Y = -beta * log(U2)来比较生成X和Y的方式


这是我在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

该代码仅在数字部分起作用,为“ X”和“ Y”生成1000个值。我遇到问题的地方是histogram的一部分,因为它没有显示任何内容,表明存在错误

  

hist(y1,freq = F,nclass = 10,col =“ gray”)   hist.default(y1,freq = F,nclass = 10,col =“ gray”)中的错误:     'x'必须是数字

我不明白为什么,该如何解决?

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的问题是变量y1的类型为list。

typeof(y1)
[1] "list"

您需要做的是取消列出(y1),以便将hist()可以使用的两倍。

因此更正必须是:

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