Correlation

在二進制變量和連續變量之間生成隨機相關數據

  • July 10, 2011

我想生成兩個變量。一個是二元結果變量(比如成功/失敗),另一個是年齡。我希望年齡與成功呈正相關。例如,在較高年齡段的成功率應該高於在較低年齡段的成功率。理想情況下,我應該能夠控制相關程度。我怎麼做?

謝謝

@ocram 的方法肯定會奏效。就依賴屬性而言,它有點限制。

另一種方法是使用 copula 導出聯合分佈。您可以指定成功和年齡的邊際分佈(如果您有現有數據,這尤其簡單)和 copula 族。改變copula的參數會產生不同程度的依賴,不同的copula族會給你帶來不同的依賴關係(例如強上尾依賴)。

此處提供了通過 copula 包在 R 中執行此操作的最新概述。另請參閱該論文中的討論以獲取其他軟件包。

不過,您不一定需要整個軟件包;這是一個使用高斯 copula、邊際成功概率 0.6 和伽馬分佈年齡的簡單示例。改變 r 以控制依賴性。

r = 0.8 # correlation coefficient
sigma = matrix(c(1,r,r,1), ncol=2)
s = chol(sigma)
n = 10000
z = s%*%matrix(rnorm(n*2), nrow=2)
u = pnorm(z)

age = qgamma(u[1,], 15, 0.5)
age_bracket = cut(age, breaks = seq(0,max(age), by=5))
success = u[2,]>0.4

round(prop.table(table(age_bracket, success)),2)

plot(density(age[!success]), main="Age by Success", xlab="age")
lines(density(age[success]), lty=2)
legend('topright', c("Failure", "Success"), lty=c(1,2))

輸出:

桌子:

          success
age_bracket FALSE TRUE
   (0,5]    0.00 0.00
   (5,10]   0.00 0.00
   (10,15]  0.03 0.00
   (15,20]  0.07 0.03
   (20,25]  0.10 0.09
   (25,30]  0.07 0.13
   (30,35]  0.04 0.14
   (35,40]  0.02 0.11
   (40,45]  0.01 0.07
   (45,50]  0.00 0.04
   (50,55]  0.00 0.02
   (55,60]  0.00 0.01
   (60,65]  0.00 0.00
   (65,70]  0.00 0.00
   (70,75]  0.00 0.00
   (75,80]  0.00 0.00

在此處輸入圖像描述

引用自:https://stats.stackexchange.com/questions/12857

comments powered by Disqus