Se entendi sua pergunta corretamente, isso é bastante fácil. Você só precisa decidir qual distribuição deseja que seus erros tenham e usar a função de geração aleatória correspondente.
- 1
Aqui está um exemplo de modificação do seu 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
XYε
Atualização: Aqui está uma versão inclinada à direita com os erros distribuídos como 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
-1*errors
E[W]=(1/shape)!01 + x*beta
rnorm()
rexp()
μ+1/λmean(errors)
rnorm(N)
mean=0
sd=1
0.4*rnorm(N)
rnorm(N, mean=0, sd=0.4)
beta
βem um modelo do tipo regressão como parâmetro, não como variável aleatória. Ou seja, é uma constante desconhecida que governa o comportamento do processo de geração de dados, mas a natureza estocástica do processo é encapsulada pelos erros. Não é assim que pensamos quando estamos trabalhando com modelos multiníveis, e seu código parece estar a meio caminho entre um modelo de regressão padrão e o código para um modelo de regressão multinível. Especificar seus betas separadamente é uma boa idéia para manter a clareza conceitual do código, mas para um modelo de regressão padrão, você apenas atribui um número único a cada beta (por exemplo, beta0 <- 1; beta1 <- .04
).