Correlation
在二進制變量和連續變量之間生成隨機相關數據
我想生成兩個變量。一個是二元結果變量(比如成功/失敗),另一個是年齡。我希望年齡與成功呈正相關。例如,在較高年齡段的成功率應該高於在較低年齡段的成功率。理想情況下,我應該能夠控制相關程度。我怎麼做?
謝謝
@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