对于 2 个独立的正态分布变量 x 和 y,使用 x = rnorm(50) 和 y = rnorm(50) 找到它们。计算相关性5000次并每次保存结果。计算绝对值大于 0.3 的相关性的可能性是多少? (默认 set.seed(42) 并绘制系数传播的直方图)
这是我迄今为止尝试过的...
set.seed(42)
n <- 50 #length of random sequence
x_norm <- rnorm(n)
y_norm <- rnorm(n)
nrun <- 5000
corr <- numeric(nrun)
for (i in 1:nrun) {
corrxy <- cor(x_norm,y_norm)
corr[i] <- sum(abs(corrxy > 0.3)) / n #save statistic in the vector
}
hist(corr)
预计我会在 [i] 中保存 5000 个不同的系数数字,并且当使用 hist(0) 绘制时,这些系数应该遵循近似正态分布。但我不明白 for 循环如何工作以及如何合并大于 0.3 的系数值。
最佳答案
我想你快到了。您只需要在 for 循环内外移动一些代码。
您需要每次循环运行的新数据(否则您会获得 5000 次相同的相关性),并且每次循环运行时都需要保存相关性。这会产生一个包含 5000 个相关性的向量,您可以使用它来查看在 for 循环之外高于 0.3 的相关性比例(除以运行次数,而不是观察次数)。
编辑:在绝对函数的括号中需要最后一次更正。您想找到绝对相关性 > .3 而不是 corrxy > .3
的绝对值.
set.seed(42)
n <- 50 #length of random sequence
nrun <- 5000
corrxy <- numeric(nrun) # The correlation is the statistic you want to save
for (i in 1:nrun) {
x_norm <- rnorm(n) # Compute a new dataset for each run (otherwise you get the same correlation)
y_norm <- rnorm(n)
corrxy[i] <- cor(x_norm,y_norm) # Calculate the correlation
}
hist(corrxy)
sum(abs(corrxy) > 0.3) / nrun # look at the proportion of runs that have cor > .3
下面是 5000 个相关性的结果直方图。高于|.3|的相关性比例在这种情况下是 0.034。
关于r - 如何在要重复 5000 次的 for 循环中找到相关系数?并保存统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54458711/