Efeito do calor em estacas de B. milleflora

Grasiela Bruzamarello Tognon
Walmes Marques Zeviani
Francine Lorena Cuquel


O experimento avaliou o efeito dos fator calor de campo {com, sem}. As respostas avaliadas foram medidas de características de coloração das estacas (L, a, b, E), o peso e a classificação quanto à viabilidade comercial (nota de 1 à 3). Foram consideradas 10 estacas (unidades experimentais, UE) para cada nível de calor de campo. O registro das respostas foi feito ao longo do tempo (dias, medidas repetidas nas mesmas UE).

##-----------------------------------------------------------------------------
## Definições da sessão.

## Lista de pacotes a serem usados na sessão.
pkg <- c("lattice", "latticeExtra", "gridExtra", "nlme", "survival",
         "doBy", "plyr", "multcomp", "rootSolve", "wzRfun")
sapply(pkg, require, character.only=TRUE)
##      lattice latticeExtra    gridExtra         nlme     survival         doBy 
##         TRUE         TRUE         TRUE         TRUE         TRUE         TRUE 
##         plyr     multcomp    rootSolve       wzRfun 
##         TRUE         TRUE         TRUE         TRUE
sessionInfo()
## R version 3.1.1 (2014-07-10)
## Platform: x86_64-pc-linux-gnu (64-bit)
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=pt_BR.UTF-8       
##  [4] LC_COLLATE=en_US.UTF-8     LC_MONETARY=pt_BR.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=pt_BR.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
## [10] LC_TELEPHONE=C             LC_MEASUREMENT=pt_BR.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] splines   grid      stats     graphics  grDevices utils     datasets  base     
## 
## other attached packages:
##  [1] wzRfun_0.2          rootSolve_1.6.5     multcomp_1.3-3      TH.data_1.0-3      
##  [5] mvtnorm_0.9-9997    plyr_1.8.1          doBy_4.5-10         MASS_7.3-34        
##  [9] survival_2.37-7     nlme_3.1-117        gridExtra_0.9.1     latticeExtra_0.6-26
## [13] RColorBrewer_1.0-5  lattice_0.20-29     knitr_1.6          
## 
## loaded via a namespace (and not attached):
##  [1] evaluate_0.5.5      formatR_0.10        lme4_1.1-6          Matrix_1.1-4       
##  [5] methods_3.1.1       minqa_1.2.3         Rcpp_0.11.2         RcppEigen_0.3.2.0.2
##  [9] sandwich_2.3-0      stringr_0.6.2       tools_3.1.1         zoo_1.7-10
citation()
## 
## To cite R in publications use:
## 
##   R Core Team (2014). R: A language and environment for statistical computing. R
##   Foundation for Statistical Computing, Vienna, Austria. URL
##   http://www.R-project.org/.
## 
## A BibTeX entry for LaTeX users is
## 
##   @Manual{,
##     title = {R: A Language and Environment for Statistical Computing},
##     author = {{R Core Team}},
##     organization = {R Foundation for Statistical Computing},
##     address = {Vienna, Austria},
##     year = {2014},
##     url = {http://www.R-project.org/},
##   }
## 
## We have invested a lot of time and effort in creating R, please cite it when
## using it for data analysis. See also 'citation("pkgname")' for citing R
## packages.
##-----------------------------------------------------------------------------
## Definições gráficas trellis.

## display.brewer.all()
## mycol <- brewer.pal(6, "Set1")
mycol <- c(brewer.pal(6, "Dark2"), brewer.pal(6, "Set1"))

## names(trellis.par.get())
## dput(trellis.par.get())

ps <- list(box.rectangle=list(col=1, fill=c("gray70")),
           box.umbrella=list(col=1, lty=1),
           dot.symbol=list(col=1),
           dot.line=list(col=1, lty=3),
           plot.symbol=list(col=1, cex=0.7),
           plot.line=list(col=1),
           plot.polygon=list(col="gray80"),
           superpose.line=list(col=mycol),
           superpose.symbol=list(col=mycol),
           superpose.polygon=list(col=mycol),
           strip.background=list(col=c("gray90","gray50"))
           )

## show.settings()
## show.settings(ps)

##-----------------------------------------------------------------------------
##  Ler.

## list.files(pattern="*.txt")
da <- read.table("calor_milleflora.txt", header=TRUE, sep="\t")
levels(da$calor) <- c("Com","Sem")
str(da)
## 'data.frame':    100 obs. of  9 variables:
##  $ dias   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ calor  : Factor w/ 2 levels "Com","Sem": 2 2 2 2 2 2 2 2 2 2 ...
##  $ rept   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ L      : num  41 37.5 42.1 37.6 41.6 ...
##  $ a      : num  -12.72 -10.28 -11.39 -9.39 -12.28 ...
##  $ b      : num  20.2 14.5 18.9 14.6 18.6 ...
##  $ E      : num  30.9 23.8 29.9 28.5 29.8 ...
##  $ peso   : num  49.6 55.3 37.1 32.5 38.5 ...
##  $ classif: int  1 2 1 1 1 1 2 1 1 1 ...
##-----------------------------------------------------------------------------
##  Ver.

xlab <- "Dia de avaliação"

##--------------------------------------------
## Variável L.

xyplot(L~dias, groups=calor, data=da, jitter.x=TRUE,
       auto.key=list(columns=2, title="Calor"), xlab=xlab,
       type=c("p","a"), 
       par.settings=ps)

plot of chunk unnamed-chunk-2

## xyplot(L~dias|calor, groups=rept, data=da, type=c("o"),
##        par.settings=ps, xlab=xlab)

##--------------------------------------------
## Variável a.

xyplot(a~dias, groups=calor, data=da, jitter.x=TRUE,
       auto.key=list(columns=2, title="Calor"), xlab=xlab,
       type=c("p","a"), 
       par.settings=ps)

plot of chunk unnamed-chunk-2

## xyplot(a~dias, groups=calor,
##        data=da[-c(60,74,80,94,100),], # sem pontos atípicos
##        jitter.x=TRUE,
##        auto.key=list(columns=2, title="Calor"), xlab=xlab,
##        type=c("p","a"), 
##        par.settings=ps)

## xyplot(a~dias|calor, groups=rept, data=da, type=c("o"),
##        par.settings=ps, xlab=xlab)

##--------------------------------------------
## Variável b.

xyplot(b~dias, groups=calor, data=da, jitter.x=TRUE,
       auto.key=list(columns=2, title="Calor"), xlab=xlab,
       type=c("p","a"), 
       par.settings=ps)

plot of chunk unnamed-chunk-2

## xyplot(b~dias|calor, groups=rept, data=da, type=c("o"),
##        par.settings=ps, xlab=xlab)

##--------------------------------------------
## Variável E.

xyplot(E~dias, groups=calor, data=da, jitter.x=TRUE,
       auto.key=list(columns=2, title="Calor"), xlab=xlab,
       type=c("p","a"), 
       par.settings=ps)

plot of chunk unnamed-chunk-2

## xyplot(E~dias|calor, groups=rept, data=da, type=c("o"),
##        par.settings=ps, xlab=xlab)

##--------------------------------------------
## Peso.

xyplot(peso~dias, groups=calor, data=da, jitter.x=TRUE,
       auto.key=list(columns=2, title="Calor"), xlab=xlab,
       type=c("p","a"), 
       par.settings=ps)

plot of chunk unnamed-chunk-2

## xyplot(peso~dias|calor, groups=rept, data=da, type=c("o"),
##        par.settings=ps, xlab=xlab)

##--------------------------------------------
## Classificação quanto a viabilidade.

xyplot(classif~dias, groups=calor, data=da, jitter.x=TRUE,
       auto.key=list(columns=2, title="Calor"), xlab=xlab,
       type=c("p","a"), 
       par.settings=ps)

plot of chunk unnamed-chunk-2

## xyplot(classif~dias|calor, groups=rept, data=da, type=c("o"),
##        par.settings=ps, xlab=xlab)

##-----------------------------------------------------------------------------
## Frequência de estacas viáveis/inviáveis em cada dia.

da$viab <- with(da, cut(classif, c(-Inf,2,Inf), right=TRUE,
                        labels=c("viável","inviável")))
str(da)
## 'data.frame':    100 obs. of  10 variables:
##  $ dias   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ calor  : Factor w/ 2 levels "Com","Sem": 2 2 2 2 2 2 2 2 2 2 ...
##  $ rept   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ L      : num  41 37.5 42.1 37.6 41.6 ...
##  $ a      : num  -12.72 -10.28 -11.39 -9.39 -12.28 ...
##  $ b      : num  20.2 14.5 18.9 14.6 18.6 ...
##  $ E      : num  30.9 23.8 29.9 28.5 29.8 ...
##  $ peso   : num  49.6 55.3 37.1 32.5 38.5 ...
##  $ classif: int  1 2 1 1 1 1 2 1 1 1 ...
##  $ viab   : Factor w/ 2 levels "viável","inviável": 1 1 1 1 1 1 1 1 1 1 ...
tb <- xtabs(~calor+dias+viab, data=da)
plot(tb, xlab="Calor", ylab="Dias de avaliação")

plot of chunk unnamed-chunk-2

Análise estatística do peso das estacas

##-----------------------------------------------------------------------------
##  Análise do peso.

##  Testar segmentado linear.
##  Espera-se que o sem calor de campo tenha um atraso na queda de peso, o
##  que seria representado por um plato linear enquanto que o com calor de
##  campo seria apenas linear.

str(da)
## 'data.frame':    100 obs. of  10 variables:
##  $ dias   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ calor  : Factor w/ 2 levels "Com","Sem": 2 2 2 2 2 2 2 2 2 2 ...
##  $ rept   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ L      : num  41 37.5 42.1 37.6 41.6 ...
##  $ a      : num  -12.72 -10.28 -11.39 -9.39 -12.28 ...
##  $ b      : num  20.2 14.5 18.9 14.6 18.6 ...
##  $ E      : num  30.9 23.8 29.9 28.5 29.8 ...
##  $ peso   : num  49.6 55.3 37.1 32.5 38.5 ...
##  $ classif: int  1 2 1 1 1 1 2 1 1 1 ...
##  $ viab   : Factor w/ 2 levels "viável","inviável": 1 1 1 1 1 1 1 1 1 1 ...
da$y <- da$peso

da$ue <- with(da, interaction(calor, rept, drop=TRUE))
nlevels(da$ue)
## [1] 20
db <- groupedData(data=da, formula=y~dias|ue, order.groups=FALSE)

m0 <- lme(y~calor*factor(dias), random=~1|ue, data=db, method="ML")
m1 <- lme(y~calor*poly(dias, 1), random=~1|ue, data=db, method="ML")
m2 <- lme(y~calor*poly(dias, 2), random=~1|ue, data=db, method="ML")

##  Presença de efeito quadrático.
anova(m1, m2, m0)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m1     1  6 536.7 552.4 -262.4                       
## m2     2  8 523.8 544.7 -253.9 1 vs 2  16.920  0.0002
## m0     3 12 524.7 555.9 -250.3 2 vs 3   7.174  0.1270
m0 <- m2

##  Interação de calor com o tempo nos termos quadráticos.
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    76   325.2  <.0001
## calor                   1    18     4.3   0.053
## poly(dias, 2)           2    76    34.2  <.0001
## calor:poly(dias, 2)     2    76     3.8   0.027
## Estimativas dos termos de efeito fixo.
summary(m0)$tTable
##                           Value Std.Error DF t-value   p-value
## (Intercept)              30.720     2.722 76  11.287 6.495e-18
## calorSem                  7.971     3.849 18   2.071 5.301e-02
## poly(dias, 2)1          -11.534     2.847 76  -4.052 1.216e-04
## poly(dias, 2)2           -2.931     2.847 76  -1.030 3.065e-01
## calorSem:poly(dias, 2)1  -6.883     4.026 76  -1.710 9.140e-02
## calorSem:poly(dias, 2)2  -8.686     4.026 76  -2.157 3.413e-02
## Valores ajustados pelo modelo para cada UE.
plot(augPred(m0), par.settings=ps)

plot of chunk unnamed-chunk-3

## Diagnóstico.
r <- residuals(m0, type="pearson")
f <- fitted(m0)

grid.arrange(ncol=2,
    xyplot(r~f, type=c("p","smooth")),
    xyplot(sqrt(abs(r))~f, type=c("p","smooth")),
    qqmath(residuals(m0)),
    qqmath(unlist(ranef(m0))))

plot of chunk unnamed-chunk-3

##-----------------------------------------------------------------------------
##  Predição.

pred <- with(db,
             expand.grid(calor=levels(calor),
                         dias=seq(min(dias), max(dias), l=30)))
pred$y <- predict(m0, newdata=pred, level=0)
## str(pred)

xyplot(y~dias, groups=calor, data=da, auto.key=TRUE, par.settings=ps)+
    as.layer(xyplot(y~dias, groups=calor, data=pred, type="l"))

plot of chunk unnamed-chunk-3

##  As curvas ajustadas sugerem que o sem calor tem um periodo (de 1 à 5 dias) sem queda
##  de peso, depois disso cai a uma taxa igual a do com calor. Para confirmar isso será
##  ajustado o modelo platô linear.

##-----------------------------------------------------------------------------
##  Ajuste do modelo platô linear para cada nível de calor.

## start <- list(b0=40, tx=-5/4, xb=4.5)
## plot(y~dias, data=subset(da, calor=="Sem"))
## with(start, curve(b0+tx*(x-xb)*(x>xb), add=TRUE))
## 
## n0 <- nls(y~b0+tx*(dias-xb)*(dias>xb),
##           data=subset(db, calor=="Sem"),
##           start=start)
## coef(n0)
## 
## with(as.list(coef(n0)), curve(b0+tx*(x-xb)*(x>xb), add=TRUE, col=2))
## 
## start <- list(b0=30, tx=-5/4, xb=1.5)
## plot(y~dias, data=subset(da, calor=="Com"))
## with(start, curve(b0+tx*(x-xb)*(x>xb), add=TRUE))
## 
## n1 <- nls(y~b0+tx*(dias-xb)*(dias>xb),
##           data=subset(db, calor=="Com"),
##           start=start)
## coef(n1)
## 
## with(as.list(coef(n1)), curve(b0+tx*(x-xb)*(x>xb), add=TRUE, col=2))
## 
## cbind(coef(n0), coef(n1))
## ch <- c(matrix(c(coef(n0), coef(n1)-coef(n0)), ncol=3, by=TRUE))
## dput(ch)

## Valores iniciais obtidos com o ajuste indivídual.
ch <- c(40.61, -8.68900000136728, -1.166,
        0.62299999863557, 4.25700400189413, -0.944542355400808)

##-----------------------------------------------------------------------------
##  Ajuste dos modelos não lineares mistos.

## Modelo livre, cada valor com seus parâmetros.
n11 <- nlme(y~b0+tx*(dias-xb)*(dias>xb),
            data=db,
            random=b0~1, fixed=b0+tx+xb~calor,
            start=list(fixed=ch),
            verbose=TRUE)
## 
## **Iteration 1
## LME step: Loglik: -254.5 , nlm iterations: 1 
## reStruct  parameters:
##    ue 
## -1.44 
## 
## PNLS step: RSS =  386.7 
##  fixed effects:31.92  8.689  -0.543  -0.623  3.312  0.9444  
##  iterations: 4 
## 
## Convergence:
##     fixed  reStruct 
## 2.000e+00 1.268e-09 
## 
## **Iteration 2
## LME step: Loglik: -254.5 , nlm iterations: 1 
## reStruct  parameters:
##    ue 
## -1.44 
## 
## PNLS step: RSS =  386.7 
##  fixed effects:31.92  8.689  -0.543  -0.623  3.312  0.9444  
##  iterations: 1 
## 
## Convergence:
##    fixed reStruct 
##        0        0
summary(n11)
## Nonlinear mixed-effects model fit by maximum likelihood
##   Model: y ~ b0 + tx * (dias - xb) * (dias > xb) 
##  Data: db 
##   AIC   BIC logLik
##   525 545.9 -254.5
## 
## Random effects:
##  Formula: b0 ~ 1 | ue
##         b0.(Intercept) Residual
## StdDev:          8.298    1.966
## 
## Fixed effects: b0 + tx + xb ~ calor 
##                Value Std.Error DF t-value p-value
## b0.(Intercept) 31.92     2.744 75  11.632  0.0000
## b0.calorSem     8.69     3.881 75   2.239  0.0281
## tx.(Intercept) -0.54     0.227 75  -2.395  0.0191
## tx.calorSem    -0.62     0.321 75  -1.943  0.0558
## xb.(Intercept)  3.31     1.880 75   1.762  0.0822
## xb.calorSem     0.94     2.018 75   0.468  0.6411
##  Correlation: 
##                b0.(I) b0.clS tx.(I) tx.clS xb.(I)
## b0.calorSem    -0.707                            
## tx.(Intercept)  0.000  0.000                     
## tx.calorSem     0.000  0.000 -0.707              
## xb.(Intercept) -0.073  0.052 -0.819  0.579       
## xb.calorSem     0.068 -0.071  0.763 -0.727 -0.932
## 
## Standardized Within-Group Residuals:
##      Min       Q1      Med       Q3      Max 
## -2.46081 -0.54919  0.04599  0.50328  3.31075 
## 
## Number of Observations: 100
## Number of Groups: 20
logLik(n11)
## 'log Lik.' -254.5 (df=8)
logLik(m0)
## 'log Lik.' -253.9 (df=8)
## Modelo com a restrição de que xb para com valor é zero.
db$i <- with(db, ifelse(calor=="Com", 0, 1))
n12 <- nlme(y~b0+tx*(dias-xb*i)*(dias>xb*i),
            data=db,
            random=b0~1, fixed=list(b0+tx~calor, xb~1),
            start=list(fixed=ch[-6]),
            verbose=TRUE)
## 
## **Iteration 1
## LME step: Loglik: -255.2 , nlm iterations: 1 
## reStruct  parameters:
##     ue 
## -1.431 
## 
## PNLS step: RSS =  393.2 
##  fixed effects:32.76  7.851  -0.4078  -0.7582  4.257  
##  iterations: 2 
## 
## Convergence:
##     fixed  reStruct 
## 2.107e+00 2.593e-09 
## 
## **Iteration 2
## LME step: Loglik: -255.2 , nlm iterations: 1 
## reStruct  parameters:
##     ue 
## -1.431 
## 
## PNLS step: RSS =  393.2 
##  fixed effects:32.76  7.851  -0.4078  -0.7582  4.257  
##  iterations: 1 
## 
## Convergence:
##     fixed  reStruct 
## 0.000e+00 1.551e-16
summary(n12)
## Nonlinear mixed-effects model fit by maximum likelihood
##   Model: y ~ b0 + tx * (dias - xb * i) * (dias > xb * i) 
##  Data: db 
##     AIC   BIC logLik
##   524.4 542.6 -255.2
## 
## Random effects:
##  Formula: b0 ~ 1 | ue
##         b0.(Intercept) Residual
## StdDev:          8.297    1.983
## 
## Fixed effects: list(b0 + tx ~ calor, xb ~ 1) 
##                Value Std.Error DF t-value p-value
## b0.(Intercept) 32.76     2.755 77  11.892  0.0000
## b0.calorSem     7.85     3.878 18   2.024  0.0580
## tx.(Intercept) -0.41     0.102 77  -4.009  0.0001
## tx.calorSem    -0.76     0.249 77  -3.043  0.0032
## xb              4.26     0.735 77   5.793  0.0000
##  Correlation: 
##                b0.(I) b0.clS tx.(I) tx.clS
## b0.calorSem    -0.710                     
## tx.(Intercept) -0.185  0.131              
## tx.calorSem     0.075 -0.054 -0.408       
## xb              0.000 -0.062  0.000 -0.665
## 
## Standardized Within-Group Residuals:
##      Min       Q1      Med       Q3      Max 
## -2.44077 -0.52340  0.06172  0.52120  3.06706 
## 
## Number of Observations: 100
## Number of Groups: 20
anova(n12, n11)
##     Model df   AIC   BIC logLik   Test L.Ratio p-value
## n12     1  7 524.4 542.6 -255.2                       
## n11     2  8 525.0 545.9 -254.5 1 vs 2   1.328  0.2491
##  Modelo com a restrição de que as taxas são iguais.
n13 <- nlme(y~b0+tx*(dias-xb)*(dias>xb),
            data=db,
            random=b0~1, fixed=list(b0~calor, tx~1, xb~calor),
            start=list(fixed=ch[-c(4)]),
            verbose=TRUE)
## 
## **Iteration 1
## LME step: Loglik: -256.5 , nlm iterations: 1 
## reStruct  parameters:
##     ue 
## -1.415 
## 
## PNLS step: RSS =  406.1 
##  fixed effects:31.92  8.689  -0.8545  4.657  -1.4  
##  iterations: 3 
## 
## Convergence:
##    fixed reStruct 
##  2.0e+00  9.9e-10 
## 
## **Iteration 2
## LME step: Loglik: -256.5 , nlm iterations: 1 
## reStruct  parameters:
##     ue 
## -1.415 
## 
## PNLS step: RSS =  406.1 
##  fixed effects:31.92  8.689  -0.8545  4.657  -1.4  
##  iterations: 1 
## 
## Convergence:
##    fixed reStruct 
##        0        0
summary(n13)
## Nonlinear mixed-effects model fit by maximum likelihood
##   Model: y ~ b0 + tx * (dias - xb) * (dias > xb) 
##  Data: db 
##   AIC   BIC logLik
##   527 545.2 -256.5
## 
## Random effects:
##  Formula: b0 ~ 1 | ue
##         b0.(Intercept) Residual
## StdDev:          8.296    2.015
## 
## Fixed effects: list(b0 ~ calor, tx ~ 1, xb ~ calor) 
##                Value Std.Error DF t-value p-value
## b0.(Intercept) 31.92     2.731 76  11.689  0.0000
## b0.calorSem     8.69     3.862 76   2.250  0.0274
## tx             -0.85     0.163 76  -5.228  0.0000
## xb.(Intercept)  4.66     0.830 76   5.611  0.0000
## xb.calorSem    -1.40     1.023 76  -1.368  0.1755
##  Correlation: 
##                b0.(I) b0.clS tx     xb.(I)
## b0.calorSem    -0.707                     
## tx              0.000  0.000              
## xb.(Intercept) -0.110  0.078 -0.540       
## xb.calorSem     0.089 -0.127 -0.262 -0.433
## 
## Standardized Within-Group Residuals:
##      Min       Q1      Med       Q3      Max 
## -2.40220 -0.57854  0.00548  0.54349  3.23198 
## 
## Number of Observations: 100
## Number of Groups: 20
## As taxas são as mesmas?
anova(n11, n13)
##     Model df AIC   BIC logLik   Test L.Ratio p-value
## n11     1  8 525 545.9 -254.5                       
## n13     2  7 527 545.2 -256.5 1 vs 2   3.917  0.0478
AIC(n11); AIC(m0)
##     
## 525
## [1] 523.8
##-----------------------------------------------------------------------------
##  Verificar os pressupostos.

## Valores ajustados pelo modelo para cada UE.
plot(augPred(n12), par.settings=ps)

plot of chunk unnamed-chunk-3

## DIagnóstico.
r <- residuals(n12, type="pearson")
f <- fitted(n12)

grid.arrange(ncol=2,
    xyplot(r~f, type=c("p","smooth")),
    xyplot(sqrt(abs(r))~f, type=c("p","smooth")),
    qqmath(residuals(n12)),
    qqmath(unlist(ranef(n12))))

plot of chunk unnamed-chunk-3

##-----------------------------------------------------------------------------
##  Predição.

pred <- with(db,
             expand.grid(calor=levels(calor),
                         dias=seq(min(dias), max(dias), l=30)))

pred$i <- with(pred, ifelse(calor=="Com", 0, 1))
pred$y <- predict(n12, newdata=pred, level=0)
str(pred)
## 'data.frame':    60 obs. of  4 variables:
##  $ calor: Factor w/ 2 levels "Com","Sem": 1 2 1 2 1 2 1 2 1 2 ...
##  $ dias : num  1 1 1.28 1.28 1.55 ...
##  $ i    : num  0 1 0 1 0 1 0 1 0 1 ...
##  $ y    : atomic  32.4 40.6 32.2 40.6 32.1 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  - attr(*, "out.attrs")=List of 2
##   ..$ dim     : Named int  2 30
##   .. ..- attr(*, "names")= chr  "calor" "dias"
##   ..$ dimnames:List of 2
##   .. ..$ calor: chr  "calor=Com" "calor=Sem"
##   .. ..$ dias : chr  "dias=1.000" "dias=1.276" "dias=1.552" "dias=1.828" ...
pred$yn <- predict(n12, newdata=pred, level=0)
pred$ym <- predict(m0, newdata=pred, level=0)

## Valores preditos e os observados em cada UE.
xyplot(y~dias, groups=calor, data=da, auto.key=TRUE, par.settings=ps)+
    as.layer(xyplot(yn~dias, groups=calor, data=pred, type="l", lwd=2))+
    as.layer(xyplot(ym~dias, groups=calor, data=pred, type="l", lwd=2, lty=2))+
    as.layer(xyplot(y~dias, groups=ue, data=da, type="l", lty=3, col="gray50"))

plot of chunk unnamed-chunk-3

##  l <- levels(da$calor); nl <- nlevels(da$calor)
l <- c("Com calor","Sem calor"); nl <- length(l)
key <- list(title="Tratamento de calor", cex.title=1.1,
            lines=list(col=mycol[1:nl], pch=1, lwd=2),
            text=list(l),
            columns=nl, divide=1, type="o")

xyplot(y~dias, groups=calor, data=da, key=key, par.settings=ps,
       ylab="Peso das estacas (g)", xlab="Dias")+
    as.layer(xyplot(yn~dias, groups=calor, data=pred, type="l", lwd=2))

plot of chunk unnamed-chunk-3

## Então o sem calor a perda de peso tem um padrão com duas fases: até
## aproximadamente 4 dias o peso não cai, após isso cai. No com calor a
## taxa é menor mas existe desde o início.

##-----------------------------------------------------------------------------
## Inclusão das bandas de confiança.

fixef(n12)
## b0.(Intercept)    b0.calorSem tx.(Intercept)    tx.calorSem             xb 
##        32.7586         7.8514        -0.4078        -0.7582         4.2570
formula(n12)
## y ~ b0 + tx * (dias - xb * i) * (dias > xb * i)
## <environment: 0x76e0fc0>
## b0.(Intercept)    b0.calorSem tx.(Intercept)    tx.calorSem             xb 
## y ~ b0 + tx * (dias - xb * i) * (dias > xb * i)

## Para obter derivadas numéricas no MLE.
numF <- function(th, xi, Z){
    th <- as.matrix(th)
    Z%*%th[c(1,2),]+Z%*%th[c(3,4),]*(xi-Z[,2]*th[5,])*(xi>Z[,2]*th[5,])
}

th <- fixef(n12)

## Verifica se os preditos com numF() correspondem aos do predict().
all(pred$yn==numF(th=th, xi=pred$dias, Z=model.matrix(~calor, pred)))
## [1] TRUE
## Gradiente no MLE.
F <- gradient(numF, x=th, xi=pred$dias,
              Z=model.matrix(~calor, pred))

dim(F)
## [1] 60  5
colnames(F)==names(th)
## [1] TRUE TRUE TRUE TRUE TRUE
head(F)
##      b0.(Intercept) b0.calorSem tx.(Intercept) tx.calorSem xb
## [1,]              1           0          1.000           0  0
## [2,]              1           1          0.000           0  0
## [3,]              1           0          1.276           0  0
## [4,]              1           1          0.000           0  0
## [5,]              1           0          1.552           0  0
## [6,]              1           1          0.000           0  0
## Cálculos do IC.
U <- chol(vcov(n12))
pred$se <- sqrt(apply(F%*%t(U), 1, function(x) sum(x^2)))
zval <- qnorm(p=c(lwr=0.025, fit=0.5, upr=0.975))
me <- outer(pred$se, zval, "*")
fit <- predict(n12, newdata=pred, level=0)
pred <- cbind(pred, sweep(me, 1, fit, "+"))
str(pred)
## 'data.frame':    60 obs. of  10 variables:
##  $ calor: Factor w/ 2 levels "Com","Sem": 1 2 1 2 1 2 1 2 1 2 ...
##  $ dias : num  1 1 1.28 1.28 1.55 ...
##  $ i    : num  0 1 0 1 0 1 0 1 0 1 ...
##  $ y    : atomic  32.4 40.6 32.2 40.6 32.1 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  $ yn   : atomic  32.4 40.6 32.2 40.6 32.1 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  $ ym   : atomic  32 39.9 32 40.1 32 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  $ se   : num  2.67 2.66 2.66 2.66 2.66 ...
##  $ lwr  : num  27.1 35.4 27 35.4 26.9 ...
##  $ fit  : num  32.4 40.6 32.2 40.6 32.1 ...
##  $ upr  : num  37.6 45.8 37.5 45.8 37.3 ...
xyplot(y~dias, groups=calor, data=da, key=key, par.settings=ps,
       ylab="Peso das estacas (g)", xlab="Dias")+
    as.layer(xyplot(fit~dias, groups=calor, data=pred, type="l",
                    prepanel=prepanel.cbH, cty="bands", alpha=0.3,
                    ly=pred$lwr, uy=pred$upr,
                    panel.groups=panel.cbH,
                    panel=panel.superpose,
                    par.settings=ps))

plot of chunk unnamed-chunk-3

Análise das variáveis de cor

##-----------------------------------------------------------------------------
## Análise do L.

str(da)
## 'data.frame':    100 obs. of  12 variables:
##  $ dias   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ calor  : Factor w/ 2 levels "Com","Sem": 2 2 2 2 2 2 2 2 2 2 ...
##  $ rept   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ L      : num  41 37.5 42.1 37.6 41.6 ...
##  $ a      : num  -12.72 -10.28 -11.39 -9.39 -12.28 ...
##  $ b      : num  20.2 14.5 18.9 14.6 18.6 ...
##  $ E      : num  30.9 23.8 29.9 28.5 29.8 ...
##  $ peso   : num  49.6 55.3 37.1 32.5 38.5 ...
##  $ classif: int  1 2 1 1 1 1 2 1 1 1 ...
##  $ viab   : Factor w/ 2 levels "viável","inviável": 1 1 1 1 1 1 1 1 1 1 ...
##  $ y      : num  49.6 55.3 37.1 32.5 38.5 ...
##  $ ue     : Factor w/ 20 levels "Com.1","Sem.1",..: 2 4 6 8 10 12 14 16 18 20 ...
da$y <- da$L
da$ue <- with(da, interaction(calor, rept, drop=TRUE))
nlevels(da$ue)
## [1] 20
db <- groupedData(data=da, formula=y~dias|ue, order.groups=FALSE)

m0 <- lme(y~calor*factor(dias), random=~1|ue, data=db, method="ML")
m1 <- lme(y~calor*poly(dias, 1), random=~1|ue, data=db, method="ML")
m2 <- lme(y~calor*poly(dias, 2), random=~1|ue, data=db, method="ML")
anova(m1, m2, m0)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m1     1  6 527.8 543.5 -257.9                       
## m2     2  8 524.5 545.4 -254.3 1 vs 2   7.317  0.0258
## m0     3 12 530.6 561.9 -253.3 2 vs 3   1.922  0.7500
m0 <- m2

## Sem interação
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    76    8381  <.0001
## calor                   1    18       8  0.0123
## poly(dias, 2)           2    76      16  <.0001
## calor:poly(dias, 2)     2    76       0  0.9176
m0 <- lme(y~calor+poly(dias, 2), random=~1|ue, data=db, method="ML")
anova(m0, m2)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m0     1  6 520.7 536.3 -254.3                       
## m2     2  8 524.5 545.4 -254.3 1 vs 2   0.183  0.9125
## summary(m0)
## VarCorr(m0)
summary(m0)$tTable
##                 Value Std.Error DF t-value   p-value
## (Intercept)    43.510    0.6455 78  67.408 6.637e-71
## calorSem       -2.567    0.9128 18  -2.813 1.152e-02
## poly(dias, 2)1 14.465    2.8625 78   5.053 2.797e-06
## poly(dias, 2)2  7.746    2.8625 78   2.706 8.358e-03
## plot(augPred(m0), par.settings=ps)
## plot(m0, par.settings=ps)
## plot(residuals(m0))
## qqnorm(residuals(m0))
## qqnorm(unlist(ranef(m0)))

##-----------------------------------------------------------------------------
##  Predição.

pred <- with(db,
             expand.grid(calor=levels(calor),
                         dias=seq(min(dias), max(dias), l=30)))
pred$y <- predict(m0, newdata=pred, level=0)
str(pred)
## 'data.frame':    60 obs. of  3 variables:
##  $ calor: Factor w/ 2 levels "Com","Sem": 1 2 1 2 1 2 1 2 1 2 ...
##  $ dias : num  1 1 1.28 1.28 1.55 ...
##  $ y    : atomic  42.4 39.8 42.3 39.7 42.2 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  - attr(*, "out.attrs")=List of 2
##   ..$ dim     : Named int  2 30
##   .. ..- attr(*, "names")= chr  "calor" "dias"
##   ..$ dimnames:List of 2
##   .. ..$ calor: chr  "calor=Com" "calor=Sem"
##   .. ..$ dias : chr  "dias=1.000" "dias=1.276" "dias=1.552" "dias=1.828" ...
xyplot(y~dias, groups=calor, data=da, key=key, par.settings=ps,
       ylab="Medida de coloração L", xlab="Período de observação (dias)")+
    as.layer(xyplot(y~dias, groups=calor, data=pred, type="l"))

plot of chunk unnamed-chunk-4

##-----------------------------------------------------------------------------
## Análise do a.

str(da)
## 'data.frame':    100 obs. of  12 variables:
##  $ dias   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ calor  : Factor w/ 2 levels "Com","Sem": 2 2 2 2 2 2 2 2 2 2 ...
##  $ rept   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ L      : num  41 37.5 42.1 37.6 41.6 ...
##  $ a      : num  -12.72 -10.28 -11.39 -9.39 -12.28 ...
##  $ b      : num  20.2 14.5 18.9 14.6 18.6 ...
##  $ E      : num  30.9 23.8 29.9 28.5 29.8 ...
##  $ peso   : num  49.6 55.3 37.1 32.5 38.5 ...
##  $ classif: int  1 2 1 1 1 1 2 1 1 1 ...
##  $ viab   : Factor w/ 2 levels "viável","inviável": 1 1 1 1 1 1 1 1 1 1 ...
##  $ y      : num  41 37.5 42.1 37.6 41.6 ...
##  $ ue     : Factor w/ 20 levels "Com.1","Sem.1",..: 2 4 6 8 10 12 14 16 18 20 ...
da$y <- da$a # c(60,74,80,94,100)
da$y[c(60,74,80,94,100)] <- NA
da$ue <- with(da, interaction(calor, rept, drop=TRUE))
nlevels(da$ue)
## [1] 20
db <- groupedData(data=da[!is.na(da$y),], formula=y~dias|ue, order.groups=FALSE)

m0 <- lme(y~calor*factor(dias), random=~1|ue, data=db, method="ML")
m1 <- lme(y~calor*poly(dias, 1), random=~1|ue, data=db, method="ML")
m2 <- lme(y~calor*poly(dias, 2), random=~1|ue, data=db, method="ML")
anova(m1, m2, m0)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m1     1  6 333.8 349.1 -160.9                       
## m2     2  8 337.5 357.9 -160.7 1 vs 2  0.3521  0.8386
## m0     3 12 342.5 373.2 -159.3 2 vs 3  2.9431  0.5674
m0 <- m1
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    73  2298.7  <.0001
## calor                   1    18     0.2  0.6944
## poly(dias, 1)           1    73    26.3  <.0001
## calor:poly(dias, 1)     1    73     0.1  0.7196
m0 <- lme(y~calor+poly(dias, 1), random=~1|ue, data=db, method="ML")
anova(m0, m1)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m0     1  5 332.0 344.7 -161.0                       
## m1     2  6 333.8 349.1 -160.9 1 vs 2  0.1353   0.713
## summary(m0)
## VarCorr(m0)
summary(m0)$tTable
##                  Value Std.Error DF  t-value   p-value
## (Intercept)   -10.2520    0.3089 74 -33.1920 3.468e-46
## calorSem       -0.2608    0.4314 18  -0.6045 5.530e-01
## poly(dias, 1)   6.1969    1.2024 74   5.1539 2.050e-06
## plot(augPred(m0), par.settings=ps)
## plot(m0, par.settings=ps)
## plot(residuals(m0))
## qqnorm(residuals(m0))
## qqnorm(unlist(ranef(m0)))

##-----------------------------------------------------------------------------
##  Predição.

pred <- with(db,
             expand.grid(calor=levels(calor),
                         dias=seq(min(dias), max(dias), l=30)))
pred$y <- predict(m0, newdata=pred, level=0)
str(pred)
## 'data.frame':    60 obs. of  3 variables:
##  $ calor: Factor w/ 2 levels "Com","Sem": 1 2 1 2 1 2 1 2 1 2 ...
##  $ dias : num  1 1 1.28 1.28 1.55 ...
##  $ y    : atomic  -11.1 -11.4 -11.1 -11.3 -11 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  - attr(*, "out.attrs")=List of 2
##   ..$ dim     : Named int  2 30
##   .. ..- attr(*, "names")= chr  "calor" "dias"
##   ..$ dimnames:List of 2
##   .. ..$ calor: chr  "calor=Com" "calor=Sem"
##   .. ..$ dias : chr  "dias=1.000" "dias=1.276" "dias=1.552" "dias=1.828" ...
xyplot(y~dias, groups=calor, data=da, key=key, par.settings=ps,
       ylab="Medida de coloração a", xlab="Período de observação (dias)")+
    as.layer(xyplot(y~dias, groups=calor, data=pred, type="l"))

plot of chunk unnamed-chunk-4

##-----------------------------------------------------------------------------
## Análise do b.

str(da)
## 'data.frame':    100 obs. of  12 variables:
##  $ dias   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ calor  : Factor w/ 2 levels "Com","Sem": 2 2 2 2 2 2 2 2 2 2 ...
##  $ rept   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ L      : num  41 37.5 42.1 37.6 41.6 ...
##  $ a      : num  -12.72 -10.28 -11.39 -9.39 -12.28 ...
##  $ b      : num  20.2 14.5 18.9 14.6 18.6 ...
##  $ E      : num  30.9 23.8 29.9 28.5 29.8 ...
##  $ peso   : num  49.6 55.3 37.1 32.5 38.5 ...
##  $ classif: int  1 2 1 1 1 1 2 1 1 1 ...
##  $ viab   : Factor w/ 2 levels "viável","inviável": 1 1 1 1 1 1 1 1 1 1 ...
##  $ y      : num  -12.72 -10.28 -11.39 -9.39 -12.28 ...
##  $ ue     : Factor w/ 20 levels "Com.1","Sem.1",..: 2 4 6 8 10 12 14 16 18 20 ...
da$y <- da$b
da$ue <- with(da, interaction(calor, rept, drop=TRUE))
nlevels(da$ue)
## [1] 20
db <- groupedData(data=da[!is.na(da$y),], formula=y~dias|ue, order.groups=FALSE)

m0 <- lme(y~calor*factor(dias), random=~1|ue, data=db, method="ML")
m1 <- lme(y~calor*poly(dias, 1), random=~1|ue, data=db, method="ML")
m2 <- lme(y~calor*poly(dias, 2), random=~1|ue, data=db, method="ML")
anova(m1, m2, m0)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m1     1  6 481.3 496.9 -234.6                       
## m2     2  8 476.0 496.8 -230.0 1 vs 2   9.317  0.0095
## m0     3 12 480.1 511.4 -228.1 2 vs 3   3.852  0.4265
m0 <- m2
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    76  2437.7  <.0001
## calor                   1    18     2.3  0.1507
## poly(dias, 2)           2    76     3.3  0.0433
## calor:poly(dias, 2)     2    76     2.6  0.0812
m0 <- lme(y~calor+poly(dias, 2), random=~1|ue, data=db, method="ML")
anova(m0, m2)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m0     1  6 477.3 492.9 -232.7                       
## m2     2  8 476.0 496.8 -230.0 1 vs 2   5.341  0.0692
## summary(m0)
## VarCorr(m0)
summary(m0)$tTable
##                 Value Std.Error DF t-value   p-value
## (Intercept)    18.709    0.5146 78  36.354 1.158e-50
## calorSem       -1.104    0.7278 18  -1.517 1.467e-01
## poly(dias, 2)1  2.338    2.3097 78   1.012 3.145e-01
## poly(dias, 2)2  5.281    2.3097 78   2.287 2.494e-02
## plot(augPred(m0), par.settings=ps)
## plot(m0, par.settings=ps)
## plot(residuals(m0))
## qqnorm(residuals(m0))
## qqnorm(unlist(ranef(m0)))

##-----------------------------------------------------------------------------
## Predição.

pred <- with(db,
             expand.grid(calor=levels(calor),
                         dias=seq(min(dias), max(dias), l=30)))
pred$y <- predict(m0, newdata=pred, level=0)
str(pred)
## 'data.frame':    60 obs. of  3 variables:
##  $ calor: Factor w/ 2 levels "Com","Sem": 1 2 1 2 1 2 1 2 1 2 ...
##  $ dias : num  1 1 1.28 1.28 1.55 ...
##  $ y    : atomic  19 17.9 18.9 17.8 18.7 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  - attr(*, "out.attrs")=List of 2
##   ..$ dim     : Named int  2 30
##   .. ..- attr(*, "names")= chr  "calor" "dias"
##   ..$ dimnames:List of 2
##   .. ..$ calor: chr  "calor=Com" "calor=Sem"
##   .. ..$ dias : chr  "dias=1.000" "dias=1.276" "dias=1.552" "dias=1.828" ...
xyplot(y~dias, groups=calor, data=da, key=key, par.settings=ps,
       ylab="Medida de coloração b", xlab="Período de observação (dias)")+
    as.layer(xyplot(y~dias, groups=calor, data=pred, type="l"))

plot of chunk unnamed-chunk-4

##-----------------------------------------------------------------------------
## Análise do E.

str(da)
## 'data.frame':    100 obs. of  12 variables:
##  $ dias   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ calor  : Factor w/ 2 levels "Com","Sem": 2 2 2 2 2 2 2 2 2 2 ...
##  $ rept   : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ L      : num  41 37.5 42.1 37.6 41.6 ...
##  $ a      : num  -12.72 -10.28 -11.39 -9.39 -12.28 ...
##  $ b      : num  20.2 14.5 18.9 14.6 18.6 ...
##  $ E      : num  30.9 23.8 29.9 28.5 29.8 ...
##  $ peso   : num  49.6 55.3 37.1 32.5 38.5 ...
##  $ classif: int  1 2 1 1 1 1 2 1 1 1 ...
##  $ viab   : Factor w/ 2 levels "viável","inviável": 1 1 1 1 1 1 1 1 1 1 ...
##  $ y      : num  20.2 14.5 18.9 14.6 18.6 ...
##  $ ue     : Factor w/ 20 levels "Com.1","Sem.1",..: 2 4 6 8 10 12 14 16 18 20 ...
da$y <- da$E
da$ue <- with(da, interaction(calor, rept, drop=TRUE))
nlevels(da$ue)
## [1] 20
db <- groupedData(data=da[!is.na(da$y),], formula=y~dias|ue, order.groups=FALSE)

m0 <- lme(y~calor*factor(dias), random=~1|ue, data=db, method="ML")
m1 <- lme(y~calor*poly(dias, 1), random=~1|ue, data=db, method="ML")
m2 <- lme(y~calor*poly(dias, 2), random=~1|ue, data=db, method="ML")
anova(m1, m2, m0)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m1     1  6 526.5 542.1 -257.3                       
## m2     2  8 521.0 541.8 -252.5 1 vs 2   9.564  0.0084
## m0     3 12 527.8 559.1 -251.9 2 vs 3   1.133  0.8890
m0 <- m2
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    76    4417  <.0001
## calor                   1    18       5  0.0361
## poly(dias, 2)           2    76       5  0.0099
## calor:poly(dias, 2)     2    76       1  0.4910
m0 <- lme(y~calor+poly(dias, 2), random=~1|ue, data=db, method="ML")
anova(m0, m2)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m0     1  6 518.5 534.1 -253.2                       
## m2     2  8 521.0 541.8 -252.5 1 vs 2   1.513  0.4692
## summary(m0)
## VarCorr(m0)
summary(m0)$tTable
##                 Value Std.Error DF t-value   p-value
## (Intercept)    30.068    0.6123 78  49.108 2.012e-60
## calorSem       -1.982    0.8659 18  -2.288 3.442e-02
## poly(dias, 2)1  3.731    2.8602 78   1.305 1.959e-01
## poly(dias, 2)2  8.156    2.8602 78   2.851 5.567e-03
## plot(augPred(m0), par.settings=ps)
## plot(m0, par.settings=ps)
## plot(residuals(m0))
## qqnorm(residuals(m0))
## qqnorm(unlist(ranef(m0)))

##-----------------------------------------------------------------------------
## Predição.

pred <- with(db,
             expand.grid(calor=levels(calor),
                         dias=seq(min(dias), max(dias), l=30)))
pred$y <- predict(m0, newdata=pred, level=0)
str(pred)
## 'data.frame':    60 obs. of  3 variables:
##  $ calor: Factor w/ 2 levels "Com","Sem": 1 2 1 2 1 2 1 2 1 2 ...
##  $ dias : num  1 1 1.28 1.28 1.55 ...
##  $ y    : atomic  30.5 28.5 30.3 28.3 30.1 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  - attr(*, "out.attrs")=List of 2
##   ..$ dim     : Named int  2 30
##   .. ..- attr(*, "names")= chr  "calor" "dias"
##   ..$ dimnames:List of 2
##   .. ..$ calor: chr  "calor=Com" "calor=Sem"
##   .. ..$ dias : chr  "dias=1.000" "dias=1.276" "dias=1.552" "dias=1.828" ...
xyplot(y~dias, groups=calor, data=da, key=key, par.settings=ps,
       ylab="Medida de coloração E", xlab="Período de observação (dias)")+
    as.layer(xyplot(y~dias, groups=calor, data=pred, type="l"))

plot of chunk unnamed-chunk-4

Análise do período de viabilidade

##-----------------------------------------------------------------------------
## Análise de sobreviência para a variável classificação.
## Dado com censura intervalar.

da$muda <- as.numeric(da$classif>2)
aggregate(muda~dias+calor, da, mean)
##    dias calor muda
## 1     1   Com  0.0
## 2     3   Com  0.0
## 3     5   Com  0.3
## 4     7   Com  0.6
## 5     9   Com  1.0
## 6     1   Sem  0.0
## 7     3   Sem  0.0
## 8     5   Sem  0.0
## 9     7   Sem  0.1
## 10    9   Sem  0.8
myfun <- function(x, y){
    Y <- cumsum(y)
    wm <- sum(Y==0)
    x <- c(x[wm+0:1])
    if(length(x)==1) x <- c(0.0001, x)
    matrix(x, ncol=2, dimnames=list(NULL, c("esq","dir")))
}

dc <- split(da, f=da$ue)
dc <- do.call(rbind,
              lapply(dc,
                     function(d){
                         z <- myfun(x=d$dias, y=d$muda)
                         d <- cbind(d[1,c("calor","rept")])
                         d <- cbind(d, data.frame(z))
                         d
                     }))
str(dc)
## 'data.frame':    20 obs. of  4 variables:
##  $ calor: Factor w/ 2 levels "Com","Sem": 1 2 1 2 1 2 1 2 1 2 ...
##  $ rept : int  1 1 2 2 3 3 4 4 5 5 ...
##  $ esq  : int  7 7 7 5 7 7 3 7 7 9 ...
##  $ dir  : int  9 9 9 7 9 9 5 9 9 NA ...
na <- is.na(dc$dir)
dc$dir[na] <- dc$esq[na]

dc$status <- 3     ## Censura intervalar.
dc$status[na] <- 0 ## Censura à direita.

aggregate(cbind(esq, dir)~calor, dc, mean)
##   calor esq dir
## 1   Com 5.2 7.2
## 2   Sem 7.2 8.8
##-----------------------------------------------------------------------------
## Conduzindo uma análise de sobreviência.

S <- with(dc, Surv(time=esq, time2=dir, event=status, type="interval"))
S
##  [1] [7, 9] [7, 9] [7, 9] [5, 7] [7, 9] [7, 9] [3, 5] [7, 9] [7, 9] 9+     [5, 7] [7, 9]
## [13] [5, 7] [7, 9] [5, 7] [7, 9] [3, 5] [7, 9] [3, 5] 9+
dist <- "weibull"

s0 <- survreg(S~calor, data=dc, dist=dist)
s1 <- survreg(S~1, data=dc, dist=dist)
anova(s0, s1)
##   Terms Resid. Df -2*LL Test Df Deviance Pr(>Chi)
## 1 calor        17 43.64      NA       NA       NA
## 2     1        18 49.53    = -1   -5.891  0.01522
summary(s0)
## 
## Call:
## survreg(formula = S ~ calor, data = dc, dist = dist)
##              Value Std. Error     z         p
## (Intercept)  1.930     0.0611 31.57 1.01e-218
## calorSem     0.217     0.0847  2.56  1.04e-02
## Log(scale)  -1.842     0.2366 -7.79  6.91e-15
## 
## Scale= 0.159 
## 
## Weibull distribution
## Loglik(model)= -21.8   Loglik(intercept only)= -24.8
##  Chisq= 5.89 on 1 degrees of freedom, p= 0.015 
## Number of Newton-Raphson Iterations: 5 
## n= 20
##  exp(1.930)
##  exp(1.930+0.217)

## Tempo médio de viabilidade.
predict(s0, newdata=data.frame(calor=levels(dc$calor)), type="response")
##     1     2 
## 6.891 8.560
## Tempo para que 50% de estacas da população fiquem inviáveis.
predict(s0, newdata=data.frame(calor=levels(dc$calor)),
        type="quantile", p=0.5)
##     1     2 
## 6.502 8.077
X <- LSmatrix(s0, effect="calor")
ci <- confint(glht(s0, linfct=X))
ci
## 
##   Simultaneous Confidence Intervals
## 
## Fit: survreg(formula = S ~ calor, data = dc, dist = dist)
## 
## Quantile = 2.236
## 95% family-wise confidence level
##  
## 
## Linear Hypotheses:
##        Estimate lwr   upr  
## 1 == 0 1.930    1.793 2.067
## 2 == 0 2.147    2.016 2.278
th <- exp(ci$confint[,"Estimate"])
sh <- 1/summary(s0)[[6]]
## sh <- 1/coef(s0, allCoef=TRUE)
## names(s0)
## s0$icoef

curve(pweibull(x, shape=sh, scale=th[1]), 0, 13, ann=FALSE)
curve(pweibull(x, shape=sh, scale=th[2]), add=TRUE, lty=2)
title(xlab="Dias de avaliação", ylab="Probabilidade de passar à inviável")
legend("topleft", bty="n", lty=1:2,
       title="Calor", legend=levels(da$calor))

plot of chunk unnamed-chunk-5