6

我在使用 Windows 7 Ultimate(Intel Core i5-2400 3GHz 处理器和 8.00GB 内存)的 PC 上运行 R 版本 2.14.0。让我知道是否需要其他规格。

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

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

  1. 基本上,我首先模拟多元正态数据(使用mvrnorm()MASS 中的函数)。
  2. 然后我pnorm()将概率转换应用于这些数据,以便我的新数据向量位于 (0,1) 上。并且根据前面的说法仍然是相关的。
  3. 然后给定这些概率转换数据,我应用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() 警告信息现在让我很头疼。

该小组可以提供的任何帮助将不胜感激。

干杯克里斯

4

1 回答 1

4

错误的原因是用于计算 qbeta 的算法对于这些参数值没有收敛。

R 使用 AS 109 计算 qbeta(Cran,GW,KJ Martin 和 GE Thomas (1977)。备注 AS R19 和算法 AS 109,应用统计,26, 111–114,以及后续备注(AS83 和更正)。)。R 尝试计算 1000 次迭代中的值。如果它不能在 1000 次迭代中,您会收到您看到的错误消息。

这是qbeta的代码。

于 2013-10-24T14:16:23.707 回答