一次每行取一个样本,计算平均值,循环
Take one sample per row at a time, compute mean, loop
在 R 中,我有一个 47 行 30 列的矩阵。每个单元格包含一个数值(从 0.0 到 1.0 不等)。有些单元格有 "NA" 而不是数值。
这就是我想做的事情:
- 对于每一行,抽取一个随机值,直到所有 47 行都被抽取一次。只能对数值进行采样(应忽略 NA)。
- 取这 47 个值,计算平均值并存储平均值。
- 重复此过程 10,000 次并进行替换。
- 确定这10000个均值的95%区间(2.5%-97.5%)。
- 绘制 10,000 均值的直方图,显示 2.5% 和 97.5% 区间的边界。
- 确定观测值是落在边界内还是边界外。
- 计算观察到的平均值的 P 值。
重要的是,每行(随机)只抽取一个样本,并且在每次迭代中对每一行进行一次抽样。
我希望我没有要求太多:-)
感谢您的帮助!
首先让我们制作 so 数据进行实验
set.seed(100)
example <- matrix(runif(47*30), nrow = 47)
example[sample(length(example), 250)] <- NA
现在我们可以计算均值了。 apply
函数从每一行中抽取一个随机值(!is.na
排除 NA
值),mean
获取平均值,然后 replicate
重复此 10000 次。
exmeans <- replicate(10000, mean(apply(example, 1,
function(x) sample(x[!is.na(x)], 1))))
可以通过两种不同的方式计算置信区间。第一个使用示例均值作为经验分布并从中计算均值,第二个使用正态分布来计算概率。
confint <- quantile(exmeans, c(0.025, 0.975))
confint <- qnorm(c(0.025, 0.975), mean = mean(exmeans), sd = sd(exmeans))
接下来是你想要的地块
hist(exmeans)
abline(v = confint, col = "red")
最后是p值信息。我们可以再次使用经验分布或正态分布。这些为分布的下尾提供 p 值,对上尾使用 1 - result
。
newvalue > confint[1] & newvalue < confint[2]
ecdf(exmeans)(newvalue)
pnorm(newvalue, mean = mean(exmeans), sd = sd(exmeans))
在 R 中,我有一个 47 行 30 列的矩阵。每个单元格包含一个数值(从 0.0 到 1.0 不等)。有些单元格有 "NA" 而不是数值。
这就是我想做的事情:
- 对于每一行,抽取一个随机值,直到所有 47 行都被抽取一次。只能对数值进行采样(应忽略 NA)。
- 取这 47 个值,计算平均值并存储平均值。
- 重复此过程 10,000 次并进行替换。
- 确定这10000个均值的95%区间(2.5%-97.5%)。
- 绘制 10,000 均值的直方图,显示 2.5% 和 97.5% 区间的边界。
- 确定观测值是落在边界内还是边界外。
- 计算观察到的平均值的 P 值。
重要的是,每行(随机)只抽取一个样本,并且在每次迭代中对每一行进行一次抽样。
我希望我没有要求太多:-) 感谢您的帮助!
首先让我们制作 so 数据进行实验
set.seed(100)
example <- matrix(runif(47*30), nrow = 47)
example[sample(length(example), 250)] <- NA
现在我们可以计算均值了。 apply
函数从每一行中抽取一个随机值(!is.na
排除 NA
值),mean
获取平均值,然后 replicate
重复此 10000 次。
exmeans <- replicate(10000, mean(apply(example, 1,
function(x) sample(x[!is.na(x)], 1))))
可以通过两种不同的方式计算置信区间。第一个使用示例均值作为经验分布并从中计算均值,第二个使用正态分布来计算概率。
confint <- quantile(exmeans, c(0.025, 0.975))
confint <- qnorm(c(0.025, 0.975), mean = mean(exmeans), sd = sd(exmeans))
接下来是你想要的地块
hist(exmeans)
abline(v = confint, col = "red")
最后是p值信息。我们可以再次使用经验分布或正态分布。这些为分布的下尾提供 p 值,对上尾使用 1 - result
。
newvalue > confint[1] & newvalue < confint[2]
ecdf(exmeans)(newvalue)
pnorm(newvalue, mean = mean(exmeans), sd = sd(exmeans))