R 如何使用循环计算增加样本量的P值?

R 如何使用循环计算增加样本量的P值?,r,loops,for-loop,random,R,Loops,For Loop,Random,我在创建for循环时遇到问题。 我想将我的样本量从1增加到200,并在每次新增观察后计算一个p值。 所以,第一个样本1观测值-计算第一个p值,然后样本2观测值-计算第二个p值,然后3。。。多达200次观察,因此我得到200个p值。 观测值将全部从数据帧的一列中取样,并替换 假设数据帧的列称为data$column1。 样本量从1:200每轮增加一个 如何创建一个for循环,以便对每一轮多采样一个观测值并计算一个新的p值? 最后我想画出所有的p值 n <- 1:200 for i in l

我在创建for循环时遇到问题。 我想将我的样本量从1增加到200,并在每次新增观察后计算一个p值。 所以,第一个样本1观测值-计算第一个p值,然后样本2观测值-计算第二个p值,然后3。。。多达200次观察,因此我得到200个p值。 观测值将全部从数据帧的一列中取样,并替换

假设数据帧的列称为data$column1。 样本量从1:200每轮增加一个

如何创建一个for循环,以便对每一轮多采样一个观测值并计算一个新的p值? 最后我想画出所有的p值

n <- 1:200

for i in length(n) {
sample(data$column1,n, replace = TRUE)
pvalue <- t.test(data$column1, alternative = "greater")
}

虽然我知道您可能希望使用for循环,但这是使用sapply或lapply的好机会。我将使用iris演示替代方案。虽然我将对所有样本使用iris$Sepal.Length的不等于5的简化测试,但您应该为特定数据更新alternative=和其他参数

选择1:如果你所需要的只是p值,我们可以捕捉到。。。或者我们可以捕获整个模型并对p值进行第二阶段检索


选择2:我们可以使用其中一个*apply函数,一旦您对R向量代码更加熟悉,它就会读得很好,或者您也可以坚持使用for循环。第一个选项有可读性方面的好处,不过您可能更习惯使用for循环,在这种情况下,您应该预先分配列表/向量。预先定义一个长而空的列表/向量的原因:虽然您可以轻松地将一个没有out的向量连接起来@r2evans有一个很好的答案。我将只关注你的代码,并试图让它的绘图

改善措施包括:

for语法是让i在序列中循环通过每个i。在您的例子中,您实际上希望在2:200中对i执行,因为i==1将无法计算p值。 您的数据样本需要分配给一个变量。事实上,什么也没发生。或者,您可以直接将sample语句放入t.test调用中。 您希望将每个循环的结果保存到pvalue中。如果它按原样工作,pvalue将以循环的最后一个值结束。 我喜欢apply系列,因为您不必显式地预先分配任何内容

set.seed(1)
n <- 50
results <- sapply(seq(2, n)
                  , function(n) {
                   t.test(sample(iris$Sepal.Length, n, replace = T), mu = 5.5, alternative = 'greater')$p.value
                  })

plot(y = results, x = seq(2, n))

理论上,您需要做的就是将iris$Sepal.Length替换为data$column1,并使用您喜欢的任何n。

1它适用于2中的i:lengthn,甚至更好地适用于序列中的i[-1],而不是。。。。2试试pvalues谢谢你的快速回答!我只是试了一下代码,但它还没起作用。这是我第一次使用循环,非常感谢您的帮助!数据$column1如下所示:5,6,8,2,5,6,8,9,5,7,9,3,6,7,9,0,6,5,7,8,0,20,n列每行中的数字R警告消息是:在seq_lenn中:使用了'length.out'参数的第一个元素oops,抱歉。1这是警告,不是错误。2用于序列lennrowdata[-1]中的i或n中的i。我跳过了你对n的定义,我的坏。