Создание коррелированных порядковых данных

Я использую пакет GenOrd для генерации коррелированных порядковых данных. Основная идея состоит в том, чтобы получить коррелированные порядковые данные с корреляцией 0,5, теперь я хочу повторить весь код 1000 раз и сохранить результаты корреляции, чтобы увидеть, насколько близко я могу подойти к корреляции 0,5, затем изменить размер выборки и Предельные вероятности и посмотрим, что изменится.

library(GenOrd)
R<-matrix(c(1,0.5,0.5,1),2,2)
Marginal<-list(c(0.2,0.5,0.7,0.9),c(0.1,0.3,0.4,0.5))
DataOrd<-ordsample(100,Marginal,R)
correlation<-cor(DataOrd)
correlation[1,2] # 0.5269

person Nikola    schedule 08.12.2014    source источник
comment
Вы смотрели ?replicate?   -  person JasonAizkalns    schedule 08.12.2014
comment
Я просто хочу получить результаты 1000 симуляций, то есть 1000 различных корреляций, чтобы увидеть, насколько я могу приблизиться к 0,5.   -  person Nikola    schedule 08.12.2014


Ответы (1)


Вот простое решение:

sim.cor <- function(R, Marginal, n, K)
{
   res <- numeric(length = K)
   for(i in 1:K)
      res[i] <- cor(ordsample(n, Marginal, R))[1,2]
   res
}

где n - размер выборки, а K - количество раз, которое вы хотите повторить. Итак, в вашем примере вы можете вызвать эту функцию и сохранить результат (вектор размера K с корреляциями) в объекте:

set.seed(1234)
correlations <- sim.cor(R = R, Marginal = Marginal, n = 100, K = 1000)
mean(correlations)
[1] 0.5009389

Более быстрое и элегантное решение - использовать функцию replicate, предложенную jaysunice3401:

set.seed(1234)
n <- 100
correlations <- replicate(n = 1000, expr = cor(ordsample(n, Marginal, R))[1,2])
mean(correlations)
[1] 0.5009389

Надеюсь, это поможет!

person Raphael Nishimura    schedule 08.12.2014
comment
идеальное решение. Ценю вашу помощь - person Nikola; 08.12.2014