List For循环使用t-stat函数创建列表

List For循环使用t-stat函数创建列表,list,r,List,R,我正在使用以下函数计算数据帧(x)中数据的t-stat: wilcox.test.all.genes您正在尝试生成经验性的p值,由于数据中有多个列,因此针对您正在进行的多重比较进行了更正。首先,让我们模拟一个示例数据集: # Simulate data n.row = 100 n.col = 10 set.seed(12345) group = factor(sample(2, n.row, replace=T)) data = data.frame(matrix(rnorm(n.row*n

我正在使用以下函数计算数据帧(x)中数据的t-stat:


wilcox.test.all.genes您正在尝试生成经验性的p值,由于数据中有多个列,因此针对您正在进行的多重比较进行了更正。首先,让我们模拟一个示例数据集:

# Simulate data
n.row = 100
n.col = 10

set.seed(12345)
group = factor(sample(2, n.row, replace=T))
data  = data.frame(matrix(rnorm(n.row*n.col), nrow=n.row))
计算每个列的Wilcoxon检验,但我们将在排列观察值的类成员时重复多次。这给了我们这个检验统计量的经验零分布

# Re-calculate columnwise test statisitics many times while permuting class labels
perms = replicate(500, apply(data[sample(nrow(data)), ], 2, function(x) wilcox.test(x[group==1], x[group==2], exact=F, alternative="two.sided", correct=T)$stat))
通过在多重比较中折叠,计算最大测试统计的零分布

# For each permuted replication, calculate the max test statistic across the multiple comparisons
perms.max = apply(perms, 2, max)
通过对结果进行简单排序,我们现在可以确定p=0.05的临界值

# Identify critical value 
crit = sort(perms.max)[round((1-0.05)*length(perms.max))]
我们还可以根据临界值绘制分布图

# Plot 
dev.new(width=4, height=4)
hist(perms.max)
abline(v=crit, col='red')


最后,将真实测试统计数据与此分布进行比较将得到一个经验p值,通过将族误差控制为p来校正多次比较。您正试图生成经验p值,由于数据中有多个列而校正多次比较。首先,让我们模拟一个示例数据集:

# Simulate data
n.row = 100
n.col = 10

set.seed(12345)
group = factor(sample(2, n.row, replace=T))
data  = data.frame(matrix(rnorm(n.row*n.col), nrow=n.row))
计算每个列的Wilcoxon检验,但我们将在排列观察值的类成员时重复多次。这给了我们这个检验统计量的经验零分布

# Re-calculate columnwise test statisitics many times while permuting class labels
perms = replicate(500, apply(data[sample(nrow(data)), ], 2, function(x) wilcox.test(x[group==1], x[group==2], exact=F, alternative="two.sided", correct=T)$stat))
通过在多重比较中折叠,计算最大测试统计的零分布

# For each permuted replication, calculate the max test statistic across the multiple comparisons
perms.max = apply(perms, 2, max)
通过对结果进行简单排序,我们现在可以确定p=0.05的临界值

# Identify critical value 
crit = sort(perms.max)[round((1-0.05)*length(perms.max))]
我们还可以根据临界值绘制分布图

# Plot 
dev.new(width=4, height=4)
hist(perms.max)
abline(v=crit, col='red')


最后,将一个真实的测试统计数据与这个分布进行比较,会得到一个经验的p值,通过控制p的家庭误差,对多重比较进行修正。下面的答案是有效的,但我仍然有点不清楚你到底想做什么。将实际测试统计数据与这些排列的分布输出进行比较,将得到一个经验p值。但是,您提到了使用最大值,如果您正在进行许多类似的测试,则通常使用最大值来校正多重比较。我的困惑是,你的x是一个向量,你只执行了一个测试。不管怎样,如果你澄清一点,我很乐意相应地编辑我的答案。我使用的数据框包含来自两类个人的数据,我正在根据类别分割数据。该函数是对两个类的数据进行的Wilcox检验。在初始测试完成后,我想洗牌数据帧的列,再次执行该函数,从新数据中获取最大测试统计数据,并将该数字保存到列表中。我想执行500次洗牌,从洗牌后的数据中得到500个最大测试统计数据的列表。我将使用这个测试统计列表来确定95%的测试统计,以便与原始数据集进行比较。谢谢,我明白了。我就是这么想的。如果您提供示例数据会有所帮助,因为我们无法知道您有数据帧。此外,还有一点混淆,因为像这样进行排列测试,您排列的是类标签(即行),而不是列。有关您的解决方案,请参见下面我编辑的答案。祝你好运下面的答案是可行的,但我还是有点不清楚你到底想做什么。将实际测试统计数据与这些排列的分布输出进行比较,将得到一个经验p值。但是,您提到了使用最大值,如果您正在进行许多类似的测试,则通常使用最大值来校正多重比较。我的困惑是,你的x是一个向量,你只执行了一个测试。不管怎样,如果你澄清一点,我很乐意相应地编辑我的答案。我使用的数据框包含来自两类个人的数据,我正在根据类别分割数据。该函数是对两个类的数据进行的Wilcox检验。在初始测试完成后,我想洗牌数据帧的列,再次执行该函数,从新数据中获取最大测试统计数据,并将该数字保存到列表中。我想执行500次洗牌,从洗牌后的数据中得到500个最大测试统计数据的列表。我将使用这个测试统计列表来确定95%的测试统计,以便与原始数据集进行比较。谢谢,我明白了。我就是这么想的。如果您提供示例数据会有所帮助,因为我们无法知道您有数据帧。此外,还有一点混淆,因为像这样进行排列测试,您排列的是类标签(即行),而不是列。有关您的解决方案,请参见下面我编辑的答案。祝你好运