'qbeta'可能没有实现全精度

时间:2013-06-12 15:43:11

标签: r simulation beta-distribution

我在使用Windows 7 Ultimate(英特尔酷睿i5-2400 3GHz处理器,8.00GB内存)的PC上运行R版本2.14.0。如果需要其他规格,请告诉我。

我正在尝试模拟相关的beta分布式数据。我使用的方法是本文所写内容的扩展:

http://onlinelibrary.wiley.com/doi/10.1002/asmb.901/pdf

  1. 基本上,我首先模拟多元正常数据(使用MASS中的mvrnorm()函数)。
  2. 然后我使用pnorm()将probit变换应用于这些数据,以便我的新数据向量存在于(0,1)。并且根据之前的陈述仍然相关。
  3. 然后给出这些概率转换数据,我将qbeta()函数应用于某些shape1和shape2参数,以获得具有特定均值和色散属性的相关β数据。
  4. 我知道存在生成相关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()警告消息现在让我头疼。

    非常感谢小组提供的任何帮助。

    干杯 克里斯

1 个答案:

答案 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的代码。