Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| cursos:rbelem:dia3a [2010/05/27 11:59] – criada paulojus | cursos:rbelem:dia3a [2010/05/29 11:20] (atual) – paulojus | ||
|---|---|---|---|
| Linha 1: | Linha 1: | ||
| + | ====== Dia 4 - a ====== | ||
| + | |||
| + | Vamos revisar, comentar e alterar um código enviado na lista brasileira do do R | ||
| + | para ilustrar alguns aspectos do uso adequado da linguagem. | ||
| + | |||
| + | Aproveitamos o exemplo para discutir a especificação de modelos através do uso de fórmulas no R. | ||
| + | |||
| <code R> | <code R> | ||
| + | ## definindo número de dados | ||
| idados<- 50 | idados<- 50 | ||
| - | adados< | + | ##adados< |
| - | #Equação verdadeira de relacionamento (usada para simular Fase I e gerar Modelo de Regressão) | + | # Equação verdadeira de relacionamento |
| - | coef0 <- c(10, 2, -3, 2.3) | + | ## deseja simular de y = beta_0 + beta_1 X1 + beta_2 X2 + beta_3 X1.X2 |
| + | # (usada para simular Fase I e gerar Modelo de Regressão) | ||
| + | coef0 <- c(10, 2, -3, 2.3) ## parâmetros para simular o modelo | ||
| #Equação alterada | #Equação alterada | ||
| - | coefal< | + | #coefal< |
| #Fase I | #Fase I | ||
| + | ## simulando o valor das covariáveis X1 e X2 | ||
| x1 < | x1 < | ||
| x2 < | x2 < | ||
| - | | + | ## simulando os erros: |
| e < | e < | ||
| + | ## criando a matriz X | ||
| x < | x < | ||
| + | ## Comentários: | ||
| + | ## não precisa criar com a coluna x1*x2 | ||
| + | ## pode usar a função model.matrix() para montar a matriz a partir | ||
| + | ## da espeficicação do modelo | ||
| X <- model.matrix(~ x1*x2) | X <- model.matrix(~ x1*x2) | ||
| X | X | ||
| - | model.matrix(~ I(x1*x2)) | + | ## Sobre formulas no R: |
| + | ## Notar que os operadores +, * , ^ etc, tem um sentido diferente em formulas | ||
| + | ## I() " | ||
| + | head(model.matrix(~ x1*x2)) | ||
| + | head(model.matrix(~ I(x1*x2))) | ||
| + | head(model.matrix(~ x1+x2)) | ||
| + | head(model.matrix(~ I(x1+x2))) | ||
| Linha 26: | Linha 47: | ||
| da < | da < | ||
| + | ## colocando as covariáveis num data-frame | ||
| da < | da < | ||
| + | ## Com.:note que poderi já ter criado aqui para evitar objetos desnecessários: | ||
| + | da < | ||
| + | | ||
| + | ) | ||
| + | ## simulando os dados | ||
| y <- vector(length=idados) | y <- vector(length=idados) | ||
| ii< | ii< | ||
| Linha 34: | Linha 61: | ||
| } | } | ||
| - | yy <- as.vector(X %*% coef0 + e) | + | ## Com: note que não precisa fazer o loop for() pois o R é linguagem vetorial |
| - | all.equal(y, | + | ## alem disto poderia criar o y direto no data-frame |
| + | da$y <- X %*% coef0 + e | ||
| da$y <-y | da$y <-y | ||
| - | da$y <- as.vector(X %*% coef0 + e) | ||
| - | rm(x1, x2, y, yy) | + | all.equal(y, da$y) |
| + | ## Com: procure sempre apagar o que não é mais necessário | ||
| + | rm(x1, x2, y) | ||
| + | |||
| + | ## note a diferença (e semelhancas) entre os modelos | ||
| mod < | mod < | ||
| + | mod | ||
| + | lm(y~ x1 + x2 + I(x1*x2), data=da) | ||
| + | lm(y~ x1 + x2 + x1:x2, data=da) | ||
| + | lm(y~ x1*x2, data=da) | ||
| + | lm(y~ (x1 + x2)^2, data=da) | ||
| - | mod < | ||
| - | mod < | ||
| - | mod < | ||
| sdmod < | sdmod < | ||
| + | ## .. ou direto de summary() | ||
| sdmod <- summary(mod)$sigma | sdmod <- summary(mod)$sigma | ||
| | | ||
| Linha 75: | Linha 107: | ||
| - | ## | + | ## Obtendo as estimativas de beta sem usar lm() usando contas matriciais |
| + | ## beta = (X' | ||
| + | ## operação correta porém | ||
| solve(t(X) %*% X) %*% t(X) %*% y | solve(t(X) %*% X) %*% t(X) %*% y | ||
| + | ## operação feita de maneira mais adequada: | ||
| solve(crossprod(X), | solve(crossprod(X), | ||
| + | </ | ||
| - | </ | ||