使用R

时间:2017-03-07 22:30:27

标签: r statistics

您好我尝试使用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个不同的数字作为回报。我该如何修改这段代码?

1 个答案:

答案 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))