【问题标题】:Simulate effect of confounder on two random variables模拟混杂因素对两个随机变量的影响
【发布时间】:2022-11-21 23:34:30
【问题描述】:

我想生成一些数据以显示部分相关性以控制混杂因素。

具体来说,我想生成关于两个不相关的随机变量(比方说语音和记忆)的数据,并使用第三个变量来影响它们(年龄)。

由于混杂年龄,我希望观察到言语和记忆之间的强相关性,如果我控制年龄(即计算年龄的部分相关性),则相同的两个变量之间没有相关性。

也就是说,我无法生成与我的代码的强相关性。


age <- rep(1:10, 10)

speech <- age * abs(rnorm(100))
memory <- age * abs(rnorm(100))

cor(speech, memory) # correlation, it should be high but it's not

residuals_speech <- lm(speech ~ age)$residuals
residuals_memory <- lm(memory ~ age)$residuals

cor(residuals_speech, residuals_memory) # partial correlation controlling for age, it should be around zero

【问题讨论】:

    标签: r data-generation causality


    【解决方案1】:

    随机噪声需要加法,而不是乘法:

    set.seed(1)
    
    age <- rep(1:10, 10)
    
    speech <- age + rnorm(100)
    memory <- age + rnorm(100)
    

    现在我们在言语和记忆之间有很高的相关性:

    cor(speech, memory)
    #> [1] 0.9067772
    

    但是,正如预期的那样,一旦考虑了年龄,残差的相关性就接近于零。

    residuals_speech <- lm(speech ~ age)$residuals
    residuals_memory <- lm(memory ~ age)$residuals
    
    cor(residuals_speech, residuals_memory) 
    #> [1] 0.0001755437
    

    要使语音和记忆在不同的尺度上具有不同的噪声量(如真实数据可能那样),您可以将 age 和随机噪声乘以标量值。这将保留由混杂因素引起的高相关性。

    set.seed(1)
    
    age <- rep(1:10, 10)
    
    speech <- 5 * age + 3 * rnorm(100)
    memory <- 2.1 * age - 2 * rnorm(100)
    
    cor(speech, memory)
    #> [1] 0.9361466
    
    residuals_speech <- lm(speech ~ age)$residuals
    residuals_memory <- lm(memory ~ age)$residuals
    
    cor(residuals_speech, residuals_memory) 
    #> [1] -0.0001755437
    

    创建于 2022-11-21 reprex v2.0.2

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多