我在使用Windows 7 Ultimate(带8.00GB内存的Intel Core i5-2400 3GHz处理器)的PC上运行R版本2.14.0。让我知道是否需要其他规范。
我正在尝试模拟相关的Beta分布式数据。我使用的方法是对本文内容的扩展:
http://onlinelibrary.wiley.com/doi/10.1002/asmb.901/pdf
mvrnorm()
函数)。 pnorm()
将概率转换应用于这些数据,这样我的新数据向量将继续存在(0,1)。并且仍然根据前面的陈述进行关联。 qbeta()
函数与特定的shape1和shape2参数一起应用,以获取具有一定均值和分散特性的相关beta数据。 我知道还有其他生成相关Beta数据的方法。我对
qbeta()
为什么导致某些“种子”无法通过此方法感兴趣。以下是我收到的错误消息。Warning message:
In qbeta(probit_y0, shape1 = a0, shape2 = b0) :
full precision may not have been achieved in 'qbeta'
这是什么意思?如何避免呢?当确实在较大的仿真环境中发生问题时,确保该问题不会终止整个源代码(使用source())仿真代码的最佳方法是什么?
我为1:1000的整数种子运行了以下代码。 Seed = 899是唯一给我带来麻烦的值。尽管如果这里有问题,那么对于其他种子也不可避免地也会有问题。
library(MASS)
set.seed(899)
n0 <- 25
n1 <- 25
a0 <- 0.25
b0 <- 4.75
a1 <- 0.25
b1 <- 4.75
varcov_mat <- matrix(rep(0.25,n0*n0),ncol=n0)
diag(varcov_mat) <- 1
y0 <- mvrnorm(1,mu=rep(0,n0),Sigma=varcov_mat)
y1 <- mvrnorm(1,mu=rep(0,n1),Sigma=varcov_mat)
probit_y0 <- pnorm(y0)
probit_y1 <- pnorm(y1)
beta_y0 <- qbeta(probit_y0, shape1=a0, shape2=b0)
beta_y1 <- qbeta(probit_y1, shape1=a1, shape2=b1)
上面的代码是一个较大的仿真项目的一部分。但是,qbeta()警告消息现在让我头疼。
该小组可以提供的任何帮助将不胜感激。
干杯
克里斯
最佳答案
产生该错误的原因是,用于计算qbeta的算法未针对这些参数值收敛。
R使用AS 109来计算qbeta(Cran,G. W.,K. J. Martin和G. E. Thomas(1977)。注释AS R19和算法AS 109,Applied Statistics,26,111–114,以及随后的注释(AS83和更正)。)。 R尝试在1000次迭代中计算该值。如果它不能在1000次迭代中,您将看到错误消息。
这是qbeta的代码。