我有以下算法来生成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'必须是数字
我不明白为什么,该如何解决?
有人可以帮忙吗?
答案 0 :(得分:0)
您的问题是变量y1的类型为list。
typeof(y1)
[1] "list"
您需要做的是取消列出(y1),以便将hist()可以使用的两倍。
因此更正必须是:
y1 = unlist(y1)
hist(y1,freq=F,nclass=10,col="gray")