【问题标题】:Generate two categorical variables with a chosen degree of association in R在 R 中生成两个具有选定关联度的分类变量
【发布时间】:2013-12-02 14:36:15
【问题描述】:

我想使用 R 生成两个分类变量(例如眼睛颜色和头发颜色),我可以在其中指定这两个变量的关联程度。对我来说,眼睛颜色的级别与头发颜色的级别相关并不重要,但能够指定整体关联,例如通过指定优势比,是一项要求。另外,我知道有一些方法可以对两个正态分布的连续变量执行此操作,例如使用 mvtnorm 包,所以我可以采取这条路线,然后选择切点以使变量在事后成为分类变量,但我没有如果我能避免的话,我不想那样做。任何帮助将不胜感激!

编辑:很抱歉从一开始就没有更清楚,但我真正想问的是,在某个 R 包中是否有任何人都知道的函数可以在一两行中完成此操作。

【问题讨论】:

  • IMO,这个问题可以说属于Cross Validated(即stats.SE),而不是这里。这让我觉得这更像是一个理解想法的问题,而不是如何编程的问题。
  • 我认为我对它背后的想法有相当的了解。也许不是费舍尔式的,但相当不错。这更像是一个“我想向我建议一个快速的 R 解决方案”的问题,所以我认为 Stack Overflow 更好。如果我错了,我深表歉意。

标签: r simulation categorical-data


【解决方案1】:

如果您可以指定优势比(并且您还需要指定基线优势),您只需将它们转换为概率并使用runif()

编辑(我误解了问题):看看bindata package


如果你喜欢,这里有一个我写的函数,你可以在没有包的情况下使用它来生成这样的数据。它相当笨重;它的目的是不言自明,而不是优雅或快速。

odds.to.probs <- function(odds){
  probs <- odds / (odds+1)
  return(probs)
}

get.correlated.binary.data <- function(N, odds.x.eq.0, odds.y.eq.0.x.eq.0, 
                                       odds.ratio){
  odds.y.eq.0.x.eq.1 <- odds.y.eq.0.x.eq.0*odds.ratio
  prob.x.eq.0        <- odds.to.probs(odds.x.eq.0)
  prob.y.eq.0.x.eq.0 <- odds.to.probs(odds.y.eq.0.x.eq.0)
  prob.y.eq.0.x.eq.1 <- odds.to.probs(odds.y.eq.0.x.eq.1)

  x <- ifelse(runif(N)<=prob.x.eq.0, 0, 1)
  y <- rep(NA, N)
  y <- ifelse(x==0, ifelse(runif(sum(x))<=prob.y.eq.0.x.eq.0,       0, 1), y)
  y <- ifelse(x==1, ifelse(runif( (N-sum(x)) )<=prob.y.eq.0.x.eq.1, 0, 1), y)

  dat <- data.frame(x=x, y=y)
  return(dat)
}

> set.seed(9)
> dat <- get.correlated.binary.data(30, 3, 1.5, -.03)
> table(dat)
   y
x    0  1
  0 10 13
  1  0  7

【讨论】:

  • 是的,这正是我所需要的。谢谢!
  • 不客气,@psychometriko。我还编写了一个函数,可以让你在一行中生成这些(抱歉延迟,我正在做其他事情)。如果您愿意,使用该软件包没有问题;这只是让你不要。此外,这与包的工作方式不同,后者通过转换相关法线 (IIRC) 工作,而这通过优势和优势比工作。
  • @gung-ReinstateMonica 我刚刚在阅读您的解决方案,它看起来非常时尚。知道我怎么能做同样的事情,但相对风险而不是优势比?我可以添加另一个问题,或者如果您愿意,我们可以聊天。
  • @mandella,如果没有基准利率,相对风险就没有意义,例如:.02/.01 != .98/.49。因此,只需指定您感兴趣的基本利率和相对风险,然后您就有两个比例。您可以将这 2 个比例转换为 OR & 求解。
猜你喜欢
  • 2019-12-08
  • 2015-07-20
  • 2023-03-08
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2021-04-13
  • 2021-04-07
  • 1970-01-01
相关资源
最近更新 更多