Início > delineamento > Semântica para descrever modelos

Semântica para descrever modelos

A função lm() do R resolve 90% dos casos de análise de experimentos. Não são para lm() modelos não lineares, de efeito aleatório, de distribuição diferente da gaussiana ou dados não independentes (correlacionados). Para uso eficiente da função é importante saber declarar os modelos. Para isso existe uma semântica (termo bem apropriado usado pelo Fernando Toledo) para declarar os modelos. Aqui eu vou listar alguns dos casos possíveis.

fórmula significado
A+B efeito simples aditivo entre fatores
A:B efeito do produto cartesiano de níveis dos fatores
A*B*C efeitos simples e todas interações possíveis
(A+B+C)^2 efeitos simples e interações de até 2 termos (duplas)
(A+B+C+C+E)^3 efeitos simples e interações de até 3 termos (triplas)
A/B efeito simples de A e de B aninhado em A, A+A:B
I(x^2) operador I() torna x^2 literal (remove o poder semântico de ^2)
-A:B remove o termo do modelo
A*B*C-A:B:C declara modelo triplo mas remove interação tripla, (A+B+C)^2
0+A remove intercepto (coluna de 1) do modelo
-1+A idem ao anterior
poly(x, degree=2) polinômio ortogonal de grau 2 em x
poly(x, degree=2, raw=TRUE) polinômio cru de grau 2 em x
A*(B+C) propriedade distributiva, A*B+A*C
A/(B+C) idem ao anterior, A/B+A/C
A/B/C propriedade recursiva, A+A:B+A:B:C
. representa todas as colunas, exceto a da resposta
(.)^2 inclui todas as interações duplas das variáveis

Além dessas opções de sintaxe, ainda temos a possibilidade de usar o operador semântico Error() para declarar termos de efeito aleatório. Esse operador só é interpretado pela função aov(). Com ele fazemos a análise de experimentos em parcelas subdivididas, por exemplo, de tal forma que a análise de variância apresenta os testes F considerando os quadrados médios corretos.
Além disso podermos usar a função terms(..., keep.order=TRUE) para fixar a ordem dos termos na análise de variância, pois os termos são ordenados pela ordem de magnitude, assim, sempre interações vem depois de efeitos simples, algumas vezes não desejamos isso, como é o caso da análise de experimentos em blocos incompletos. Os exemplos vão tornar esses apontamentos mais claros. Até a próxima ridícula.

#-----------------------------------------------------------------------------
# observe as matrizes de delineamento geradas nessas situações

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)

#-----------------------------------------------------------------------------
# para obter a equação de um polinômio para os níveis

soja <- read.table("http://www.leg.ufpr.br/~walmes/data/soja.txt",
                   header=TRUE, sep="\t", dec=",")
str(soja)

soja$A <- factor(soja$agua)
soja$K <- soja$potassio

m0 <- lm(rengrao~bloco+A*(K+I(K^2)), soja) # I() torna literal
m1 <- lm(rengrao~bloco+A*poly(K, degree=2, raw=TRUE), soja)  # original
m2 <- lm(rengrao~bloco+A*poly(K, degree=2, raw=FALSE), soja) # ortogonal

cbind(coef(m0), coef(m1), coef(m2)) # 2 primeiras colunas são iguais

m3 <- lm(rengrao~0+A/(K+I(K^2))+bloco, soja) # para ter os coeficientes
coef(m3) # os interceptos, termos lineares e termos quadráticos
c0 <- coef(m3)[grep("bloco", names(coef(m3)), invert=TRUE)]
matrix(c0, ncol=3, dimnames=list(levels(soja$A), c("b0","b1","b2")))

#-----------------------------------------------------------------------------
# tranformações dentro da fórmula

m0 <- lm(rengrao~bloco+A*(K+sqrt(K)), soja)  # não requer I()
m0 <- lm(rengrao~bloco+A*I(K-mean(K)), soja) # centrar na média

#-----------------------------------------------------------------------------
# fazendo de conta que o experimento é em parcelas subdividas para ilustrar
# o uso do operador semântico Error()

soja$K <- factor(soja$K)

# combinar os níveis de bloco e A nos identificamos as parcelas
m4 <- aov(rengrao~bloco+A*K+Error(bloco:A), soja) # dá mensagem de aviso
summary(m4) # anova separa pelos estratos

soja <- transform(soja, parcela=interaction(bloco, A))

# é o mesmo modelo
m5 <- aov(rengrao~bloco+A*K+Error(parcela), soja) # não dá mensagem de aviso
summary(m5) # anova separa pelos estratos

#-----------------------------------------------------------------------------
# fazendo uso da função terms() para fixar a ordem dos termos na anova()

bib1 <- read.table("http://www.leg.ufpr.br/~walmes/data/bib1.txt",
                   header=TRUE, sep="\t")
str(bib1)

bib1 <- transform(bib1,
                  repetição=factor(repetição),
                  variedade=factor(variedade),
                  bloco=factor(bloco))
str(bib1)

# repetição + bloco dentro de repetição + variedade
m0 <- lm(y~repetição/bloco+variedade, bib1)
anova(m0) # por ser de maior ordem o termo repetição:bloco é o último

m1 <- lm(terms(y~repetição/bloco+variedade, keep.order=TRUE), bib1)
anova(m1) # ordem obedeceu a ordem dentro da fórmula

#-----------------------------------------------------------------------------
About these ads
Categoriasdelineamento Tags:, ,
  1. Diego
    24/07/2012 às 22:43 | #1

    Aproveitando o assunto, tenho uma dúvida que certa vez vi postada na lista r-sig-ecology para a qual não houve resposta.
    Dado um efeito significativo do produto de duas variáveis (A:B), os efeitos simples das variáveis A e B, quando também significativos, devem ou não ser interpretados?

    (e me perdoem aqueles que não gostam da ideia de significativo/não-significativo).

    • Walmes Zeviani
      25/07/2012 às 10:09 | #2

      Havendo interação entre A e B não tem porque se fazer a interpretação dos efeitos principais. A interação mascara os efeitos principais. Se existe interação significa que os fatores não atuam de forma aditiva um ao outro. O desdobramento da interação é feito para conhecer como se dá o efeito de um fator fixando níveis do outro.

  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 44 outros seguidores

%d blogueiros gostam disto: