Simule dados de regressão com a variável dependente sendo distribuída normalmente


8

Para análise de regressão, geralmente é útil conhecer o processo de geração de dados para verificar como o método usado funciona. Embora seja bastante simples fazer isso para uma regressão linear simples, esse não é o caso quando a variável dependente precisa seguir uma distribuição específica.

Considere uma regressão linear simples:

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

Existe alguma maneira de usar a mesma abordagem, mas para yser diferente do normal, digamos que a esquerda fique distorcida?

Respostas:


10

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

insira a descrição da imagem aqui

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*errorsE[W]=(1/shape)!01 + x*beta

insira a descrição da imagem aqui

rnorm()rexp()μ+1/λmean(errors)


rnorm(N)mean=0sd=10.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).


obrigado por sua resposta, para ser mais específico: preciso simular dados de tempo de resposta. Os tempos de resposta são normalmente inclinados à direita e são distribuídos aproximadamente como um Ex-Gaussiano ou Weibull.
iniciante

Vou trabalhar nesse exemplo, mas serão os erros que são distorcidos, a distribuição marginal de Y é incidental. Além disso, os dados do tempo de resposta devem estar inclinados à direita (alguns RTs longos, mas com piso sólido), não inclinados à esquerda (em direção a valores pequenos).
gung - Restabelece Monica

Sim inclinado para a direita, escrevi acidentalmente "inclinado para a esquerda" na minha pergunta.
iniciante

1
obrigado por suas extensas respostas. Na verdade, estou simulando dados para um modelo multinível. Eu apenas usei o código e o adotei para um cenário de regressão linear simples.
iniciante

mais uma pergunta: você sabe como simular dados de medidas repetidas usando um modelo de regressão como o acima, para que as medidas repetidas tenham uma estrutura de correlação específica (para explicar a esfericidade)? Digamos que há N indivíduos, cada um fornecendo 20 ensaios em cada uma das três condições de tratamento, onde a correlação entre as condições de tratamento deve ser conhecida no processo de geração de dados.
Iniciantes1
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.