我在使用Windows 7 Ultimate(英特尔酷睿i5-2400 3GHz处理器,8.00GB内存)的PC上运行R版本2.14.0。如果需要其他规格,请告诉我。
我正在尝试模拟相关的beta分布式数据。我使用的方法是本文所写内容的扩展:
http://onlinelibrary.wiley.com/doi/10.1002/asmb.901/pdf
mvrnorm()
函数)。 pnorm()
将probit变换应用于这些数据,以便我的新数据向量存在于(0,1)。并且根据之前的陈述仍然相关。 qbeta()
函数应用于某些shape1和shape2参数,以获得具有特定均值和色散属性的相关β数据。 我知道存在生成相关beta数据的其他方法。我感兴趣的是qbeta()
导致此方法因某些“种子”而失败的原因。以下是我收到的错误消息。
Warning message:
In qbeta(probit_y0, shape1 = a0, shape2 = b0) :
full precision may not have been achieved in 'qbeta'
这是什么意思?怎么可以避免?当它确实发生在更大模拟的上下文中时,确保此问题不会终止整个源(使用source())模拟代码的最佳方法是什么?
我为1:1000的整数种子运行了以下代码。种子= 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()警告消息现在让我头疼。
非常感谢小组提供的任何帮助。
干杯 克里斯
答案 0 :(得分:2)
错误的原因是用于计算qbeta的算法没有收敛参数的那些值。
R使用AS 109来计算qbeta(Cran,GW,KJ Martin和GE Thomas(1977)。备注AS R19和算法AS 109,应用统计,26,111-114,以及随后的备注(AS83和校正)。 )。 R尝试计算1000次迭代中的值。如果它不能在1000次迭代中,则会收到您看到的错误消息。
以下是qbeta的代码。