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