Я думаю, что вы были почти там.Вы просто должны были переместить некоторый код снаружи и внутри цикла for.
Вам нужны новые данные для каждого запуска цикла (в противном случае вы получаете одинаковую корреляцию 5000 раз), и вам необходимо сохранять корреляцию при каждом запуске цикла.В результате получается вектор из 5000 корреляций, который можно использовать для просмотра доли корреляций (поделенных на количество прогонов, а не на количество наблюдений), которые выше, чем .3 вне цикла for.
Редактировать: необходимо заключительное исправление в скобках абсолютной функции.Вы хотите найти абсолютные корреляции> .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.