Podejście @ ocram na pewno zadziała. Pod względem właściwości zależności jest to jednak nieco restrykcyjne.
Inną metodą jest użycie kopuły do uzyskania wspólnego rozkładu. Możesz określić rozkład krańcowy dla sukcesu i wieku (jeśli masz istniejące dane, jest to szczególnie proste) oraz rodzinę kopuł. Różnicowanie parametrów kopuły da różne stopnie zależności, a różne rodziny kopuł dadzą różne zależności (np. Silna zależność górnej części ogona).
Najnowszy przegląd robienia tego w R za pomocą pakietu copula jest dostępny tutaj . Zobacz także dyskusję w tym dokumencie dla dodatkowych pakietów.
Jednak niekoniecznie potrzebujesz całego pakietu; oto prosty przykład z wykorzystaniem kopuły Gaussa, marginalnego prawdopodobieństwa sukcesu 0,6 i wieku rozproszenia gamma. Zmieniaj r, aby kontrolować zależność.
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))
Wydajność:
Stół:
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
Możesz symulować model regresji logistycznej .
Dokładniej, możesz najpierw wygenerować wartości zmiennej wieku (na przykład stosując rozkład równomierny), a następnie obliczyć prawdopodobieństwo sukcesu za pomocą
Przykład ilustrujący w R:
źródło
źródło