我需要找到一种方法来获取我使用自定义函数获得的估计值的引导置信区间。现在,问题是我有一个大矩阵,我从中随机取出行,然后计算所需的数量。
这是(希望)可重现的示例
生成相似的随机数据:
mat1 <- matrix(rnorm(300, 80, 20), nrow = 100)
计算所需量的函数(其中 R 是相关矩阵):
IIvar <- function(R) {
d <- eigen(R)$values
p <- length(d)
sum((d-1)^2)/(p*(p-1))}
我尝试解决方案的函数(其中 omat 是由一些 mat1 行组成的较小矩阵,freq 是 omat 中的行数,numR 是复制数):
ciint <- function(omat, mat1, freq, numR) {
II <- IIvar(cor(omat))
n <- dim(mat1)[1]
b <- numeric(numR)
for (i in 1:numR) { b[i] <- IIvar(cor(mat1[sample(c(1:n),freq),]))}
hist(b)
abline(v = II, lty = 5, lwd = 3)
return(b) }
结果向量 b 具有从 mat1 中随机选择的行(由 freq 确定的数量)的矩阵获得的所有值,这些值可以与来自 omat 的 IIvar(由总体成员资格选择的行的矩阵)进行比较。
在 mat1 中,我有 5 个群体(按行分组),我需要分别计算所有这些群体的 IIvar,并为获得的值生成置信区间。
当我像这样运行我的 ciint 函数时
ciint(omat, mat1, 61, 1000)
我得到了值的分布,以及“真实”IIvar 值的位置,但我不知道如何从这一点生成 95% 的间隔。