我正在使用基于用户输入的相关矩阵生成随机数据集的数据模拟技术。一段时间后我注意到,一些随机生成的数据集比其他数据集更接近实际的相关矩阵。我想创建一个函数,1)生成数据集,2)将相关矩阵与原始矩阵进行比较,3)重复直到有足够接近的匹配。不幸的是,我被训练为社会科学家而不是程序员,“如果/那么”计算机逻辑对我来说更难理解。根据我在网上找到的资源,这是我所获得的:
#Input Correlation Matrix
sigma <- matrix(c(1.00, -0.03, 0.39, -0.05, -0.08,
-0.03, 1.00, 0.07, -0.23, -0.16,
0.39, 0.07, 1.00, -0.13, -0.29,
-0.05, -0.23, -0.13, 1.00, 0.34,
-0.08, -0.16 ,-0.29, 0.34, 1.00), nr=5, byrow=TRUE)
rownames(sigma) <-c("Exercise", "Hardiness", "Fitness", "Stress", "Illness")
colnames(sigma) <-c("Exercise", "Hardiness", "Fitness", "Stress", "Illness")
#The Choleski Decomposition Random Data Generator
N <- 373
generate <-function(sigma) {
L = chol(sigma)
nvars = dim(L)[1]
r = t(L) %*% matrix(rnorm(nvars*N), nrow=nvars, ncol=N)
r = t(r)
sample <- as.data.frame(r)}
sample <- generate(sigma)
# check if the empirical correlation is close to the theoretical sigma:
correction <- function(sample) {
zigma <- cor(sample)
check <- all.equal(zigma, sigma, tolerance = .0025)
if(check != "TRUE") {
sample <- generate(sigma)
correction(sample)
}
else
return(check)
}
我在运行“更正(样本)”时收到的错误消息是:
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
你认为 if/else 循环有什么问题?我是否应该尝试从循环逻辑以外的另一个角度看待这个问题?
感谢大家愿意分享您的知识和专业知识!