Efeito do calor em estacas de B. tridentata

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_tridentata.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  35.5 42.9 40.8 40.1 38.7 ...
##  $ a      : num  -9.79 -8.67 -9.83 -10.23 -7.67 ...
##  $ b      : num  13.3 13.7 12.9 14.1 15.2 ...
##  $ E      : num  21.7 25.8 24.4 25 24.4 ...
##  $ peso   : num  44.2 20 24.1 29.2 32.9 ...
##  $ 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  35.5 42.9 40.8 40.1 38.7 ...
##  $ a      : num  -9.79 -8.67 -9.83 -10.23 -7.67 ...
##  $ b      : num  13.3 13.7 12.9 14.1 15.2 ...
##  $ E      : num  21.7 25.8 24.4 25 24.4 ...
##  $ peso   : num  44.2 20 24.1 29.2 32.9 ...
##  $ 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  35.5 42.9 40.8 40.1 38.7 ...
##  $ a      : num  -9.79 -8.67 -9.83 -10.23 -7.67 ...
##  $ b      : num  13.3 13.7 12.9 14.1 15.2 ...
##  $ E      : num  21.7 25.8 24.4 25 24.4 ...
##  $ peso   : num  44.2 20 24.1 29.2 32.9 ...
##  $ 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 538.4 554.0 -263.2                       
## m2     2  8 533.1 553.9 -258.5 1 vs 2   9.316  0.0095
## m0     3 12 540.7 572.0 -258.4 2 vs 3   0.316  0.9887
m0 <- m2

##  Interação de calor com o tempo nos termos quadráticos.
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    76  224.52  <.0001
## calor                   1    18    1.48  0.2389
## poly(dias, 2)           2    76   56.34  <.0001
## calor:poly(dias, 2)     2    76    1.82  0.1688
## Estimativas dos termos de efeito fixo.
summary(m0)$tTable
##                           Value Std.Error DF t-value   p-value
## (Intercept)              21.083     2.166 76   9.734 5.309e-15
## calorSem                  3.731     3.063 18   1.218 2.389e-01
## poly(dias, 2)1          -19.071     3.193 76  -5.973 7.013e-08
## poly(dias, 2)2           -4.945     3.193 76  -1.549 1.256e-01
## calorSem:poly(dias, 2)1  -7.904     4.516 76  -1.750 8.409e-02
## calorSem:poly(dias, 2)2  -3.436     4.516 76  -0.761 4.490e-01
## 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=30, 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=25, 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(27.3890000050413, -4.37300000734149, -1.47024999513089, 0.534999994359986, 
##         4.0812220000996, -0.525933745750815)

## dput(fixef(n12))
ch <- c(24.4542499088563, 2.93475007676411, -0.674249988405072, 
        -0.796000034655532, 4.08122214761683, 0)

##-----------------------------------------------------------------------------
##  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: -259 , nlm iterations: 1 
## reStruct  parameters:
##     ue 
## -1.093 
## 
## PNLS step: RSS =  484.9 
##  fixed effects:23.02  4.373  -0.9353  -0.535  3.555  0.5259  
##  iterations: 3 
## 
## Convergence:
##     fixed  reStruct 
## 1.000e+00 1.517e-09 
## 
## **Iteration 2
## LME step: Loglik: -259 , nlm iterations: 1 
## reStruct  parameters:
##     ue 
## -1.093 
## 
## PNLS step: RSS =  484.9 
##  fixed effects:23.02  4.373  -0.9353  -0.535  3.555  0.5259  
##  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
##   534 554.8   -259
## 
## Random effects:
##  Formula: b0 ~ 1 | ue
##         b0.(Intercept) Residual
## StdDev:          6.567    2.202
## 
## Fixed effects: b0 + tx + xb ~ calor 
##                 Value Std.Error DF t-value p-value
## b0.(Intercept) 23.016    2.2014 75  10.455  0.0000
## b0.calorSem     4.373    3.1132 75   1.405  0.1643
## tx.(Intercept) -0.935    0.2539 75  -3.683  0.0004
## tx.calorSem    -0.535    0.3591 75  -1.490  0.1405
## xb.(Intercept)  3.555    1.1689 75   3.042  0.0032
## xb.calorSem     0.526    1.3488 75   0.390  0.6977
##  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.107  0.076 -0.800  0.566       
## xb.calorSem     0.093 -0.107  0.693 -0.755 -0.867
## 
## Standardized Within-Group Residuals:
##     Min      Q1     Med      Q3     Max 
## -3.1325 -0.4506 -0.0360  0.3514  4.3773 
## 
## Number of Observations: 100
## Number of Groups: 20
logLik(n11)
## 'log Lik.' -259 (df=8)
logLik(m0)
## 'log Lik.' -258.5 (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: -260.3 , nlm iterations: 1 
## reStruct  parameters:
##     ue 
## -1.076 
## 
## PNLS step: RSS =  500.8 
##  fixed effects:24.45  2.935  -0.6743  -0.796  4.081  
##  iterations: 2 
## 
## Convergence:
##     fixed  reStruct 
## 4.930e-08 1.808e-09
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
##   534.6 552.8 -260.3
## 
## Random effects:
##  Formula: b0 ~ 1 | ue
##         b0.(Intercept) Residual
## StdDev:          6.565    2.238
## 
## Fixed effects: list(b0 + tx ~ calor, xb ~ 1) 
##                 Value Std.Error DF t-value p-value
## b0.(Intercept) 24.454    2.2297 76  10.968  0.0000
## b0.calorSem     2.935    3.1259 76   0.939  0.3508
## tx.(Intercept) -0.674    0.1148 76  -5.874  0.0000
## tx.calorSem    -0.796    0.2812 76  -2.831  0.0059
## xb              4.081    0.6804 76   5.999  0.0000
##  Correlation: 
##                b0.(I) b0.clS tx.(I) tx.clS
## b0.calorSem    -0.713                     
## tx.(Intercept) -0.257  0.184              
## tx.calorSem     0.105 -0.075 -0.408       
## xb              0.000 -0.084  0.000 -0.684
## 
## Standardized Within-Group Residuals:
##      Min       Q1      Med       Q3      Max 
## -3.08144 -0.48480  0.01693  0.48725  4.30613 
## 
## Number of Observations: 100
## Number of Groups: 20
anova(n12, n11)
##     Model df   AIC   BIC logLik   Test L.Ratio p-value
## n12     1  7 534.6 552.8 -260.3                       
## n11     2  8 534.0 554.8 -259.0 1 vs 2   2.573  0.1087
##  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: -260.2 , nlm iterations: 1 
## reStruct  parameters:
##     ue 
## -1.078 
## 
## PNLS step: RSS =  500.4 
##  fixed effects:23.02  4.692  -1.113  4.105  -1.355  
##  iterations: 4 
## 
## Convergence:
##    fixed reStruct 
## 1.000000 0.001164 
## 
## **Iteration 2
## LME step: Loglik: -260.3 , nlm iterations: 1 
## reStruct  parameters:
##     ue 
## -1.077 
## 
## PNLS step: RSS =  500.4 
##  fixed effects:23.02  4.692  -1.113  4.105  -1.355  
##  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
##   534.5 552.8 -260.3
## 
## Random effects:
##  Formula: b0 ~ 1 | ue
##         b0.(Intercept) Residual
## StdDev:          6.565    2.237
## 
## Fixed effects: list(b0 ~ calor, tx ~ 1, xb ~ calor) 
##                 Value Std.Error DF t-value p-value
## b0.(Intercept) 23.016    2.1909 76  10.505  0.0000
## b0.calorSem     4.692    3.1406 76   1.494  0.1393
## tx             -1.113    0.1372 76  -8.114  0.0000
## xb.(Intercept)  4.105    0.6941 76   5.915  0.0000
## xb.calorSem    -1.355    0.9423 76  -1.438  0.1544
##  Correlation: 
##                b0.(I) b0.clS tx     xb.(I)
## b0.calorSem    -0.698                     
## tx              0.000  0.000              
## xb.(Intercept) -0.156  0.109 -0.514       
## xb.calorSem     0.115 -0.240 -0.046 -0.518
## 
## Standardized Within-Group Residuals:
##      Min       Q1      Med       Q3      Max 
## -3.34836 -0.45810  0.04078  0.45606  4.16491 
## 
## 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 534.0 554.8 -259.0                       
## n13     2  7 534.5 552.8 -260.3 1 vs 2   2.523  0.1122
AIC(n11); AIC(m0)
##     
## 534
## [1] 533.1
##-----------------------------------------------------------------------------
##  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  23.8 27.4 23.6 27.4 23.4 ...
##   ..- 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 
##        24.4543         2.9347        -0.6743        -0.7960         4.0812
formula(n12)
## y ~ b0 + tx * (dias - xb * i) * (dias > xb * i)
## <environment: 0xaa1a208>
## 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  23.8 27.4 23.6 27.4 23.4 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  $ yn   : atomic  23.8 27.4 23.6 27.4 23.4 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  $ ym   : atomic  23.2 27.6 23.2 27.6 23.1 ...
##   ..- attr(*, "label")= chr "Predicted values"
##  $ se   : num  2.15 2.14 2.14 2.14 2.14 ...
##  $ lwr  : num  19.6 23.2 19.4 23.2 19.2 ...
##  $ fit  : num  23.8 27.4 23.6 27.4 23.4 ...
##  $ upr  : num  28 31.6 27.8 31.6 27.6 ...
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  35.5 42.9 40.8 40.1 38.7 ...
##  $ a      : num  -9.79 -8.67 -9.83 -10.23 -7.67 ...
##  $ b      : num  13.3 13.7 12.9 14.1 15.2 ...
##  $ E      : num  21.7 25.8 24.4 25 24.4 ...
##  $ peso   : num  44.2 20 24.1 29.2 32.9 ...
##  $ 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  44.2 20 24.1 29.2 32.9 ...
##  $ 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 526.9 542.5 -257.4                       
## m2     2  8 530.7 551.6 -257.4 1 vs 2  0.1489  0.9282
## m0     3 12 537.6 568.8 -256.8 2 vs 3  1.1704  0.8829
m0 <- m1

## Sem interação
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    78    7301  <.0001
## calor                   1    18       2  0.1915
## poly(dias, 1)           1    78      12  0.0011
## calor:poly(dias, 1)     1    78       0  0.8708
m0 <- lme(y~calor+dias, random=~1|ue, data=db, method="ML")
anova(m0, m2)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m0     1  5 524.9 537.9 -257.5                       
## m2     2  8 530.7 551.6 -257.4 1 vs 2  0.1767  0.9813
## summary(m0)
## VarCorr(m0)
summary(m0)$tTable
##               Value Std.Error DF t-value   p-value
## (Intercept) 41.3771    0.8667 79  47.742 4.982e-60
## calorSem    -1.3486    0.9886 18  -1.364 1.893e-01
## dias         0.3503    0.1025 79   3.419 9.967e-04
## 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  41.7 40.4 41.8 40.5 41.9 ...
##   ..- 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  35.5 42.9 40.8 40.1 38.7 ...
##  $ a      : num  -9.79 -8.67 -9.83 -10.23 -7.67 ...
##  $ b      : num  13.3 13.7 12.9 14.1 15.2 ...
##  $ E      : num  21.7 25.8 24.4 25 24.4 ...
##  $ peso   : num  44.2 20 24.1 29.2 32.9 ...
##  $ 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  35.5 42.9 40.8 40.1 38.7 ...
##  $ 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 459.4 475.0 -223.7                       
## m2     2  8 461.1 482.0 -222.6 1 vs 2   2.211  0.3310
## m0     3 12 467.1 498.4 -221.6 2 vs 3   2.006  0.7347
m0 <- m1
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    78   466.3  <.0001
## calor                   1    18     6.5  0.0201
## poly(dias, 1)           1    78    19.3  <.0001
## calor:poly(dias, 1)     1    78    16.0  0.0001
m0 <- lme(y~calor*dias, random=~1|ue, data=db, method="ML")
anova(m0, m1)
##    Model df   AIC BIC logLik
## m0     1  6 459.4 475 -223.7
## m1     2  6 459.4 475 -223.7
## summary(m0)
## VarCorr(m0)
summary(m0)$tTable
##                  Value Std.Error DF  t-value   p-value
## (Intercept)   -9.71405    0.7548 78 -12.8705 5.540e-21
## calorSem      -0.83600    1.0674 18  -0.7832 4.437e-01
## dias           0.02805    0.1010 78   0.2776 7.820e-01
## calorSem:dias  0.57180    0.1429 78   4.0017 1.421e-04
## 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  -9.69 -9.95 -9.68 -9.78 -9.67 ...
##   ..- 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  35.5 42.9 40.8 40.1 38.7 ...
##  $ a      : num  -9.79 -8.67 -9.83 -10.23 -7.67 ...
##  $ b      : num  13.3 13.7 12.9 14.1 15.2 ...
##  $ E      : num  21.7 25.8 24.4 25 24.4 ...
##  $ peso   : num  44.2 20 24.1 29.2 32.9 ...
##  $ 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  -9.79 -8.67 -9.83 -10.23 -7.67 ...
##  $ 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 494.6 510.2 -241.3                       
## m2     2  8 498.2 519.1 -241.1 1 vs 2  0.3694  0.8314
## m0     3 12 505.8 537.1 -240.9 2 vs 3  0.3877  0.9835
m0 <- m2
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    76  1071.2  <.0001
## calor                   1    18     7.6  0.0128
## poly(dias, 2)           2    76     0.6  0.5294
## calor:poly(dias, 2)     2    76     0.3  0.7678
m0 <- lme(y~calor+dias, random=~1|ue, data=db, method="ML")
anova(m0, m2)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m0     1  5 493.1 506.2 -241.6                       
## m2     2  8 498.2 519.1 -241.1 1 vs 2  0.9212  0.8203
## summary(m0)
## VarCorr(m0)
summary(m0)$tTable
##                Value Std.Error DF t-value   p-value
## (Intercept) 16.42518    0.7861 79 20.8942 6.426e-34
## calorSem    -2.62160    0.9343 18 -2.8059 1.169e-02
## dias         0.08352    0.0852 79  0.9803 3.299e-01
## 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  16.5 13.9 16.5 13.9 16.6 ...
##   ..- 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  35.5 42.9 40.8 40.1 38.7 ...
##  $ a      : num  -9.79 -8.67 -9.83 -10.23 -7.67 ...
##  $ b      : num  13.3 13.7 12.9 14.1 15.2 ...
##  $ E      : num  21.7 25.8 24.4 25 24.4 ...
##  $ peso   : num  44.2 20 24.1 29.2 32.9 ...
##  $ 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  13.3 13.7 12.9 14.1 15.2 ...
##  $ 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 565.1 580.7 -276.5                       
## m2     2  8 569.0 589.9 -276.5 1 vs 2  0.0351  0.9826
## m0     3 12 575.8 607.1 -275.9 2 vs 3  1.2251  0.8739
m0 <- m1
anova(m0)
##                     numDF denDF F-value p-value
## (Intercept)             1    78  2028.2  <.0001
## calor                   1    18     6.1  0.0238
## poly(dias, 1)           1    78     3.9  0.0528
## calor:poly(dias, 1)     1    78     1.8  0.1880
m0 <- lme(y~calor+dias, random=~1|ue, data=db, method="ML")
anova(m0, m2)
##    Model df   AIC   BIC logLik   Test L.Ratio p-value
## m0     1  5 564.9 577.9 -277.4                       
## m2     2  8 569.0 589.9 -276.5 1 vs 2   1.852  0.6037
## summary(m0)
## VarCorr(m0)
summary(m0)$tTable
##               Value Std.Error DF t-value   p-value
## (Intercept) 27.0441    1.0471 79  25.828 2.863e-40
## calorSem    -2.9386    1.1842 18  -2.482 2.318e-02
## dias         0.2458    0.1257 79   1.955 5.416e-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  27.3 24.4 27.4 24.4 27.4 ...
##   ..- 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.5
## 5     9   Com  0.8
## 6     1   Sem  0.0
## 7     3   Sem  0.0
## 8     5   Sem  0.3
## 9     7   Sem  0.7
## 10    9   Sem  0.9
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 5 5 5 9 3 3 9 7 3 ...
##  $ dir  : int  9 7 7 7 NA 5 5 NA 9 5 ...
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.6 7.2
## 2   Sem 5.2 7.0
##-----------------------------------------------------------------------------
## Conduzindo uma análise de sobreviência.

S <- with(dc, Surv(time=esq, time2=dir, event=status, type="interval"))
S
##  [1] [7, 9] [5, 7] [5, 7] [5, 7] 9+     [3, 5] [3, 5] 9+     [7, 9] [3, 5] [5, 7] [7, 9]
## [13] [5, 7] [5, 7] 9+     [7, 9] [3, 5] [3, 5] [3, 5] [5, 7]
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 56.53      NA       NA       NA
## 2     1        18 56.93    = -1  -0.3962    0.529
summary(s0)
## 
## Call:
## survreg(formula = S ~ calor, data = dc, dist = dist)
##               Value Std. Error     z        p
## (Intercept)  2.0182      0.108 18.72 3.61e-78
## calorSem    -0.0938      0.149 -0.63 5.28e-01
## Log(scale)  -1.2066      0.208 -5.79 6.94e-09
## 
## Scale= 0.299 
## 
## Weibull distribution
## Loglik(model)= -28.3   Loglik(intercept only)= -28.5
##  Chisq= 0.4 on 1 degrees of freedom, p= 0.53 
## Number of Newton-Raphson Iterations: 4 
## 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 
## 7.525 6.851
## 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.743 6.140
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 2.018    1.777 2.259
## 2 == 0 1.924    1.692 2.156
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