您好我尝试使用R来编写dtnorm()和rtnorm()函数。 (msm包中的相同内容)
这是我写的代码:
rtnorm<-function(mu=0,sd=1,a=-Inf,b=Inf)
{
F<-runif(n=length(mu))
Fa<-pnorm((a-mu)/sd,0,sd=1)
Fa[a== -Inf] <-0
Fb<-pnorm((b-mu)/sd,0,sd=1)
Fb[b==Inf]<-1
y<-mu+sd*qnorm(F*(Fb-Fa)+Fa)
y
}
然而,当我测试它时,它只给我一个数字作为回报,但是当我使用msm包时,它给了我10个不同的数字作为回报。我该如何修改这段代码?
答案 0 :(得分:1)
这是因为你设置了mu=0
。长度为1.尝试设置mu=rep(0,10)
以获取10个数字。例如:
rtnorm<-function(mu,sd=1,a=-Inf,b=Inf)
{
F<-runif(n=length(mu))
Fa<-pnorm((a-mu)/sd,0,sd=1)
Fa[a== -Inf] <-0
Fb<-pnorm((b-mu)/sd,0,sd=1)
Fb[b==Inf]<-1
y<-mu+sd*qnorm(F*(Fb-Fa)+Fa)
y
}
rtnorm(mu=rep(0,10))