生成相关的序数据

时间:2014-12-08 15:53:15

标签: r simulation correlation

我使用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

1 个答案:

答案 0 :(得分: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

更快更优雅的解决方案是使用jaysunice3401建议的replicate函数:

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

我希望这可以提供帮助!