以矩阵格式从模拟样本创建分布

时间:2013-03-11 01:48:47

标签: r matrix simulation

我有一个统计矩阵,称为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

1 个答案:

答案 0 :(得分: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&gt; = T”以运行您实际想要运行的测试,这可能是双侧测试。