在R中,我有一个47行和30列的矩阵。每个单元格包含一个数值(从0.0到1.0不等)。有些细胞有" NA"而不是数值。
这就是我想做的事情:
非常重要的是,每行(随机)只抽取一个样本,并且每次迭代都会对每一行进行一次采样。
我希望我不要求太多:-) 我感谢任何帮助!
答案 0 :(得分:0)
首先让数据进行试验
set.seed(100)
example <- matrix(runif(47*30), nrow = 47)
example[sample(length(example), 250)] <- NA
现在我们可以计算出手段。 apply
函数会对每行中的随机值进行采样(!is.na
排除NA
值),mean
获取均值,replicate
重复此次10000次。< / p>
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))