8 votos

Simular la regresión de los datos con la variable dependiente que no están normalmente distribuidos

Para el análisis de regresión, a menudo es útil para conocer los datos de proceso de generación de ver cómo se utiliza el método funciona. Aunque es bastante simple de hacer esto para una regresión lineal simple, este no es el caso cuando la variable dependiente tiene que seguir una distribución específica.

Considere la posibilidad de una regresión lineal simple:

N    <- 100
x    <- rnorm(N)
beta <- 3 + 0.4*rnorm(N)
y    <- 1 + x * beta + .75*rnorm(N)

Hay alguna forma de utilizar el mismo enfoque pero para llegar y ser distinta de la normal, se habla de izquierda sesgada?

10voto

Sean Hanley Puntos 2428

Si entiendo tu pregunta correctamente, esto es bastante fácil. Usted sólo tiene que decidir qué distribución que usted quiere que sus errores, y el uso de la correspondiente generación aleatoria de la función.

Hay un número de distribuciones sesgadas, por lo que necesita para averiguar cuál de ellos te gusta. Además, la mayoría de las distribuciones sesgadas (por ejemplo, log normal, chi-cuadrado, Gamma, Weibull, etc.) son sesgada a la derecha, por lo que algunas adaptaciones menores sería necesaria (por ejemplo, multiplicar por $-1$).

Aquí es un ejemplo de la modificación de su código:

set.seed(5840)  # this makes the example exactly reproducible
N      <- 100
x      <- rnorm(N)
beta   <- 0.4
errors <- rlnorm(N, meanlog=0, sdlog=1)
errors <- -1*errors   # this makes them left skewed
errors <- errors - 1  # this centers the error distribution on 0
y      <- 1 + x*beta + errors

enter image description here

Debo señalar en este punto que la regresión no hacer suposiciones acerca de la distribución de $X$ o $Y$, sólo acerca de los errores, $\varepsilon$ (ver aquí: ¿Qué pasa si los residuos están normalmente distribuidos, pero y no lo es?). Por lo tanto, que era el centro de mi respuesta anterior.


Actualización: Aquí es un derecho sesgada de la versión con los errores se distribuyen de Weibull:

set.seed(5840)  # this makes the example exactly reproducible
N      <- 100
x      <- rnorm(N)
beta   <- 0.4
errors <- rweibull(N, shape=1.5, scale=1)
# errors <- -1*errors   # this makes them left skewed
errors <- errors - factorial(1/1.5)  # this centers the error distribution on 0
y      <- 1 + x*beta + errors

De Weibull de datos está sesgada a la derecha ya, así que no necesitamos para cambiar su dirección (es decir, eliminamos a la -1*errors parte). También, desde la página de Wikipedia para la distribución de Weibull, vemos que la media de un Weibull debe ser: $E[W] = (1/{\rm shape})!$. Queremos restar el valor de cada uno de los errores, de modo que el error resultante de la distribución se centra en $0$. Que permite a la parte estructural (es decir, 1 + x*beta) de su código para reflejar con precisión la parte estructural de los datos de proceso de generación.

enter image description here

El ExGaussian distribución es la suma de una normal y una exponencial. No es una función ?rexGAUS en el gamlss.dist paquete para generar estos. Yo no tengo ese paquete, pero usted debería ser capaz de adaptar mi código anterior sin demasiada dificultad. Usted también podría generar un aleatoria normal de la variable (a través de la rnorm()) y exponencial (a través de la rexp()) y la suma de ellos con bastante facilidad. Sólo recuerde para restar la media de población, $\mu + 1/\lambda$, de cada error antes de la adición de los errores de la parte estructural de los datos de proceso de generación. (Tenga cuidado de no restar la muestra media, mean(errors), aunque!)


Algunos final, no relacionados comentarios: Su código de ejemplo en la pregunta es un poco confusa (es decir, sin ánimo de ofender). Porque rnorm(N) genera datos con mean=0 y sd=1 de forma predeterminada, 0.4*rnorm(N) generará rnorm(N, mean=0, sd=0.4). El código (y, posiblemente, su pensamiento) será mucho más claro si usa la última formulación. Además, el código de beta parece confundido. Pensamos generalmente en el $\beta$ en una regresión de tipo de modelo como parámetro, no una variable aleatoria. Es decir, es una incógnita constante que determina el comportamiento de los datos de proceso de generación, pero la naturaleza estocástica del proceso de encapsulado por los errores. Esta no es la manera en que pensamos acerca de él cuando estamos trabajando con modelos multinivel, y el código parece estar a medio camino entre un estándar del modelo de regresión y el código para un modelo de regresión multinivel. Especificación de las betas por separado es una buena idea para mantener la claridad conceptual del código, pero para una estándar del modelo de regresión, sólo se puede asignar un número único a cada beta (por ejemplo, beta0 <- 1; beta1 <- .04).

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