【问题标题】:Take one sample per row at a time, compute mean, loop [closed]一次每行取一个样本,计算平均值,循环[关闭]
【发布时间】:2017-03-16 10:49:29
【问题描述】:

在 R 中,我有一个 47 行和 30 列的矩阵。每个单元格包含一个数值(从 0.0 到 1.0 不等)。有些单元格有“NA”而不是数值。

这是我想做的:

  1. 对于每一行,采样一个随机值,直到所有 47 行都采样一次。只能对数值进行采样(应忽略 NA)。
  2. 取这 47 个值,计算平均值,然后存储平均值。
  3. 重复此过程 10,000 次更换。
  4. 确定这 10,000 个均值的 95% 区间 (2.5%-97.5%)。
  5. 绘制 10,000 个均值的直方图,显示 2.5% 和 97.5% 区间的边界。
  6. 确定观察值是落在边界内还是边界外。
  7. 计算观测平均值的 P 值。

重要的是从每一行(随机)抽取一个样本,并且在每次迭代中对每一行进行一次抽样。

我希望我没有要求太多 :-) 感谢您的帮助!

【问题讨论】:

  • 你得到这么多反对票的原因是因为你基本上是给我们一个任务而不是问一个问题。您应该有一个数据示例(使用dput 或代码来创建它,如下面的答案)以及您解决问题的尝试以及您遇到的问题。此外,您要求这么多事情的事实使您似乎没有尝试自己解决这个问题(即与 1 斗争是可以理解的,但是一旦您拥有 4、6 真的很容易,您应该能够做到自己动手)。
  • 谢谢,巴克。我理解你的观点,我承认在你的答案发布之前看到如此多的反对票令人难过。你的回答让我松了一口气。下次我会更具体。真的很感激!
  • 没问题。如果我的回答解决了你的问题,你应该接受。

标签: r loops lapply statistics-bootstrap


【解决方案1】:

首先让我们制作这样的数据来进行实验

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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    相关资源
    最近更新 更多