我使用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
答案 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
我希望这可以提供帮助!