Створення випадкових корельованих даних між бінарною та суцільною змінною


23

Я хочу генерувати дві змінні. Один - бінарний змінний результат (скажімо, успіх / невдача), а другий - вік у роках. Я хочу, щоб вік позитивно співвідносився з успіхом. Наприклад, має бути більше успіхів у старших вікових сегментах, ніж у нижчих. В ідеалі я повинен бути в змозі контролювати ступінь кореляції. Як це зробити?

Спасибі

Відповіді:


20

Підхід @ ocram, безумовно, спрацює. Щодо властивостей залежності, то це дещо обмежує.

Інший метод - використовувати копулу для отримання спільного розподілу. Ви можете вказати граничні розподіли за успіхом та віком (якщо у вас є наявні дані, це особливо просто) та сімейство копул. Варіювання параметрів копули призведе до різного ступеня залежності, а різні сімейства копул дадуть вам різні залежності (наприклад, сильна залежність верхнього хвоста).

Нещодавній огляд цього в 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

введіть тут опис зображення


Чудова відповідь! Копули - прекрасний, якщо недооцінений інструмент. Пробітова модель (з гауссовою граничною суцільною змінною) є особливим випадком моделі копули Гаусса. Але це набагато більш загальне рішення.
jpillow

1
@JMS: +1 Так, Copulas дуже привабливі. Я повинен спробувати вивчити їх більш детально!
окрам

@jpillow Дійсно; Моделі копули Гаусса містять багатовимірні моделі пробітного типу будь-якого типу. Через змішування шкали вони також поширюються на t / логістичні капули та моделі logit / robit. Tres cool :)
JMS

@ocram Роби! У змішаних контекстах даних є багато відкритих питань (коли їх використовуєш як моделі, а не просто малюєш із них), які люди, як я, хотів би бачити вирішеними ...
JMS

@JMS Відмінна відповідь!
користувач333

28

Ви можете змоделювати модель логістичної регресії .

Точніше, ви можете спочатку генерувати значення для вікової змінної (наприклад, використовуючи рівномірний розподіл), а потім обчислити ймовірності успіху за допомогою

π(х)=досвід(β0+β1х)1+досвід(β0+β1х)

β0β1β1

π

Ілюстративний приклад в R:

n <- 10
beta0 <- -1.6
beta1 <- 0.03
x <- runif(n=n, min=18, max=60)
pi_x <- exp(beta0 + beta1 * x) / (1 + exp(beta0 + beta1 * x))
y <- rbinom(n=length(x), size=1, prob=pi_x)
data <- data.frame(x, pi_x, y)
names(data) <- c("age", "pi", "y")
print(data)

         age        pi y
 1  44.99389 0.4377784 1
 2  38.06071 0.3874180 0
 3  48.84682 0.4664019 1
 4  24.60762 0.2969694 0
 5  39.21008 0.3956323 1
 6  24.89943 0.2988003 0
 7  51.21295 0.4841025 1
 8  43.63633 0.4277811 0
 9  33.05582 0.3524413 0
 10 30.20088 0.3331497 1

3
Хороша відповідь, хоча з естетичної точки зору ( не практична) модель регресії пробіту може бути ще приємнішою. Пробітова модель еквівалентна починаючи з двовимірного гауссового РВ і порогового значення одного з них (до нуля або 1). Дійсно, це просто передбачає підстановку гауссова кумулятивної нормальної функції ("пробіт") на логіт, що використовується в логістичній регресії. Практично це повинно давати таку ж ефективність (і обчислювально повільніше, оскільки normcdf дорого оцінювати (1 + e ^ x) ^ - 1), але приємно думати про Гаусса з однією з цензур, підданих цензурі ("закругленою").
jpillow

@jpillow: Дякую за Ваш коментар. Я подумаю про це якнайшвидше!
ocram

1
Що стосується моделі копули пробіта / Гаусса, це те, що параметри мають форму коваріаційної матриці між двома величинами (одна з яких потім бінаризується на 0 і 1). Тож це приємно з точки зору інтерпретаційності (але не так приємно з точки зору зручності обчислення).
jpillow

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.