【发布时间】:2020-01-31 14:24:08
【问题描述】:
下一个可重现的代码生成 183 个随机法线的 394 个观察值,并尝试将它们与 Cholesky 分解相关:
生成参数
d <- 211
l <- 183
m <- -0.006495094
vectorsd <- rep(0.29, 183)
生成不相关的随机法线
rnormd <- as.data.frame(rnorm(l, mean = m, sd = vectorsd))
for (i in 1:(d+l)) {
rnormd[,i] <- rnorm(l, mean = m, sd = vectorsd)
}
生成随机半定正相关矩阵
v <- runif(183,0.6,0.8)
corr <- `diag<-`(tcrossprod(v),1)
生成cholesky矩阵
cholesky <- chol(corr)
关联法线并转置输出
rnormd <- t(t(rnormd)%*%cholesky)
在最后一条指令中我得到了错误
rnormd * cholesky 中的错误:不一致的数组
一开始以为转置我的cholesky矩阵可以解决问题,但后来我意识到chol()函数已经转置了它。
谁能帮帮我?
【问题讨论】:
-
cholesky %*% as.matrix(rnormd)呢? -
t(as.matrix(rnormd)) %*% cholesky工作正常。您需要确保 (1) 使用矩阵乘法%*%而不是 (*),以及 (2) A 的 ncol 等于A %*% B中 B 的 nrow -
@dww 所以,问题在于它不会自动强制转换为矩阵格式。有效。赞成
-
NP。顺便说一句,您为什么首先转换为 data.frame ?似乎整个计算最好用矩阵来完成
-
投票结束是一个错字,因为只是对非矩阵执行矩阵乘法
标签: r random normal-distribution