创建具有指定关联度(相关)矩阵的多个分类变量

机器算法验证 相关性 分类数据 随机生成
2022-04-17 07:37:24

假设我想生成具有特定关联矩阵的数据。我将phi 系数作为关联程度的衡量标准。

以下是使用 R 的示例。

    require(psych)
    var1 <- sample(c("P", "A"), 10000, replace = TRUE)
    var2 <- sample(c("P", "A"), 10000, replace = TRUE)
    mydf <- data.frame (var1, var2)

  # degree of association 
  require(psych) 
 # No association case:  
 # random variables means 0 association expected 
  phi(table(var1, var2))
   [1] -0.01

# copy of same variable, 1 association expected. 
var3 <- var1
phi(table(var1, var3))

假设我在四个分类变量之间有 4 x 4 的phi 系数矩阵。说下面是关联矩阵(就像相关矩阵一样)

amat <- matrix (c(1,0.5,0.4, 0.3, 0.5,1,0.5,0.3, 0.4,0.5,1,0.2, 0.3, 0.3, 0.2,1), 4)
rownames(amat) <- c("VarA", "VarB", "VarC", "VarD")
colnames (amat) <- c("VarA", "VarB", "VarC", "VarD")
amat 
      VarA  VarB   VarC  VarD
VarA   1     0.5    0.4   0.3
VarB   0.5     1     0.5  0.3
VarC  0.4     0.5    1    0.2
VarD  0.3     0.3    0.2   1

有什么方法可以生成一个包含四个变量的数据,其中大约有 10000 个观察值,这些变量大致保持上述关联?

我从帖子中知道我们如何在定量变量中做类似的事情。这些示例不需要特定于 R,我只想知道可以翻译成任何编程语言的想法。

1个回答

如果变量只是二分的,您可以将它们视为二项式。然后工作变得更容易。该软件包bindata可以模拟具有指定相关性的多元分布。只是手册中的小例子

  amat <- cbind(c(1/2,1/5,1/6),c(1/5,1/2,1/6),c(1/6,1/6,1/2))

 require(bindata)
  out <- rmvbin(n=100,commonprob=amat) # n number of samples, 

  # you can replace 0 and 1 with text variable 
  out[out==1] <- "A"
  out[out==0] <- "P"

 require(psych) 
  phi(table (out[,1], out[,2])

详细讨论了本文的基本原理和方法[链接到pdf]

此外,对于相关序数数据的模拟,本文还讨论了另一个称为ordatadetails 底层方法的包

我知道你可能想要更多,但这是我考虑到的,到目前为止还没有答案。