r - 如何在要重复 5000 次的 for 循环中找到相关系数?并保存统计

标签 r for-loop correlation normal-distribution

对于 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。

enter image description here

关于r - 如何在要重复 5000 次的 for 循环中找到相关系数?并保存统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54458711/

相关文章:

for-loop - Lua 中的奇怪 "attempt to call a table value"

c - 为什么该程序不起作用?

c++ - 硬件级别的 'for loop' 中发生了什么?内存是自动分配的吗? (C++)

go - 如何得到相关系数的P值

r - 在 for 循环中合并和命名数据帧

使用第一列值作为列名,第二列值作为 r 中的行值 reshape 数据框

r - 如何使用 R 根据组指定添加列数据?

r - 如何跨多个列匹配一列并在新列中返回匹配的 col_name

image - 两幅图像之间的相关性(二值图像)

javascript - 如何在 Webload PT 工具中使用 javascript 进行关联时使用正则表达式提取器?