0

我有一个统计矩阵,称为 T_{i,j}。然后我模拟了 1000 个样本。我想使用 1000 个样本来构建分布,然后为我观察到的 T_{i,j} 计算 p 值。

示例 T_{i,j} 矩阵如下所示:

         V12         V13        V22        V23       V117       V146
V12  0.009900990 0.008281829 0.01490863 0.01548161 0.01342882 0.01287918
V13  0.008281829 0.031250000 0.04367911 0.04597988 0.03876530 0.03182001
V22  0.014908629 0.043679113 0.50000000 0.36522152 0.45404452 0.09666729
V23  0.015481606 0.045979882 0.36522152 0.50000000 0.47827009 0.10272845
V117 0.013428819 0.038765301 0.45404452 0.47827009 0.50000000 0.09810254
V146 0.012879176 0.031820011 0.09666729 0.10272845 0.09810254 0.09090909

我想做的是轻松获取每个可能条目的 p 值。在上面的矩阵中,有 21 个单独的统计数据,因为对角线以下的所有内容都是上面所有内容的转置。

我意识到我可以使用 for 循环来查看所有样本的每个 (i,j) 条目,对它们进行排序,然后找出我观察到的谎言,但我想知道是否有更简单的 R 方法可以做到这一点?

我在这里放了一组样本数据(通过 dput 输出的数据): http ://temp-share.com/show/3YgF5Ww2x

4

1 回答 1

2

如果 LT 是一些零假设模拟矩阵(如 T)的列表,并且您想要进行单尾检验(例如,上面),那么您可以计算 T 的每个元素低于或等于模拟中的相关值。我正在使用 reduce 来汇总从 lapply 返回的 1000 个矩阵。

ct <- Reduce("+", lapply(LT,function(x) x >= T))

结果是一个与 T 大小相同的矩阵,它计算 (ct) T 的元素被超过(或等于)LT 中矩阵的相应元素的次数。将此矩阵除以模拟样本大小(模拟次数)。

p <- ct / length(LT)

p 是近似 p 值的矩阵,表示零假设模拟至少与观测数据一样极端(在上端)的概率。如果任何 p < alpha,那么在观察的特定元素的情况下,您可能会说零假设是一个糟糕的模型。

调整测试“x >= T”以运行您实际想要运行的测试,这可能是一个双面测试。

于 2013-03-11T11:33:36.557 回答