23 votos

Generar al azar correlación de datos entre un binario y una variable continua

Quiero generar dos variables. Uno es binaria variable de resultado (es decir que el éxito / fracaso) y la otra es la edad en años. Quiero partir de que edad se correlaciona positivamente con el éxito. Por ejemplo no debe ser más éxitos en la mayor edad de los segmentos que en la inferior. Idealmente debería estar en posición de controlar el grado de correlación. ¿Cómo puedo hacer eso?

Gracias

28voto

ocram Puntos 9992

Usted puede simular el modelo de regresión logística.

Más precisamente, puede generar primero los valores de la variable edad (por ejemplo, utilizando una distribución uniforme) y, a continuación, calcular las probabilidades de éxito en el uso

$$\pi ( x ) = \frac{\exp(\beta_0 + \beta_1 x)}{1 + \exp(\beta_0 + \beta_1 x)}$$

where $\beta_0$ and $\beta_1$ are constant regression coefficients to be specified. In particular, $\beta_1$ controls the magnitude of association between success and age.

Having values of $\pi$, usted puede ahora generar valores binario para la variable de resultado usando la distribución de Bernoulli.

Ejemplo ilustrativo en 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

21voto

Shawn Puntos 8120

@ocram del enfoque sin duda el trabajo. En términos de la dependencia de las propiedades es algo restrictiva, aunque.

Otro método es el uso de una cópula para obtener una distribución conjunta. Puede especificar distribuciones marginales para el éxito y la edad (si tiene los datos existentes esto es especialmente simple) y una cópula de la familia. Variando los parámetros de la cópula producirá diferentes grados de dependencia, y de diferentes cópula familias te dará varias relaciones de dependencia (por ejemplo, fuerte en la cola superior de la dependencia).

Una reseña reciente de hacerlo en R a través de la cópula paquete está disponible aquí. Véase también la discusión en la que el papel de paquetes adicionales.

Usted no necesita necesariamente un paquete completo; ya que, he aquí un ejemplo simple del uso de una cópula Gaussiana, marginales de la probabilidad de éxito 0.6, gamma y distribuye las edades. Varían de r para el control de la dependencia.

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))

Salida:

Tabla:

           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

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X