Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
pessoais:walmes:ridiculas [2010/12/20 20:07] walmespessoais:walmes:ridiculas [2011/02/11 17:01] (atual) walmes
Linha 1: Linha 1:
 ====== Ridiculas - dicas curtas em R ====== ====== Ridiculas - dicas curtas em R ======
  
-===== Ridiculas - dicas curtas em R =====+===== Regressão na análise de variância =====
  
 +<code R>
 +#------------------------------------------------------------------------------------------
 +# dados
 +sorgo <- read.table("http://www.leg.ufpr.br/~walmes/docs/anovareg.txt", header=TRUE)
 +sorgo <- transform(sorgo, bloco=factor(bloco), cultivar=factor(cultivar))
 +str(sorgo)
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# gráficos exploratórios
 +require(lattice)
 +xyplot(indice~dose|cultivar, groups=bloco, data=sorgo,
 +       jitter.x=TRUE, type=c("p","l"), layout=c(3,1))
 +xyplot(indice~dose, groups=cultivar, data=sorgo, jitter.x=TRUE, type=c("p","a"))
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# análise de variância do modelo de fatores
 +m0 <- aov(indice~bloco+cultivar*ordered(dose), data=sorgo)
 +summary(m0)
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# checagem
 +par(mfrow=c(2,2))
 +plot(m0)
 +layout(1)
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# desdobrando as somas de quadrados de doses dentro de cultivar
 +# dicas: forneça para ’by’ o número de níveis de cultivar (3)
 +# forneça para ’length.out’ os graus de liberdade de dose (6-1)
 +m1 <- aov(indice~bloco+cultivar/ordered(dose), data=sorgo)
 +summary(m1)
 +coef(m1)
 +summary(m1, split=list("cultivar:ordered(dose)"=list(
 +                         "Ag-1002"=seq(1, by=3, length.out=5),
 +                         "BR-300"=seq(2, by=3, length.out=5),
 +                         "Pioneer-B815"=seq(3, by=3, length.out=5)
 +                         )))
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# desdobrando somas de quadrados de cultivar dentro das doses
 +# dicas: forneça para ’by’ o número de níveis de dose (6)
 +# forneça para ’length.out’ os graus de liberdade de cultivar (3-1)
 +m2 <- aov(indice~bloco+ordered(dose)/cultivar, data=sorgo)
 +coef(m2)
 +summary(m2, split=list("ordered(dose):cultivar"=list(
 +                         "N.0"=seq(1, by=6, length.out=2),
 +                         "N.60"=seq(2, by=6, length.out=2),
 +                         "N.120"=seq(3, by=6, length.out=2),
 +                         "N.180"=seq(4, by=6, length.out=2),
 +                         "N.240"=seq(5, by=6, length.out=2),
 +                         "N.300"=seq(6, by=6, length.out=2)
 +                         )))
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# desdobrando efeitos dos graus polinômio dentro de dose dentro de cultivar
 +# lof é falta de ajuste (lack of fit)
 +summary(m1, split=list("cultivar:ordered(dose)"=list(
 +                         "Ag-1002.L"=1,
 +                         "Ag-1002.Q"=4,
 +                         "Ag-1002.C"=7,
 +                         "Ag-1002.lof"=c(10,13),
 +                         "BR-300.L"=2,
 +                         "BR-300.Q"=5,
 +                         "BR-300.C"=8,
 +                         "BR-300.lof"=c(11,14),
 +                         "Pioneer-B815.L"=3,
 +                         "Pioneer-B815.Q"=6,
 +                         "Pioneer-B815.C"=9,
 +                         "Pioneer-B815.lof"=c(12,15)
 +                         )))
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# obter as equações de regressão e R^2 para os modelos linear, quadrático e cúbico
 +# dica: usar contraste tipo soma zero para blocos para se anularem na fórmula
 +# e remover o intercepto especificando o ’-1’, trocar a ordem dos termos no modelo
 +# linear (estimativas corretas mas erros padrões e p-valores precisam de correção)
 +m3 <- aov(indice~-1+cultivar/dose+bloco, data=sorgo,
 +          contrast=list(bloco=contr.sum))
 +summary.lm(m3)
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# quadrático (estimativas corretas mas erros padrões e p-valores precisam de correção)
 +m4 <- aov(indice~-1+cultivar/(dose+I(dose^2))+bloco, data=sorgo,
 +          contrast=list(bloco=contr.sum))
 +summary.lm(m4)
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# cúbico (estimativas corretas mas erros padrões e p-valores precisam de correção)
 +m5 <- aov(indice~-1+cultivar/(dose+I(dose^2)+I(dose^3))+bloco, data=sorgo,
 +          contrast=list(bloco=contr.sum))
 +summary.lm(m5)
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +# calcular os R^2
 +sapply(c(linear=1, quadrático=2, cúbico=3),
 +       function(degree){
 +         sapply(levels(sorgo$cultivar),
 +                function(i){
 +                  da <- with(subset(sorgo, cultivar==i),
 +                             aggregate(indice, list(dose=dose), mean))
 +                  summary(lm(x~poly(dose, degree, raw=TRUE), da))$r.squared
 +                })})
 +                                                                                          #
 +#------------------------------------------------------------------------------------------
 +</code>
 +
 +===== Experimento com dois fatores de efeito aditivo e perda de muitas parcelas =====
 +
 +<code R>
 +#------------------------------------------------------------------------------------------
 +# dados
 +
 +da <- expand.grid(rept=1:5, ep=factor(1:5), tr=factor(1:4))
 +da$y <- c(58.4, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
 +          68.4, NA, NA, NA, NA, 258.8, 265.6, NA, NA, NA, NA, NA, 250, NA, 278.8,
 +          268.8, NA, NA, NA, 309.6, NA, NA, NA, NA, NA, NA, NA, NA, NA, 254, 598.8,
 +          NA, NA, NA, NA, 250, 399.6, 260, NA, NA, NA, 288.4, NA, NA, NA, 397.2, NA,
 +          NA, 337.6, NA, 415.2, NA, 450.8, NA, NA, NA, NA, 393.2, NA, NA, NA, NA,
 +          NA, NA, NA, 380.4, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 634, 417.2,
 +          NA, NA, NA, NA, NA)
 +
 +#------------------------------------------------------------------------------------------
 +# ajuste do modelo aditivo com teste F marginal
 +
 +m0 <- lm(y~ep+tr, data=da)
 +drop1(m0, test="F")
 +
 +#------------------------------------------------------------------------------------------
 +# análise de resíduos
 +
 +par(mfrow=c(2,2))
 +plot(m0)
 +layout(1)
 +
 +#------------------------------------------------------------------------------------------
 +# estimativas dos efeitos sob a restrição do R
 +
 +summary(m0)
 +
 +#------------------------------------------------------------------------------------------
 +# obtenção das médias ajustadas para os níveis de tratamento
 +
 +require(contrast)
 +lapply(levels(da$tr),
 +       function(i){
 +         contrast(m0, type="average", list(tr=i, ep=levels(da$ep)))
 +       }
 +       )
 +
 +#------------------------------------------------------------------------------------------
 +# comparação multipla de médias
 +
 +require(multcomp)
 +summary(glht(m0, linfct=mcp(tr="Tukey")))
 +
 +#------------------------------------------------------------------------------------------
 +</code>

QR Code
QR Code pessoais:walmes:ridiculas (generated for current page)