
Na semântica de fórmulas para modelo no R os operadores são interpretados assim: A+B = efeito aditivo A:B = produto níveis A*B = A+B+A:B = efeito simples e interações de todas as ordens (A+B)^2 = A+B+A:B = efeito simples e interações duplas (A+B+C+D+E)^3 = efeitos simples e interações não maiores que 3 grau A/B = A+A:B = efeito simples de A mais efeito aninhado de B por nível de A x+I(x^2) = operador I() torna x^2 literal (remove a semântica, eleva x ao quadrado) (A+B+C)^2-A:B = simples e duplas mas com excessão da interação A:B 0+A = remove o intercepto do modelo poly(x, degree=k) = polinômio ortogonal de x de grau k poly(x, degree=k, raw=TRUE) = polinômio cru de x de grau k A*(B+C) = A*B+A*C = propriedade distributiva Além disso podermos usar a função terms(..., keep.order=TRUE). Bem, segue esse curto CMR para ver as diferenças nas matrizes geradas. da <- replicate(5, gl(3,1), simplify=FALSE) da <- data.frame(do.call(expand.grid, da)) names(da) <- LETTERS[1:ncol(da)] da$x <- runif(nrow(da)) formulas <- list(~A+B, ~A:B, ~A*B, ~(A+B)^2, ~(A+B+C+D+E)^3, ~A/B, ~A/B/C, ~A/(B+C), ~A*(B+C), ~A*(B+C)^2, ~(A+B+C)^2-A:B, ~x, ~0+A, ~-1+A, ~0+x, ~A*x, ~A:x, ~A/x, ~x+I(x^2), ~poly(x, degree=2), ~poly(x, degree=2, raw=TRUE), ~A+A:B+C, terms(~A+A:B+C, keep.order=TRUE)) names(formulas) <- apply(sapply(formulas, paste), 2, paste, collapse="") X <- lapply(formulas, model.matrix, data=da) lapply(X, head) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================