如何在 R 中模拟多变量结果?

机器算法验证 r 交叉验证
2022-03-04 15:27:29

大多数情况下,我们只处理一个结果/响应变量,例如然而,在某些情况下,特别是在临床数据中,结果变量可能是高维/多变量的。例如,其中包含变量,这些结果都是相关的。如果代表接受治疗(是/否),我如何在 R 中模拟这种类型的数据?y=a+bx+ϵY=βx+ϵYY1Y2Y3x

一个现实生活中的例子,每位患者接受两种类型的搭桥手术中的一种,研究人员在搭桥手术后测量每位患者的疼痛、肿胀、疲劳等(每种症状的比率从 0 到 10)。我“假设”结果(症状严重程度)是多元正常的。希望这个真实的例子可以澄清我的问题。提前谢谢了。

2个回答

用 模拟多元正态值mvtnorm::rmvnorm它似乎不像单变量随机数生成器那样工作,它允许您指定参数向量,但这个限制很容易解决。

例如,考虑模型

E(y1,y2,y3)=(1+x,2x,13x)

其中具有多元正态分布和让我们在 R 中指定这个协方差矩阵:yVar(yi)=1Cov(y1,y2)=Cov(y2,y3)=0.5Cov(y1,y3)=0

sigma <- matrix(c(1,   0.5, 0,  
                  0.5, 1,   0.5,
                  0,   0.5, 1  ), 3, 3)

为了进行实验,让我们通过让变化来为这个模型生成一些数据,每次重复 3 次。我们也必须包括常数项:x110

data <- cbind(rep(1,10*3), rep(1:10,3))

模型确定均值:

beta <- matrix(c(-1,1,  0,2,  1,-3), 2, 3)
means <- data %*% beta

生成多个多元结果的解决方法是使用apply

library(mvtnorm) # Contains rmvnorm
sample <- t(apply(means, 1, function(m) rmvnorm(1, mean=m, sigma=sigma)))

贝叶斯网络(BN) 通常用于您描述的上下文中。作为生成模型,BN 将允许您表示域变量之间的统计依赖关系,在您的情况下,可以将其分组为 1) 预处理、2) 处理和 3) 后处理变量。您可以根据现有患者数据训练模型,然后为特定患者输入证据(填写观察值),以研究观察值如何影响其他变量(包括您标记为结果的变量,即治疗后)。

一个巧妙的技巧是,您实际上可以评估不同治疗类型对结果变量的影响。这称为干预如果有兴趣,我们这里有一篇相关论文。