# ROGER GUEVARA (roger.guevara@inecol.edu.mx)

# INSTITUTO DE ECOLOGIA A.C RED DE BIOLOGÍA EVOLUTIVA

# ESTADISTICA COMPUTACIONAL EN R



# Regresión (cont.) ----
DATOS <- read.table("~/desktop/curso R 2012/TOLOACHE.csv", header = TRUE, sep = ",")
attach(DATOS)
names(DATOS)
##  [1] "NOTAS"          "NUM"            "INVERNADERO"    "LUZ"           
##  [5] "MICORRIZA"      "SUELO"          "HERBIVORIA"     "RAIZ"          
##  [9] "TALLO"          "HOJAS"          "FLORES"         "CAPSULAS"      
## [13] "SEMILLAS"       "INMADUROS"      "PESO_TOTAL"     "NUM_FLORES"    
## [17] "DIAS_A_LA_FLOR" "FRUT_INMADUROS" "FRUT_MADUROS"   "TOT_FRUTOS"    
## [21] "ABORTOS"        "ALT_TOT"        "HOJAS_TOT"      "DUREZA"        
## [25] "AREA"           "PESO_HOJAS"     "AFE"            "LONG_HIFAS"    
## [29] "HIFAS"          "ESPORAS"        "VESICULAS"      "ARBUSCULOS"    
## [33] "TOTAL"

# Ahora hagamos modelos de regresión por separado para cada combinación de
# << LUZ >>, << SUELO >> y << HERBIVORIA >>. Son en total 8 combinaciones
# diferentes. Para cada una vamos a calcular su modelo de regresión y
# graficarlo junto con el intervalo de confianza


# Lo primero que debemos hacer es crear subconjuntos de datos para una de
# las combinaciones. Empecemos con la combinación << LUZ=='ML' >>, <<
# SUELO=='P' >> y << HERBIVORIA=='CH'

# MUCHA LUZ, SUELO POBRE, CON HERBIVORÍA
NO.FLORES <- NUM_FLORES[LUZ == "ML" & SUELO == "P" & HERBIVORIA == "CH"]
PEOS.FLORES <- FLORES[LUZ == "ML" & SUELO == "P" & HERBIVORIA == "CH"]

M <- lm(PEOS.FLORES ~ NO.FLORES)
summary(M)
## 
## Call:
## lm(formula = PEOS.FLORES ~ NO.FLORES)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.0540 -0.0347 -0.0213  0.0174  0.2374 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.03677    0.02744    1.34    0.191  
## NO.FLORES    0.01862    0.00911    2.04    0.051 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.0631 on 28 degrees of freedom
## Multiple R-squared: 0.13,    Adjusted R-squared: 0.0987 
## F-statistic: 4.17 on 1 and 28 DF,  p-value: 0.0506
anova(M)
## Analysis of Variance Table
## 
## Response: PEOS.FLORES
##           Df Sum Sq Mean Sq F value Pr(>F)  
## NO.FLORES  1 0.0166 0.01660    4.17  0.051 .
## Residuals 28 0.1113 0.00398                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(PEOS.FLORES ~ NO.FLORES)
abline(M, col = "red")

SEQ <- seq(1, 6, length = 30)
ND <- data.frame(NO.FLORES = SEQ)
PRED <- predict(M, ND, se = TRUE)
T <- qt(0.025, 28)
lines(SEQ, PRED$fit - T * PRED$se.fit, lty = 2, col = "red")
lines(SEQ, PRED$fit + T * PRED$se.fit, lty = 2, col = "red")

lines(SEQ, PRED$fit - 1.96 * PRED$se.fit, lty = 2, col = "purple")
lines(SEQ, PRED$fit + 1.96 * PRED$se.fit, lty = 2, col = "purple")

abline(h = mean(PEOS.FLORES), col = "blue", lty = 3)

plot of chunk unnamed-chunk-1


# Note como en este ejemplo al colocar una linea horizontal en el promedio
# de Y << PESO.FLORES >>, la hipótesis nula, esta cabe perfectamente
# dentro del intervalo de confianza lo cual es un indicio gráfico de la
# que relación es estadísticamente no significativa. Comparé esto con los
# siguientes ejemplos de las regresiones en las diferentes combinaciones
# de << LUZ >>, << SUELO >> Y << HERBIVORIA >> que se realizan mediante
# bucles anidados.

for (i in levels(LUZ)) {
    for (j in levels(SUELO)) {
        for (k in levels(HERBIVORIA)) {

            NO.FLORES <- NUM_FLORES[LUZ == i & SUELO == j & HERBIVORIA == k]
            PEOS.FLORES <- FLORES[LUZ == i & SUELO == j & HERBIVORIA == k]

            M <- lm(PEOS.FLORES ~ NO.FLORES)
            summary(M)
            anova(M)
            plot(PEOS.FLORES ~ NO.FLORES, main = paste(i, j, k))
            abline(M, col = "red")

            SEQ <- seq(min(NO.FLORES, na.rm = TRUE), max(NO.FLORES, na.rm = TRUE), 
                length = 30)
            ND <- data.frame(NO.FLORES = SEQ)
            PRED <- predict(M, ND, se = TRUE)
            T <- qt(0.025, 28)
            lines(SEQ, PRED$fit - T * PRED$se.fit, lty = 2, col = "red")
            lines(SEQ, PRED$fit + T * PRED$se.fit, lty = 2, col = "red")

            abline(h = mean(PEOS.FLORES, na.rm = TRUE), col = "blue", lty = 3)
        }
    }
}

plot of chunk unnamed-chunk-1 plot of chunk unnamed-chunk-1 plot of chunk unnamed-chunk-1 plot of chunk unnamed-chunk-1 plot of chunk unnamed-chunk-1 plot of chunk unnamed-chunk-1 plot of chunk unnamed-chunk-1 plot of chunk unnamed-chunk-1




## Regresión múltiple------
DATOS <- read.table("~/desktop/curso R 2012/TOLOACHE.csv", header = TRUE, sep = ",")
attach(DATOS)
## The following object(s) are masked from 'DATOS (position 3)':
## 
##     ABORTOS, AFE, ALT_TOT, ARBUSCULOS, AREA, CAPSULAS,
##     DIAS_A_LA_FLOR, DUREZA, ESPORAS, FLORES, FRUT_INMADUROS,
##     FRUT_MADUROS, HERBIVORIA, HIFAS, HOJAS, HOJAS_TOT, INMADUROS,
##     INVERNADERO, LONG_HIFAS, LUZ, MICORRIZA, NOTAS, NUM,
##     NUM_FLORES, PESO_HOJAS, PESO_TOTAL, RAIZ, SEMILLAS, SUELO,
##     TALLO, TOT_FRUTOS, TOTAL, VESICULAS
names(DATOS)
##  [1] "NOTAS"          "NUM"            "INVERNADERO"    "LUZ"           
##  [5] "MICORRIZA"      "SUELO"          "HERBIVORIA"     "RAIZ"          
##  [9] "TALLO"          "HOJAS"          "FLORES"         "CAPSULAS"      
## [13] "SEMILLAS"       "INMADUROS"      "PESO_TOTAL"     "NUM_FLORES"    
## [17] "DIAS_A_LA_FLOR" "FRUT_INMADUROS" "FRUT_MADUROS"   "TOT_FRUTOS"    
## [21] "ABORTOS"        "ALT_TOT"        "HOJAS_TOT"      "DUREZA"        
## [25] "AREA"           "PESO_HOJAS"     "AFE"            "LONG_HIFAS"    
## [29] "HIFAS"          "ESPORAS"        "VESICULAS"      "ARBUSCULOS"    
## [33] "TOTAL"

# Ahora tratemos de incluir varias variables explicativas en el modelo de
# regresión. Esto se vuelve una regresión múltiple. Consideremos el
# siguiente modelo con cinco variables explicativas

M <- lm(FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA)
summary(M)
## 
## Call:
## lm(formula = FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5878 -0.0444 -0.0003  0.0406  0.8259 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.039694   0.043096    0.92   0.3581    
## TALLO        0.012660   0.004170    3.04   0.0027 ** 
## HOJAS       -0.001311   0.006870   -0.19   0.8489    
## RAIZ         0.042239   0.014315    2.95   0.0035 ** 
## AREA         0.001803   0.000328    5.50  1.1e-07 ***
## DUREZA      -0.000877   0.000728   -1.21   0.2295    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.12 on 205 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.824,   Adjusted R-squared: 0.819 
## F-statistic:  192 on 5 and 205 DF,  p-value: <2e-16

# Podemos observar que algunos de los coeficientes del predictor lineal
# son estadísticamente significativos, es decir son diferentes de cero. La
# varianza explicada es 0.8237. Con estas cinco variables explicativas
# tenemos además la posibilidad de incluir 10 interacciones en pares de
# estas variables. La notación para estos por ejemplo << TALLO:HOJAS >>
# donde los dos puntos es lo que determina que las variables que le
# flaquean son las que interactúan.

M <- lm(FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA + TALLO:HOJAS + TALLO:RAIZ + 
    TALLO:AREA + TALLO:DUREZA + HOJAS:RAIZ + HOJAS:AREA + HOJAS:DUREZA + RAIZ:AREA + 
    RAIZ:DUREZA + AREA:DUREZA)
summary(M)
## 
## Call:
## lm(formula = FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA + 
##     TALLO:HOJAS + TALLO:RAIZ + TALLO:AREA + TALLO:DUREZA + HOJAS:RAIZ + 
##     HOJAS:AREA + HOJAS:DUREZA + RAIZ:AREA + RAIZ:DUREZA + AREA:DUREZA)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5757 -0.0443 -0.0057  0.0375  0.7928 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept)   6.16e-02   7.97e-02    0.77     0.44
## TALLO         2.46e-02   3.24e-02    0.76     0.45
## HOJAS        -1.28e-02   4.41e-02   -0.29     0.77
## RAIZ          5.92e-02   1.04e-01    0.57     0.57
## AREA         -1.33e-03   2.45e-03   -0.54     0.59
## DUREZA       -4.27e-04   1.42e-03   -0.30     0.76
## TALLO:HOJAS   1.13e-03   2.01e-03    0.56     0.57
## TALLO:RAIZ   -3.56e-03   3.52e-03   -1.01     0.31
## TALLO:AREA   -1.47e-04   1.45e-04   -1.01     0.31
## TALLO:DUREZA  1.37e-04   3.65e-04    0.37     0.71
## HOJAS:RAIZ    2.07e-03   1.01e-02    0.21     0.84
## HOJAS:AREA    8.30e-05   2.44e-04    0.34     0.73
## HOJAS:DUREZA -3.65e-04   5.27e-04   -0.69     0.49
## RAIZ:AREA     7.10e-04   4.56e-04    1.56     0.12
## RAIZ:DUREZA  -6.36e-04   1.21e-03   -0.52     0.60
## AREA:DUREZA   2.99e-05   3.59e-05    0.83     0.41
## 
## Residual standard error: 0.12 on 195 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.832,   Adjusted R-squared: 0.819 
## F-statistic: 64.5 on 15 and 195 DF,  p-value: <2e-16

# Note que hay una ligera mejora en el valor de varianza explicada, y la
# la probabilidad de los coeficientes ha cambiado.

# Además de las interacciones dobles también podemos incluir 10
# interacciones triples

M <- lm(FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA + TALLO:HOJAS + TALLO:RAIZ + 
    TALLO:AREA + TALLO:DUREZA + HOJAS:RAIZ + HOJAS:AREA + HOJAS:DUREZA + RAIZ:AREA + 
    RAIZ:DUREZA + AREA:DUREZA + TALLO:HOJAS:RAIZ + TALLO:HOJAS:AREA + TALLO:HOJAS:DUREZA + 
    TALLO:RAIZ:AREA + TALLO:RAIZ:DUREZA + TALLO:AREA:DUREZA + HOJAS:RAIZ:AREA + 
    HOJAS:RAIZ:DUREZA + HOJAS:AREA:DUREZA + RAIZ:AREA:DUREZA)
summary(M)
## 
## Call:
## lm(formula = FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA + 
##     TALLO:HOJAS + TALLO:RAIZ + TALLO:AREA + TALLO:DUREZA + HOJAS:RAIZ + 
##     HOJAS:AREA + HOJAS:DUREZA + RAIZ:AREA + RAIZ:DUREZA + AREA:DUREZA + 
##     TALLO:HOJAS:RAIZ + TALLO:HOJAS:AREA + TALLO:HOJAS:DUREZA + 
##     TALLO:RAIZ:AREA + TALLO:RAIZ:DUREZA + TALLO:AREA:DUREZA + 
##     HOJAS:RAIZ:AREA + HOJAS:RAIZ:DUREZA + HOJAS:AREA:DUREZA + 
##     RAIZ:AREA:DUREZA)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5829 -0.0446 -0.0091  0.0439  0.7164 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)   
## (Intercept)         6.70e-02   1.70e-01    0.39   0.6948   
## TALLO               2.05e-01   1.23e-01    1.67   0.0964 . 
## HOJAS              -1.98e-01   1.74e-01   -1.14   0.2564   
## RAIZ               -4.15e-01   3.78e-01   -1.10   0.2735   
## AREA                3.93e-03   6.74e-03    0.58   0.5611   
## DUREZA             -1.01e-03   3.10e-03   -0.33   0.7447   
## TALLO:HOJAS         2.96e-03   1.09e-02    0.27   0.7858   
## TALLO:RAIZ         -3.94e-02   1.66e-02   -2.38   0.0186 * 
## TALLO:AREA          4.35e-04   1.14e-03    0.38   0.7025   
## TALLO:DUREZA       -4.88e-03   2.04e-03   -2.39   0.0181 * 
## HOJAS:RAIZ          8.63e-02   4.49e-02    1.92   0.0563 . 
## HOJAS:AREA         -1.68e-03   2.28e-03   -0.74   0.4625   
## HOJAS:DUREZA        3.49e-03   3.16e-03    1.11   0.2703   
## RAIZ:AREA           5.31e-04   3.01e-03    0.18   0.8603   
## RAIZ:DUREZA         1.36e-02   6.25e-03    2.18   0.0302 * 
## AREA:DUREZA        -6.23e-05   1.15e-04   -0.54   0.5898   
## TALLO:HOJAS:RAIZ    1.33e-04   5.17e-04    0.26   0.7977   
## TALLO:HOJAS:AREA   -1.34e-04   6.46e-05   -2.08   0.0391 * 
## TALLO:HOJAS:DUREZA  1.23e-04   1.62e-04    0.76   0.4505   
## TALLO:RAIZ:AREA     3.36e-05   1.00e-04    0.34   0.7374   
## TALLO:RAIZ:DUREZA   7.17e-04   2.86e-04    2.51   0.0130 * 
## TALLO:AREA:DUREZA   8.76e-06   1.77e-05    0.49   0.6221   
## HOJAS:RAIZ:AREA     3.90e-04   2.82e-04    1.38   0.1683   
## HOJAS:RAIZ:DUREZA  -2.29e-03   7.53e-04   -3.04   0.0027 **
## HOJAS:AREA:DUREZA   3.99e-05   3.36e-05    1.19   0.2365   
## RAIZ:AREA:DUREZA   -7.80e-05   4.06e-05   -1.92   0.0559 . 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.116 on 185 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.85,    Adjusted R-squared: 0.83 
## F-statistic: 42.1 on 25 and 185 DF,  p-value: <2e-16

# Esto causa otro ligero aumento en la varianza explicada. Y todavía
# podemos agregar 5 interacciones de cuarto orden

M <- lm(FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA + TALLO:HOJAS + TALLO:RAIZ + 
    TALLO:AREA + TALLO:DUREZA + HOJAS:RAIZ + HOJAS:AREA + HOJAS:DUREZA + RAIZ:AREA + 
    RAIZ:DUREZA + AREA:DUREZA + TALLO:HOJAS:RAIZ + TALLO:HOJAS:AREA + TALLO:HOJAS:DUREZA + 
    TALLO:RAIZ:AREA + TALLO:RAIZ:DUREZA + TALLO:AREA:DUREZA + HOJAS:RAIZ:AREA + 
    HOJAS:RAIZ:DUREZA + HOJAS:AREA:DUREZA + RAIZ:AREA:DUREZA + TALLO:HOJAS:RAIZ:AREA + 
    TALLO:HOJAS:RAIZ:DUREZA + TALLO:HOJAS:AREA:DUREZA + TALLO:RAIZ:AREA:DUREZA + 
    HOJAS:RAIZ:AREA:DUREZA)
summary(M)
## 
## Call:
## lm(formula = FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA + 
##     TALLO:HOJAS + TALLO:RAIZ + TALLO:AREA + TALLO:DUREZA + HOJAS:RAIZ + 
##     HOJAS:AREA + HOJAS:DUREZA + RAIZ:AREA + RAIZ:DUREZA + AREA:DUREZA + 
##     TALLO:HOJAS:RAIZ + TALLO:HOJAS:AREA + TALLO:HOJAS:DUREZA + 
##     TALLO:RAIZ:AREA + TALLO:RAIZ:DUREZA + TALLO:AREA:DUREZA + 
##     HOJAS:RAIZ:AREA + HOJAS:RAIZ:DUREZA + HOJAS:AREA:DUREZA + 
##     RAIZ:AREA:DUREZA + TALLO:HOJAS:RAIZ:AREA + TALLO:HOJAS:RAIZ:DUREZA + 
##     TALLO:HOJAS:AREA:DUREZA + TALLO:RAIZ:AREA:DUREZA + HOJAS:RAIZ:AREA:DUREZA)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5778 -0.0452 -0.0029  0.0405  0.7203 
## 
## Coefficients:
##                          Estimate Std. Error t value Pr(>|t|)
## (Intercept)              1.42e-01   2.07e-01    0.69     0.49
## TALLO                    1.32e-01   2.56e-01    0.51     0.61
## HOJAS                   -1.99e-03   2.92e-01   -0.01     0.99
## RAIZ                    -4.23e-01   7.52e-01   -0.56     0.57
## AREA                    -1.83e-03   8.50e-03   -0.21     0.83
## DUREZA                  -2.18e-03   3.77e-03   -0.58     0.56
## TALLO:HOJAS             -5.46e-04   2.47e-02   -0.02     0.98
## TALLO:RAIZ              -1.68e-02   4.23e-02   -0.40     0.69
## TALLO:AREA               1.77e-03   2.89e-03    0.61     0.54
## TALLO:DUREZA            -3.03e-03   5.15e-03   -0.59     0.56
## HOJAS:RAIZ               3.61e-03   1.03e-01    0.04     0.97
## HOJAS:AREA              -3.33e-03   4.49e-03   -0.74     0.46
## HOJAS:DUREZA            -1.73e-03   6.35e-03   -0.27     0.79
## RAIZ:AREA                4.29e-03   9.84e-03    0.44     0.66
## RAIZ:DUREZA              1.43e-02   1.40e-02    1.02     0.31
## AREA:DUREZA              4.18e-05   1.50e-04    0.28     0.78
## TALLO:HOJAS:RAIZ         2.26e-03   2.34e-03    0.97     0.34
## TALLO:HOJAS:AREA        -1.51e-04   2.84e-04   -0.53     0.59
## TALLO:HOJAS:DUREZA       2.35e-04   4.56e-04    0.51     0.61
## TALLO:RAIZ:AREA         -5.01e-04   4.90e-04   -1.02     0.31
## TALLO:RAIZ:DUREZA        1.12e-04   9.55e-04    0.12     0.91
## TALLO:AREA:DUREZA       -2.71e-05   6.20e-05   -0.44     0.66
## HOJAS:RAIZ:AREA          1.04e-03   1.33e-03    0.78     0.44
## HOJAS:RAIZ:DUREZA       -3.91e-04   2.14e-03   -0.18     0.86
## HOJAS:AREA:DUREZA        9.84e-05   9.69e-05    1.02     0.31
## RAIZ:AREA:DUREZA        -1.57e-04   1.93e-04   -0.81     0.42
## TALLO:HOJAS:RAIZ:AREA    9.66e-07   1.17e-05    0.08     0.93
## TALLO:HOJAS:RAIZ:DUREZA -4.54e-05   4.38e-05   -1.04     0.30
## TALLO:HOJAS:AREA:DUREZA -1.34e-07   5.13e-06   -0.03     0.98
## TALLO:RAIZ:AREA:DUREZA   1.36e-05   1.27e-05    1.07     0.28
## HOJAS:RAIZ:AREA:DUREZA  -1.81e-05   2.93e-05   -0.62     0.54
## 
## Residual standard error: 0.117 on 180 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.853,   Adjusted R-squared: 0.828 
## F-statistic: 34.8 on 30 and 180 DF,  p-value: <2e-16

# Y vuelve a aumentar la varianza explicada, y aún falta incluir la
# interacción de quinto orden!

M <- lm(FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA + TALLO:HOJAS + TALLO:RAIZ + 
    TALLO:AREA + TALLO:DUREZA + HOJAS:RAIZ + HOJAS:AREA + HOJAS:DUREZA + RAIZ:AREA + 
    RAIZ:DUREZA + AREA:DUREZA + TALLO:HOJAS:RAIZ + TALLO:HOJAS:AREA + TALLO:HOJAS:DUREZA + 
    TALLO:RAIZ:AREA + TALLO:RAIZ:DUREZA + TALLO:AREA:DUREZA + HOJAS:RAIZ:AREA + 
    HOJAS:RAIZ:DUREZA + HOJAS:AREA:DUREZA + RAIZ:AREA:DUREZA + TALLO:HOJAS:RAIZ:AREA + 
    TALLO:HOJAS:RAIZ:DUREZA + TALLO:HOJAS:AREA:DUREZA + TALLO:RAIZ:AREA:DUREZA + 
    HOJAS:RAIZ:AREA:DUREZA + TALLO:HOJAS:RAIZ:AREA:DUREZA)
summary(M)
## 
## Call:
## lm(formula = FLORES ~ TALLO + HOJAS + RAIZ + AREA + DUREZA + 
##     TALLO:HOJAS + TALLO:RAIZ + TALLO:AREA + TALLO:DUREZA + HOJAS:RAIZ + 
##     HOJAS:AREA + HOJAS:DUREZA + RAIZ:AREA + RAIZ:DUREZA + AREA:DUREZA + 
##     TALLO:HOJAS:RAIZ + TALLO:HOJAS:AREA + TALLO:HOJAS:DUREZA + 
##     TALLO:RAIZ:AREA + TALLO:RAIZ:DUREZA + TALLO:AREA:DUREZA + 
##     HOJAS:RAIZ:AREA + HOJAS:RAIZ:DUREZA + HOJAS:AREA:DUREZA + 
##     RAIZ:AREA:DUREZA + TALLO:HOJAS:RAIZ:AREA + TALLO:HOJAS:RAIZ:DUREZA + 
##     TALLO:HOJAS:AREA:DUREZA + TALLO:RAIZ:AREA:DUREZA + HOJAS:RAIZ:AREA:DUREZA + 
##     TALLO:HOJAS:RAIZ:AREA:DUREZA)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5503 -0.0420 -0.0070  0.0386  0.7083 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)  
## (Intercept)                  -1.73e-01   2.39e-01   -0.72    0.471  
## TALLO                         2.45e-01   2.56e-01    0.96    0.341  
## HOJAS                         1.47e-01   2.94e-01    0.50    0.619  
## RAIZ                          9.37e-02   7.69e-01    0.12    0.903  
## AREA                          6.99e-03   9.09e-03    0.77    0.442  
## DUREZA                        4.61e-03   4.60e-03    1.00    0.318  
## TALLO:HOJAS                  -1.78e-02   2.53e-02   -0.70    0.482  
## TALLO:RAIZ                   -6.51e-02   4.60e-02   -1.42    0.159  
## TALLO:AREA                    1.70e-03   2.85e-03    0.59    0.553  
## TALLO:DUREZA                 -4.81e-03   5.12e-03   -0.94    0.349  
## HOJAS:RAIZ                   -7.61e-02   1.06e-01   -0.72    0.473  
## HOJAS:AREA                   -7.62e-03   4.74e-03   -1.61    0.110  
## HOJAS:DUREZA                 -4.67e-03   6.37e-03   -0.73    0.464  
## RAIZ:AREA                    -1.60e-02   1.26e-02   -1.27    0.207  
## RAIZ:DUREZA                   7.95e-04   1.48e-02    0.05    0.957  
## AREA:DUREZA                  -1.49e-04   1.66e-04   -0.90    0.371  
## TALLO:HOJAS:RAIZ              8.49e-03   3.39e-03    2.50    0.013 *
## TALLO:HOJAS:AREA              1.64e-05   2.87e-04    0.06    0.955  
## TALLO:HOJAS:DUREZA            5.21e-04   4.64e-04    1.12    0.263  
## TALLO:RAIZ:AREA               4.60e-04   6.17e-04    0.75    0.457  
## TALLO:RAIZ:DUREZA             1.13e-03   1.02e-03    1.10    0.274  
## TALLO:AREA:DUREZA            -3.16e-05   6.12e-05   -0.52    0.606  
## HOJAS:RAIZ:AREA               3.90e-03   1.74e-03    2.25    0.026 *
## HOJAS:RAIZ:DUREZA             1.55e-03   2.25e-03    0.69    0.492  
## HOJAS:AREA:DUREZA             1.85e-04   1.02e-04    1.82    0.071 .
## RAIZ:AREA:DUREZA              3.16e-04   2.68e-04    1.18    0.240  
## TALLO:HOJAS:RAIZ:AREA        -1.33e-04   5.47e-05   -2.43    0.016 *
## TALLO:HOJAS:RAIZ:DUREZA      -1.74e-04   6.70e-05   -2.59    0.010 *
## TALLO:HOJAS:AREA:DUREZA      -2.74e-06   5.17e-06   -0.53    0.597  
## TALLO:RAIZ:AREA:DUREZA       -7.42e-06   1.51e-05   -0.49    0.623  
## HOJAS:RAIZ:AREA:DUREZA       -8.28e-05   3.87e-05   -2.14    0.034 *
## TALLO:HOJAS:RAIZ:AREA:DUREZA  2.87e-06   1.15e-06    2.51    0.013 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.115 on 179 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.858,   Adjusted R-squared: 0.833 
## F-statistic: 34.9 on 31 and 179 DF,  p-value: <2e-16

# Y esto genera otro ligero incremento en la varianza explicada. La forma
# simplificada de escribir este modelo saturado es usar asteriscos entre
# los nombres de las variables lo cual le indica a R que haga todas las
# posibles combinaciones, desde factores individuales hasta la interacción
# de quinto nivel.

M <- lm(FLORES ~ TALLO * HOJAS * RAIZ * AREA * DUREZA)
summary(M)
## 
## Call:
## lm(formula = FLORES ~ TALLO * HOJAS * RAIZ * AREA * DUREZA)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5503 -0.0420 -0.0070  0.0386  0.7083 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)  
## (Intercept)                  -1.73e-01   2.39e-01   -0.72    0.471  
## TALLO                         2.45e-01   2.56e-01    0.96    0.341  
## HOJAS                         1.47e-01   2.94e-01    0.50    0.619  
## RAIZ                          9.37e-02   7.69e-01    0.12    0.903  
## AREA                          6.99e-03   9.09e-03    0.77    0.442  
## DUREZA                        4.61e-03   4.60e-03    1.00    0.318  
## TALLO:HOJAS                  -1.78e-02   2.53e-02   -0.70    0.482  
## TALLO:RAIZ                   -6.51e-02   4.60e-02   -1.42    0.159  
## HOJAS:RAIZ                   -7.61e-02   1.06e-01   -0.72    0.473  
## TALLO:AREA                    1.70e-03   2.85e-03    0.59    0.553  
## HOJAS:AREA                   -7.62e-03   4.74e-03   -1.61    0.110  
## RAIZ:AREA                    -1.60e-02   1.26e-02   -1.27    0.207  
## TALLO:DUREZA                 -4.81e-03   5.12e-03   -0.94    0.349  
## HOJAS:DUREZA                 -4.67e-03   6.37e-03   -0.73    0.464  
## RAIZ:DUREZA                   7.95e-04   1.48e-02    0.05    0.957  
## AREA:DUREZA                  -1.49e-04   1.66e-04   -0.90    0.371  
## TALLO:HOJAS:RAIZ              8.49e-03   3.39e-03    2.50    0.013 *
## TALLO:HOJAS:AREA              1.64e-05   2.87e-04    0.06    0.955  
## TALLO:RAIZ:AREA               4.60e-04   6.17e-04    0.75    0.457  
## HOJAS:RAIZ:AREA               3.90e-03   1.74e-03    2.25    0.026 *
## TALLO:HOJAS:DUREZA            5.21e-04   4.64e-04    1.12    0.263  
## TALLO:RAIZ:DUREZA             1.13e-03   1.02e-03    1.10    0.274  
## HOJAS:RAIZ:DUREZA             1.55e-03   2.25e-03    0.69    0.492  
## TALLO:AREA:DUREZA            -3.16e-05   6.12e-05   -0.52    0.606  
## HOJAS:AREA:DUREZA             1.85e-04   1.02e-04    1.82    0.071 .
## RAIZ:AREA:DUREZA              3.16e-04   2.68e-04    1.18    0.240  
## TALLO:HOJAS:RAIZ:AREA        -1.33e-04   5.47e-05   -2.43    0.016 *
## TALLO:HOJAS:RAIZ:DUREZA      -1.74e-04   6.70e-05   -2.59    0.010 *
## TALLO:HOJAS:AREA:DUREZA      -2.74e-06   5.17e-06   -0.53    0.597  
## TALLO:RAIZ:AREA:DUREZA       -7.42e-06   1.51e-05   -0.49    0.623  
## HOJAS:RAIZ:AREA:DUREZA       -8.28e-05   3.87e-05   -2.14    0.034 *
## TALLO:HOJAS:RAIZ:AREA:DUREZA  2.87e-06   1.15e-06    2.51    0.013 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.115 on 179 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.858,   Adjusted R-squared: 0.833 
## F-statistic: 34.9 on 31 and 179 DF,  p-value: <2e-16

# El gran problema de la regresión múltiple es definir cual será el modelo
# inicial, llegar al modelo mínimo. Son tantas combinaciones, que
# procedimiento de simplificación por pasos tomaría mucho tiempo

# Exploremos si podemos llegar a una simplificación con otro tipo de
# técnicas. Usaremos modelos de arboles por regresión. Este es un método
# divisivo que a partir de ir ordenando las variables explicativas busca
# dividir la base de datos en dos grupos analizando el comportamiento en
# la variable dependiente. La existencia de está variable dependiente es
# lo que diferencia estos modelos de árboles por regresión de los métodos
# de clasificación multivariados.

# Los modelos de árbol por regresión buscan maximizar la diferencias entre
# las medias de los grupos, y minimizar la devianza dentro de ellos para
# la variable de respuesta. Para cada división se realiza una búsqueda
# exhaustiva y en aquel punto que se maximice las diferencia entre las
# medias y se minimice la devianza, que por ahora podemos pensar
# simplemente como un análogo de la varianza, será el criterio y punto de
# corte para la división

# Para la siguiente sección debemos primero tener instalado los paquetes
# << tree >> y << gmodels >>. Una vez instalados estos paquetes
# activaremos el paquete << tree >> con la función << library() >>.

library(tree)

# Y ahora creamos un nuevo objeto que contenga solamente las variables que
# nos interesan. En este caso estas variables son << FLORES >>, << TALLO
# >>, << HOJAS >>, << RAIZ >>, << AREA >> y << DUREZA >> que son las
# mismas variables que estuvimos usando en la regresión múltiple. Para los
# modelos de árbol, la primer columna será siempre la variable de
# respuesta y el resto serán variables explicativas. El objeto que vamos a
# crear lo denominaremos << DATOS2 >>

DATOS2 <- data.frame(FLORES, TALLO, HOJAS, RAIZ, AREA, DUREZA)

# Y aplicamos la función << tree() >> a << DATOS2 >>

M <- tree(DATOS2)

# Esto genera el modelo de árbol, cuyo resultado numérico podemos ver
# llamando al modelo, en este caso << M >>

M
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##  1) root 211 20.00 0.30  
##    2) TALLO < 11.925 120  0.80 0.10  
##      4) HOJAS < 6.29 108  0.40 0.08 *
##      5) HOJAS > 6.29 12  0.05 0.30 *
##    3) TALLO > 11.925 91  4.00 0.60  
##      6) AREA < 85.985 65  2.00 0.50  
##       12) TALLO < 16.74 31  0.30 0.40 *
##       13) TALLO > 16.74 34  1.00 0.60  
##         26) AREA < 55.145 9  0.60 0.70 *
##         27) AREA > 55.145 25  0.60 0.50 *
##      7) AREA > 85.985 26  0.90 0.80  
##       14) RAIZ < 4.705 7  0.10 0.60 *
##       15) RAIZ > 4.705 19  0.50 0.80 *

# En donde en cada fila de la tabla se muestra el número de nodo, la
# variable que se utilizó para la división y el criterio, el número de
# observaciones en el nodo, la devianza, y el valor promedio de la
# variable de respuesta. Los asteriscos denota a las ramas terminales del
# árbol,

# Con las funciones << plot() >> y << text() >> logramos una
# representación gráfica del modelo de árbol

plot(M)
text(M)

plot of chunk unnamed-chunk-1


# Los modelos de regresión por árbol tiene la desventaja de que ajustan un
# único árbol a un conjunto de datos, y este arreglo puede ser singular
# por lo usualmente se critican los modelos por ser sobre estimados.  Un
# procedimiento para disminuir este sobrestimación es podar el árbol. Esto
# se logra con la función << prune.tree() >> que tiene como argumentos el
# nombre del modelo y el número de nodos que se requiere representar en el
# modelo simplificado, el argumento << best= >>

M2 <- prune.tree(M, best = 4)
plot(M2)
text(M2)

plot of chunk unnamed-chunk-1


# La gran desventaja es que nosotros debemos especificar a priori cuantas
# ramas queremos que queden en el árbol simplificado lo que resta
# objetividad al proceso de simplificación.

# Otra aproximación consiste en no generar un único árbol sino generar
# decenas o centenas de árboles. Esto se logra tomando para cada árbol
# solo una muestra aleatoria de los valores existentes, por ejemplo
# tomando el 80% de los datos totales se genera un árbol, tomando otra
# muestra de 80% de los datos al azar se genera otro árbol y así
# sucesivamente hasta completar unos 100 árboles o quizá 500 árboles. Con
# la información de cada árbol y teniendo la colección de árboles se
# reconstruye cuál sería el árbol más parsimonioso y esto genera
# automáticamente un proceso de poda en los árboles ya que aquellos nodos
# de divisiones muy inferiores son poco repetibles entre los diversos
# árboles se perderán en la reconstrucción. Esta técnica se conoce con el
# nombre bosque de árboles no sorprendentemente por el hecho de que
# generamos múltiples árboles lo cual da la idea de tener un bosque.

# Para usar esta técnica debemos primero cargarnos el archivo de funciones
# del curso que se llama << funciones.R >> colocando la ruta y el nombre
# del archivo dentro de la función << source() >> . La ruta debe
# actualizarse según el sistema que ustedes estén utilizando, y recuerden
# que siempre va entre comillas.

source("~/desktop/curso R 2012/funciones.r")

# Ya Con el archivo de funciones cargado podemos usar la función <<
# bosqeu() >> que tiene tres argumentos el nombre de la base de datos que
# en su primera columna contiene la variable de respuesta, el segundo
# argumento es el número de árboles a generar, y el tercer argumento es la
# proporción de datos a utilizar para generar cada árbol

bosque(DATOS2, 500, 0.8)
## [[1]]
##    TALLO HOJAS RAIZ AREA DUREZA <leaf>
## 1    345     0  155    0      0      0
## 2    294   131   74    0      0      1
## 3    110    17   65  306      2      0
## 4     78     0    0    0      0    421
## 5      0     5    3    0      0    491
## 6    296    45   11   33     10    105
## 7     35    73  180  138     19     55
## 12    20     7   26    2      3    337
## 13     9    26   12  120     45    183
## 14     7    32   34   55     24    293
## 15     5    21   13   24      3    379
## 26    14    17    3    2      0    176
## 27    15     1    8    0     14    174
## 
## [[2]]
##    NODO VAR.DIV PUNTO.CORTE DEVIANZA   N       Y       NA
## 1     1   TALLO      12.699  13.3820 168 0.29891 0.000794
## 2     2   TALLO       2.561   0.6975  97 0.09661 0.001012
## 3     3    AREA     105.017   3.4318  71 0.56945 0.002389
## 4     4  <leaf>          NA   0.2166  82 0.07092 0.001193
## 5     5  <leaf>          NA   0.1333  19 0.26923 0.012778
## 6     6   TALLO      17.122   1.4965  50 0.49018 0.006094
## 7     7    RAIZ       5.148   0.7265  21 0.76170 0.015529
## 12   12  <leaf>          NA   0.2226  26 0.41172 0.010668
## 13   13  <leaf>          NA   0.8417  26 0.58556 0.012331
## 14   14  <leaf>          NA   0.2327  10 0.64167 0.022698
## 15   15  <leaf>          NA   0.1524  10 0.87636 0.025793
## 
## [[3]]
##                                _
## Mean_residual_deviance =  0.3560
## Mean explained deviance   0.9734

plot of chunk unnamed-chunk-1

## [[1]]
##    TALLO HOJAS RAIZ AREA DUREZA <leaf>
## 1    345     0  155    0      0      0
## 2    294   131   74    0      0      1
## 3    110    17   65  306      2      0
## 4     78     0    0    0      0    421
## 5      0     5    3    0      0    491
## 6    296    45   11   33     10    105
## 7     35    73  180  138     19     55
## 12    20     7   26    2      3    337
## 13     9    26   12  120     45    183
## 14     7    32   34   55     24    293
## 15     5    21   13   24      3    379
## 26    14    17    3    2      0    176
## 27    15     1    8    0     14    174
## 
## [[2]]
##    NODO VAR.DIV PUNTO.CORTE DEVIANZA   N       Y       NA
## 1     1   TALLO      12.699  13.3820 168 0.29891 0.000794
## 2     2   TALLO       2.561   0.6975  97 0.09661 0.001012
## 3     3    AREA     105.017   3.4318  71 0.56945 0.002389
## 4     4  <leaf>          NA   0.2166  82 0.07092 0.001193
## 5     5  <leaf>          NA   0.1333  19 0.26923 0.012778
## 6     6   TALLO      17.122   1.4965  50 0.49018 0.006094
## 7     7    RAIZ       5.148   0.7265  21 0.76170 0.015529
## 12   12  <leaf>          NA   0.2226  26 0.41172 0.010668
## 13   13  <leaf>          NA   0.8417  26 0.58556 0.012331
## 14   14  <leaf>          NA   0.2327  10 0.64167 0.022698
## 15   15  <leaf>          NA   0.1524  10 0.87636 0.025793
## 
## [[3]]
##                                _
## Mean_residual_deviance =  0.3560
## Mean explained deviance   0.9734
## 
## [[4]]
## [1] 0.07092 0.26923 0.41172 0.58556 0.64167 0.87636
## 
## [[5]]
## [1] 0.001193 0.012778 0.010668 0.012331 0.022698 0.025793

# Esto nos genera una salida similar a cuando generamos un solo árbol pero
# la parte gráfica contiene dos elementos, el árbol mismo y una
# representación gráfica de la variable de respuesta en barras con errores
# estándares para observar cómo difiere esta variable entre los grupos que
# se han formado.

# El modelo sugiere que son suficiente los valores del << TALLO >>, <<
# AREA >> y << RAIZ >> para describir la variable de respuesta que en este
# caso es el peso de las flores, << FLORES >>

# Con esta información podemos regresar al modelo de regresión múltiple
# que nos ocupaba e iniciar con un modelo mucho más sencillo en que sólo
# incluye tres variables << TALLO >>, << AREA >> y << RAIZ >>

M <- lm(FLORES ~ TALLO * AREA * RAIZ)
summary(M)
## 
## Call:
## lm(formula = FLORES ~ TALLO * AREA * RAIZ)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.6004 -0.0447 -0.0077  0.0410  0.8318 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)  
## (Intercept)      3.32e-02   3.93e-02    0.84    0.399  
## TALLO            2.32e-02   9.58e-03    2.42    0.017 *
## AREA             6.29e-04   1.37e-03    0.46    0.648  
## RAIZ            -1.94e-02   4.21e-02   -0.46    0.646  
## TALLO:AREA      -1.15e-04   1.24e-04   -0.93    0.353  
## TALLO:RAIZ       6.93e-04   1.65e-03    0.42    0.676  
## AREA:RAIZ        7.58e-04   5.44e-04    1.39    0.165  
## TALLO:AREA:RAIZ -6.18e-06   2.08e-05   -0.30    0.766  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.119 on 203 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.827,   Adjusted R-squared: 0.821 
## F-statistic:  139 on 7 and 203 DF,  p-value: <2e-16

# Tenemos dos rutas para terminar de simplificar este modo una es una ruta
# automatizada en R que la lleva acabo la función << step() >> en el que a
# partir del modelo inicial se realizará simplificación tomando el
# criterio de información de Akaike como referencia. El valor del criterio
# de información de Akaike podemos extraerlo directamente de cualquier
# modelo que permita una función de verosimilitud con la función en R
# llamada << AIC() >> o alternativamente con la función << extractAIC()
# >>. Note que estas funciones generarán valores diferentes de AIC para e
# mismo modelo. Por ejemplo para el modelo que tenemos ahora << AIC() >>
# genera un valor de -288.0979 mientras que << extractAIC() >> general un
# valor de -888.89. La función << step() >> utiliza esta segunda función,
# << extractAIC() >> para simplificar el modelo. La magnitud de esos
# valores de AIC es irrelevante, lo que es importantes que al comparar
# modelos usando una única función el valor más pequeño de AIC siempre
# denota un mejor modelo. Las diferencias entre las funciones que << AIC()
# >> y << extractAIC() >> radican en que usan diferentes constantes en el
# cálculo.

# Al Aplicar la función << step() >> podemos ver que concluimos con un
# modelo con tres interacciones principales y una interacción doble <<
# AREA:RAIZ >>. Al asignarla la función << step() >> a un objeto este
# objeto que se crea contiene el modelo simplificado y de este podemos
# directamente extraer el resumen del modelo como habíamos hecho con los
# otros modelos que directamente especificamos.

M2 <- step(M)
## Start:  AIC=-888.9
## FLORES ~ TALLO * AREA * RAIZ
## 
##                   Df Sum of Sq RSS  AIC
## - TALLO:AREA:RAIZ  1   0.00126 2.9 -891
## <none>                         2.9 -889
## 
## Step:  AIC=-890.8
## FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + TALLO:RAIZ + AREA:RAIZ
## 
##              Df Sum of Sq  RSS  AIC
## - TALLO:RAIZ  1    0.0013 2.90 -893
## - TALLO:AREA  1    0.0158 2.91 -892
## <none>                    2.90 -891
## - AREA:RAIZ   1    0.0425 2.94 -890
## 
## Step:  AIC=-892.7
## FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + AREA:RAIZ
## 
##              Df Sum of Sq  RSS  AIC
## - TALLO:AREA  1    0.0145 2.91 -894
## <none>                    2.90 -893
## - AREA:RAIZ   1    0.0451 2.94 -891
## 
## Step:  AIC=-893.6
## FLORES ~ TALLO + AREA + RAIZ + AREA:RAIZ
## 
##             Df Sum of Sq  RSS  AIC
## <none>                   2.91 -894
## - AREA:RAIZ  1    0.0668 2.98 -891
## - TALLO      1    0.2362 3.15 -879

summary(M2)
## 
## Call:
## lm(formula = FLORES ~ TALLO + AREA + RAIZ + AREA:RAIZ)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.6027 -0.0434 -0.0078  0.0401  0.8366 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.040221   0.027192    1.48    0.141    
## TALLO       0.015281   0.003739    4.09  6.3e-05 ***
## AREA        0.000203   0.000806    0.25    0.801    
## RAIZ        0.020195   0.017558    1.15    0.251    
## AREA:RAIZ   0.000312   0.000144    2.17    0.031 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.119 on 206 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.826,   Adjusted R-squared: 0.823 
## F-statistic:  245 on 4 and 206 DF,  p-value: <2e-16

# La otra ruta de simplificación es la comparación entre modelos. Para
# realizar esto a partir del modelo inicial simplificamos quitando la
# interacción más compleja que contenga y una vez ajustado el segundo
# modelo se realiza una prueba de análisis de varianza para averiguar si
# la suma de cuadrados residual incremento significativamente. Por ejemplo
# podemos definir el modelo simplificado como el modelo ya existente y
# restándole la sintaxis << TALO:AREA:RAIZ >> que le indica a a la función
# <<lm() >> que elimine la interacción triple del modelo.

M2 <- lm(FLORES ~ TALLO * AREA * RAIZ - TALLO:AREA:RAIZ)
summary(M2)
## 
## Call:
## lm(formula = FLORES ~ TALLO * AREA * RAIZ - TALLO:AREA:RAIZ)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5996 -0.0433 -0.0082  0.0412  0.8324 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.026733   0.032670    0.82    0.414  
## TALLO        0.023721   0.009378    2.53    0.012 *
## AREA         0.000816   0.001218    0.67    0.504  
## RAIZ        -0.012971   0.036128   -0.36    0.720  
## TALLO:AREA  -0.000125   0.000119   -1.06    0.293  
## TALLO:RAIZ   0.000304   0.001013    0.30    0.764  
## AREA:RAIZ    0.000639   0.000369    1.73    0.085 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.119 on 204 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.827,   Adjusted R-squared: 0.822 
## F-statistic:  163 on 6 and 204 DF,  p-value: <2e-16

# La comparación entre modelos la llevamos acabo con la función << anova()
# >> donde los argumentos son los nombres de los dos modelos

anova(M2, M)
## Analysis of Variance Table
## 
## Model 1: FLORES ~ TALLO * AREA * RAIZ - TALLO:AREA:RAIZ
## Model 2: FLORES ~ TALLO * AREA * RAIZ
##   Res.Df RSS Df Sum of Sq    F Pr(>F)
## 1    204 2.9                         
## 2    203 2.9  1   0.00126 0.09   0.77

# Podemos observar que de esta simplificación de anova entre modelos nos
# indica que no hay un aumento significativo en la varianza residual ya
# que la probabilidad es mayor que el 0.05. En consecuencia podemos dejar
# esta interacción triple fuera del modelo y seguir simplificando ahora
# removiendo las interacciones dobles.

# Antes de proseguir simplificando veamos una sintaxis alternativa para la
# simplificación. La sintaxis preferida o quizá más fácil de utilizar para
# remover las interacciones es usando la función << update() >> que toma
# como argumentos el nombre del modelo, y <<< ~.  >> como segundo
# argumento a partir del cual se restan las interacciones que se van a
# remover. A continuación repetimos la simplificación que ya realizamos
# pero ahora usando esta nueva función para remover la interacción triple.

M2 <- update(M, ~. - TALLO:AREA:RAIZ)
anova(M2, M)
## Analysis of Variance Table
## 
## Model 1: FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + TALLO:RAIZ + AREA:RAIZ
## Model 2: FLORES ~ TALLO * AREA * RAIZ
##   Res.Df RSS Df Sum of Sq    F Pr(>F)
## 1    204 2.9                         
## 2    203 2.9  1   0.00126 0.09   0.77
summary(M2)
## 
## Call:
## lm(formula = FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + TALLO:RAIZ + 
##     AREA:RAIZ)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5996 -0.0433 -0.0082  0.0412  0.8324 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  0.026733   0.032670    0.82    0.414  
## TALLO        0.023721   0.009378    2.53    0.012 *
## AREA         0.000816   0.001218    0.67    0.504  
## RAIZ        -0.012971   0.036128   -0.36    0.720  
## TALLO:AREA  -0.000125   0.000119   -1.06    0.293  
## TALLO:RAIZ   0.000304   0.001013    0.30    0.764  
## AREA:RAIZ    0.000639   0.000369    1.73    0.085 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.119 on 204 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.827,   Adjusted R-squared: 0.822 
## F-statistic:  163 on 6 and 204 DF,  p-value: <2e-16

# Ahora si procedamos a remover las interacciones dobles. Para esto, del
# modelo sin interacción triple vamos a remover cada una de las
# interacciones dobles, una por una siempre del del mismo modelo. Al
# remover cada una de las interacciones dobles comparamos con la prueba de
# << anova() >> para decidir la interacción debe quedarse o puede ser
# removida del modelo.

# Por ejemplo removemos la interacción << TALLO:AREA >> y observamos que
# nos da un valor de probabilidad de 0.2927 con lo cual podemos concluir
# que esta interacción doble debe ser removida del modelo

M3 <- update(M2, ~. - TALLO:AREA)
anova(M3, M2)
## Analysis of Variance Table
## 
## Model 1: FLORES ~ TALLO + AREA + RAIZ + TALLO:RAIZ + AREA:RAIZ
## Model 2: FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + TALLO:RAIZ + AREA:RAIZ
##   Res.Df  RSS Df Sum of Sq    F Pr(>F)
## 1    205 2.91                         
## 2    204 2.90  1    0.0158 1.11   0.29

# Para la interacción entre << TALLO:RAIZ >> también notamos que el valor
# de probabilidad al comparar los modelos es de 0.7642 lo cual también nos
# permite remover esta interacción definitivamente del modelo

M3 <- update(M2, ~. - TALLO:RAIZ)
anova(M3, M2)
## Analysis of Variance Table
## 
## Model 1: FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + AREA:RAIZ
## Model 2: FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + TALLO:RAIZ + AREA:RAIZ
##   Res.Df RSS Df Sum of Sq    F Pr(>F)
## 1    205 2.9                         
## 2    204 2.9  1   0.00128 0.09   0.76

# Para la otra interacción doble << RAIZ:AREA >> notamos que la
# probabilidad al comparar los modelos es de 0.085 lo cual es
# marginalmente no significativo y estrictamente debemos removerla del
# modelo

M3 <- update(M2, ~. - RAIZ:AREA)
anova(M3, M2)
## Analysis of Variance Table
## 
## Model 1: FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + TALLO:RAIZ
## Model 2: FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + TALLO:RAIZ + AREA:RAIZ
##   Res.Df  RSS Df Sum of Sq  F Pr(>F)  
## 1    205 2.94                         
## 2    204 2.90  1    0.0425  3  0.085 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

# Ahora, ya habiendo decidido que las tres interacciones dobles se pueden
# eliminar al realizar pruebas separadas para cada una, ya podemos
# quitarlas en conjunto del modelo, y volvemos a comparar contra el modelo
# que si contiene las interacciones dobles. Al hacer esto observamos que
# eliminar las tres interacciones dobles no generó un aumento
# significativo en la varianza residual.

M3 <- update(M2, ~. - RAIZ:AREA - TALLO:RAIZ - TALLO:AREA)
anova(M3, M2)
## Analysis of Variance Table
## 
## Model 1: FLORES ~ TALLO + AREA + RAIZ
## Model 2: FLORES ~ TALLO + AREA + RAIZ + TALLO:AREA + TALLO:RAIZ + AREA:RAIZ
##   Res.Df  RSS Df Sum of Sq    F Pr(>F)
## 1    207 2.98                         
## 2    204 2.90  3    0.0826 1.94   0.12

# Esto nos deja con un modelo bastante sencillo en el que sólo se
# encuentran los tres factores principales y el intercepto

summary(M3)
## 
## Call:
## lm(formula = FLORES ~ TALLO + AREA + RAIZ)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.5956 -0.0476 -0.0068  0.0435  0.8327 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.010429   0.014135   -0.74  0.46147    
## TALLO        0.011577   0.003358    3.45  0.00068 ***
## AREA         0.001807   0.000325    5.55  8.6e-08 ***
## RAIZ         0.044855   0.013519    3.32  0.00107 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Residual standard error: 0.12 on 207 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared: 0.822,   Adjusted R-squared: 0.82 
## F-statistic:  319 on 3 and 207 DF,  p-value: <2e-16


# Ahora podemos proceder a graficar una de estas relaciones, por jemplo
# peso de las flores << FLORES >> y el peso de los tallos << TALLO >>.

par(mfrow = c(1, 1), mar = c(4, 4, 2, 1))
plot(FLORES ~ TALLO, xlab = "Peso del tall (g)", ylab = "Peso de las flores (g)", 
    col = "tomato3", pch = 19)

# La función << abline() >> en el caso de la regresión múltiple pierde su
# utilidad de pintar la linea de regresión mediante los valores del
# intercepto y la pendiente. Los estimados de pendiente que están en el
# predictor lineal para cada una de las variables corresponderían a la
# pendiente cuando el estimado de las otras dos variables es igual a cero,
# y al pintar la linea de regresión vemos que esta queda completamente
# fuera del área de los puntos en el gráfico.

abline(-0.0104286, 0.0115773)

# Resulta más útil dibujar la linea de regresión de una de estas variables
# cuando los estimados de las otras dos variables son iguales al promedio
# de las variables mismas. Esto únicamente lo podemos ahora hacer con la
# función << predict() >> para la cual como recordarán hay que generar una
# nueva serie de datos para los cuales se harán las predicciones.  La
# secuencia de valores debemos incluirla en un << data.frame >> de la
# misma forma que lo hicimos antes sólo que ahora este << data.frame >>
# incluye otras dos variables cuyos valores estarán fijos en sus
# promedios.

SEQ <- seq(0, 30, length = 30)

ND <- data.frame(TALLO = SEQ, RAIZ = mean(RAIZ), AREA = mean(AREA, na.rm = T))

PRED <- predict(M3, ND)
lines(SEQ, PRED, col = "red")

plot of chunk unnamed-chunk-1


# Recuerden que si deseamos graficar no sonó la línea de regresión sino
# además el intervalo de confianza al usar la función << predict() >>
# debemos solicitar que las observaciones vengan acompañadas del error
# estándar definiendo el argumento << se=TRUE >>. Y con esta único uso de
# la función podemos graficar la línea de regresión y los límites del
# intervalo de confianza.

PRED <- predict(M3, ND, se = TRUE)
T <- qt(0.025, 207)
EE <- PRED$se.fit
LR <- PRED$fit

plot(FLORES ~ TALLO, xlab = "Peso del tall (g)", ylab = "Peso de las flores (g)", 
    col = "tomato3", pch = 19)
lines(SEQ, LR, lty = 1, col = "blue")
lines(SEQ, LR + T * EE, lty = 2)
lines(SEQ, PRED$fit - T * PRED$se.fit, lty = 2)

plot of chunk unnamed-chunk-1