1 Datos y álgebra matricial

datos_raw <- data.frame(
  orden_alea = c(37,55,19,38,17,10,15,56,53,46,
                  2,14,23,29,34,33,28, 8,63,52,
                 26, 6,61,35,44,20,27,62,59,64,
                 42, 7,54,22,58,40,18,43,39, 4,
                 47,21,31,16,32, 3,36,48,50, 5,
                 49,30, 1,51,57,41,24, 9,12,60,
                 45,11,25,13),
  corrida = 1:64,
  A = c(-1,-1,-1, 1,-1, 1,-1, 1,-1, 1,
         1, 1,-1,-1, 1,-1, 1, 1,-1, 1,
         1, 1,-1,-1, 1, 1,-1, 1,-1, 1,
         1,-1, 1, 1, 1, 1, 1,-1,-1, 1,
        -1,-1,-1, 1, 1,-1, 1, 1, 1,-1,
        -1, 1,-1,-1,-1,-1, 1,-1, 1, 1,
        -1,-1,-1,-1),
  B = c(-1, 1, 1,-1,-1,-1, 1, 1,-1,-1,
        -1,-1, 1,-1,-1,-1, 1, 1, 1, 1,
        -1,-1,-1, 1, 1, 1, 1,-1, 1, 1,
        -1, 1,-1,-1,-1, 1,-1, 1, 1, 1,
         1,-1, 1, 1, 1, 1, 1, 1,-1,-1,
        -1,-1,-1, 1,-1,-1, 1,-1, 1, 1,
        -1, 1,-1,-1),
  C = c( 1, 1,-1, 1,-1,-1, 1, 1, 1, 1,
        -1, 1, 1, 1,-1,-1,-1, 1, 1,-1,
        -1, 1, 1,-1,-1,-1,-1, 1,-1, 1,
        -1, 1, 1, 1,-1, 1,-1,-1, 1,-1,
         1, 1, 1, 1, 1,-1,-1, 1,-1, 1,
        -1, 1,-1,-1,-1,-1, 1,-1,-1,-1,
         1,-1,-1, 1),
  D = c(-1,-1,-1,-1,-1, 1, 1,-1,-1, 1,
        -1, 1,-1, 1,-1,-1, 1,-1, 1,-1,
         1,-1, 1,-1, 1,-1, 1, 1, 1, 1,
         1,-1,-1,-1, 1,-1,-1, 1,-1,-1,
         1,-1, 1, 1, 1,-1,-1, 1,-1,-1,
        -1, 1,-1,-1, 1, 1,-1, 1, 1, 1,
         1, 1, 1, 1),
  E = c(-1, 1, 1,-1, 1,-1,-1, 1, 1,-1,
        -1,-1, 1, 1,-1,-1, 1,-1, 1, 1,
         1,-1, 1,-1,-1, 1, 1, 1, 1, 1,
        -1,-1, 1, 1, 1,-1, 1,-1,-1,-1,
        -1, 1, 1,-1, 1,-1,-1,-1, 1,-1,
         1, 1,-1, 1, 1,-1, 1,-1,-1, 1,
        -1,-1, 1,-1),
  y = c(37.4,36.3,42.8,30.4,44.6,39.1,33.5,31.3,45.8,33.0,
        37.1,29.7,36.3,41.0,38.9,43.3,35.6,32.5,33.8,36.7,
        33.1,31.2,37.8,44.5,34.0,35.0,35.2,29.2,37.9,31.5,
        35.2,35.0,30.1,29.2,36.6,31.1,43.1,38.3,37.2,36.6,
        33.3,40.6,34.1,29.7,32.8,43.6,37.1,30.2,42.5,42.2,
        44.9,30.1,43.2,41.6,41.0,44.9,31.2,44.0,36.4,33.6,
        37.9,42.6,43.2,42.2)
)

yates_col <- function(k, n) rep(rep(c(-1,1), each=2^(k-1)), times=n/(2^k))
n_trat <- 32; n_rep <- 2
ydf <- data.frame(A=yates_col(1,n_trat), B=yates_col(2,n_trat),
                  C=yates_col(3,n_trat), D=yates_col(4,n_trat),
                  E=yates_col(5,n_trat), trat_num=1:n_trat)
ydf$trat_key <- paste(ydf$A,ydf$B,ydf$C,ydf$D,ydf$E,sep="_")
datos_raw$trat_key <- paste(datos_raw$A,datos_raw$B,datos_raw$C,
                             datos_raw$D,datos_raw$E,sep="_")
datos_raw <- datos_raw[order(datos_raw$trat_key,datos_raw$corrida),]
datos_raw$rep <- ave(seq_len(nrow(datos_raw)),datos_raw$trat_key,FUN=seq_along)
r1 <- datos_raw[datos_raw$rep==1,c("trat_key","y")]
r2 <- datos_raw[datos_raw$rep==2,c("trat_key","y")]
ydf <- merge(ydf,r1,by="trat_key"); names(ydf)[names(ydf)=="y"] <- "y1"
ydf <- merge(ydf,r2,by="trat_key"); names(ydf)[names(ydf)=="y"] <- "y2"
ydf <- ydf[order(ydf$trat_num),]

y_vec   <- c(ydf$y1, ydf$y2)
n       <- length(y_vec)
trat_id <- rep(1:n_trat, times=n_rep)
A_r <- ydf$A[trat_id]; B_r <- ydf$B[trat_id]
C_r <- ydf$C[trat_id]; D_r <- ydf$D[trat_id]; E_r <- ydf$E[trat_id]

X <- cbind(
  I=1, A=A_r, B=B_r, C=C_r, D=D_r, E=E_r,
  AB=A_r*B_r, AC=A_r*C_r, AD=A_r*D_r, AE=A_r*E_r,
  BC=B_r*C_r, BD=B_r*D_r, BE=B_r*E_r,
  CD=C_r*D_r, CE=C_r*E_r, DE=D_r*E_r,
  ABC=A_r*B_r*C_r,  ABD=A_r*B_r*D_r, ABE=A_r*B_r*E_r,
  ACD=A_r*C_r*D_r,  ACE=A_r*C_r*E_r, ADE=A_r*D_r*E_r,
  BCD=B_r*C_r*D_r,  BCE=B_r*C_r*E_r, BDE=B_r*D_r*E_r,
  CDE=C_r*D_r*E_r,
  ABCD=A_r*B_r*C_r*D_r, ABCE=A_r*B_r*C_r*E_r,
  ABDE=A_r*B_r*D_r*E_r, ACDE=A_r*C_r*D_r*E_r,
  BCDE=B_r*C_r*D_r*E_r, ABCDE=A_r*B_r*C_r*D_r*E_r)

XtX      <- t(X) %*% X
Xty      <- t(X) %*% y_vec
beta_hat <- solve(XtX) %*% Xty
efectos  <- 2 * beta_hat
y_grand  <- mean(y_vec)
SC_total <- sum((y_vec - y_grand)^2)
gl_error <- n_trat * (n_rep - 1)   
contrastes <- as.vector(Xty)[-1]
nombres_ef <- rownames(beta_hat)[-1]
SC_ef      <- contrastes^2 / n
SC_error   <- SC_total - sum(SC_ef)
CM_error   <- SC_error / gl_error
y_hat      <- X %*% beta_hat
residuos   <- y_vec - y_hat
F_vals  <- SC_ef / CM_error
p_vals  <- pf(F_vals, 1, gl_error, lower.tail=FALSE)
EE_coef <- sqrt(CM_error / n)
T_vals  <- as.vector(beta_hat)[-1] / EE_coef
T_const <- as.vector(beta_hat)[1]  / EE_coef
R2_full     <- 1 - SC_error / SC_total
R2_adj_full <- 1 - (SC_error/gl_error) / (SC_total/(n-1))
H      <- X %*% solve(XtX) %*% t(X)
press <- sum(((y_vec - y_hat) / (1 - diag(H)))^2)
R2_pred <- 1 - press / SC_total

letras <- c("A"="Formato","B"="Tama\u00f1o letra","C"="Agrupaci\u00f3n",
            "D"="Alineaci\u00f3n","E"="Gu\u00edas")
expandir <- function(codigo)
  paste(letras[strsplit(codigo,"")[[1]]], collapse=" * ")
nombres_leg <- sapply(nombres_ef, expandir, USE.NAMES=FALSE)
betas_ef   <- as.vector(beta_hat)[-1]
efectos_ef <- as.vector(efectos)[-1]

sig <- function(p) ifelse(p<0.001,"***",ifelse(p<0.01,"**",
                   ifelse(p<0.05,"*",  ifelse(p<0.10,".",""))))

lf <- lillie.test(residuos)

dw <- sum(diff(residuos)^2) / sum(residuos^2)
h_ii      <- diag(H)
resid_est <- as.vector(residuos) / (sqrt(CM_error) * sqrt(1-h_ii))

cat(sprintf("Modelo completo: R2=%.2f%%  R2adj=%.2f%%  S=%.4f  gl_error=%d\n",
            R2_full*100, R2_adj_full*100, sqrt(CM_error), gl_error))
## Modelo completo: R2=94.13%  R2adj=88.44%  S=1.6704  gl_error=32
cat(sprintf("Efectos con p < 0.10: %d de 31\n",
            sum(p_vals < ALPHA)))
## Efectos con p < 0.10: 14 de 31

2 Coeficientes codificados

pv_todos <- c(
  pf(T_const^2, 1, gl_error, lower.tail=FALSE),
  sapply(T_vals, function(t) pf(t^2, 1, gl_error, lower.tail=FALSE)))

coef_df <- data.frame(
  Termino = c("Constante", nombres_leg),
  Efecto  = c("&mdash;", sprintf("%.3f", efectos_ef)),
  Coef    = sprintf("%.3f", c(as.vector(beta_hat)[1], betas_ef)),
  EEcoef  = sprintf("%.3f", rep(EE_coef, 32)),
  ValorT  = sprintf("%.2f", c(T_const, T_vals)),
  Valorp  = sprintf("%.4f", pv_todos),
  FIV     = c("&mdash;", rep("1.00", 31)),
  Sig     = sig(pv_todos),
  stringsAsFactors=FALSE)

kable(coef_df, escape=FALSE,
      caption=paste0("Coeficientes codificados del modelo completo (\u03b1 = ",
                     ALPHA, ")"),
      col.names=c("T\u00e9rmino","Efecto","Coef.","EE del coef.",
                  "Valor T","Valor p","FIV",""),
      align=c("l","r","r","r","r","r","c","c")) |>
  kable_styling(bootstrap_options="condensed",
                full_width=TRUE, font_size=13) |>
  row_spec(0, background="#b5728f", color="white", bold=TRUE) |>
  footnote(general=paste0("*** p &lt; 0.001 &nbsp;** p &lt; 0.01 &nbsp;",
                          "* p &lt; 0.05 &nbsp;. p &lt; 0.10"),
           escape=FALSE)
Coeficientes codificados del modelo completo (α = 0.1)
Término Efecto Coef. EE del coef. Valor T Valor p FIV
Constante — 36.934 0.209 176.89 0.0000 — ***
Formato -6.131 -3.066 0.209 -14.68 0.0000 1.00 ***
Tamaño letra -2.538 -1.269 0.209 -6.08 0.0000 1.00 ***
AgrupaciĂłn -5.269 -2.634 0.209 -12.62 0.0000 1.00 ***
AlineaciĂłn -1.962 -0.981 0.209 -4.70 0.0000 1.00 ***
GuĂ­as -0.212 -0.106 0.209 -0.51 0.6143 1.00
Formato * Tamaño letra 1.713 0.856 0.209 4.10 0.0003 1.00 ***
Formato * AgrupaciĂłn -0.819 -0.409 0.209 -1.96 0.0587 1.00 .
Formato * AlineaciĂłn 0.450 0.225 0.209 1.08 0.2893 1.00
Formato * GuĂ­as 0.175 0.088 0.209 0.42 0.6780 1.00
Tamaño letra * Agrupación 0.162 0.081 0.209 0.39 0.6998 1.00
Tamaño letra * Alineación -0.306 -0.153 0.209 -0.73 0.4687 1.00
Tamaño letra * Guías -0.406 -0.203 0.209 -0.97 0.3379 1.00
AgrupaciĂłn * AlineaciĂłn 0.837 0.419 0.209 2.01 0.0534 1.00 .
AgrupaciĂłn * GuĂ­as 0.500 0.250 0.209 1.20 0.2400 1.00
AlineaciĂłn * GuĂ­as -0.881 -0.441 0.209 -2.11 0.0427 1.00
Formato * Tamaño letra * Agrupación 1.588 0.794 0.209 3.80 0.0006 1.00 ***
Formato * Tamaño letra * Alineación 0.856 0.428 0.209 2.05 0.0486 1.00
Formato * Tamaño letra * Guías 0.456 0.228 0.209 1.09 0.2828 1.00
Formato * AgrupaciĂłn * AlineaciĂłn 0.575 0.288 0.209 1.38 0.1781 1.00
Formato * AgrupaciĂłn * GuĂ­as -0.762 -0.381 0.209 -1.83 0.0772 1.00 .
Formato * AlineaciĂłn * GuĂ­as 0.319 0.159 0.209 0.76 0.4509 1.00
Tamaño letra * Agrupación * Alineación -0.069 -0.034 0.209 -0.16 0.8703 1.00
Tamaño letra * Agrupación * Guías 0.719 0.359 0.209 1.72 0.0949 1.00 .
Tamaño letra * Alineación * Guías 1.063 0.531 0.209 2.54 0.0160 1.00
AgrupaciĂłn * AlineaciĂłn * GuĂ­as 0.694 0.347 0.209 1.66 0.1064 1.00
Formato * Tamaño letra * Agrupación * Alineación -0.856 -0.428 0.209 -2.05 0.0486 1.00
Formato * Tamaño letra * Agrupación * Guías 0.356 0.178 0.209 0.85 0.4000 1.00
Formato * Tamaño letra * Alineación * Guías 0.287 0.144 0.209 0.69 0.4961 1.00
Formato * AgrupaciĂłn * AlineaciĂłn * GuĂ­as 0.419 0.209 0.209 1.00 0.3235 1.00
Tamaño letra * Agrupación * Alineación * Guías -0.100 -0.050 0.209 -0.24 0.8123 1.00
Formato * Tamaño letra * Agrupación * Alineación * Guías -0.425 -0.213 0.209 -1.02 0.3165 1.00
Note:
*** p < 0.001  ** p < 0.01  * p < 0.05  . p < 0.10

3 Resumen del modelo

res_df <- data.frame(
  S              = round(sqrt(CM_error), 5),
  Rcuadrado      = paste0(round(R2_full*100,     2), "%"),
  Rcuadrado_aj   = paste0(round(R2_adj_full*100, 2), "%"),
  Rcuadrado_pred = paste0(round(R2_pred*100,     2), "%"),
  stringsAsFactors=FALSE)

kable(res_df, caption="Resumen del modelo factorial completo",
      col.names=c("S","R-cuadrado","R-cuadrado (ajustado)",
                  "R-cuadrado (pred)"),
      align="cccc") |>
  kable_styling(bootstrap_options="condensed", full_width=FALSE) |>
  row_spec(0, background="#b5728f", color="white", bold=TRUE)
Resumen del modelo factorial completo
S R-cuadrado R-cuadrado (ajustado) R-cuadrado (pred)
1.67042 94.13% 88.44% 76.51%

4 Análisis de varianza (ANOVA)

SC_modelo <- sum(SC_ef)
grupos <- list(
  list(n="Lineal",                             idx=1:5,   gl=5),
  list(n="Interacciones de 2 t\u00e9rminos", idx=6:15,  gl=10),
  list(n="Interacciones de 3 t\u00e9rminos", idx=16:25, gl=10),
  list(n="Interacciones de 4 t\u00e9rminos", idx=26:30, gl=5),
  list(n="Interacci\u00f3n de 5 t\u00e9rminos", idx=31, gl=1))

filas <- list(); tipo <- c()
filas[[1]] <- c("Modelo",31,round(SC_modelo,2),
                round(SC_modelo/31,3),
                round((SC_modelo/31)/CM_error,2),"","")
tipo <- c(tipo,"modelo")

for (g in grupos) {
  SC_g <- sum(SC_ef[g$idx]); CM_g <- SC_g/g$gl
  filas[[length(filas)+1]] <- c(
    paste0("\u00a0\u00a0",g$n), g$gl,
    round(SC_g,2), round(CM_g,3), round(CM_g/CM_error,2),"","")
  tipo <- c(tipo,"grupo")
  for (i in g$idx) {
    filas[[length(filas)+1]] <- c(
      paste0("\u00a0\u00a0\u00a0\u00a0",nombres_leg[i]),1,
      round(SC_ef[i],2), round(SC_ef[i],3),
      round(F_vals[i],2), round(p_vals[i],4), sig(p_vals[i]))
    tipo <- c(tipo,"efecto")
  }
}
filas[[length(filas)+1]] <- c("Error",gl_error,
  round(SC_error,2),round(CM_error,3),"","","")
tipo <- c(tipo,"error")
filas[[length(filas)+1]] <- c("Total",n-1,
  round(SC_total,2),"","","","")
tipo <- c(tipo,"total")

anova_df <- as.data.frame(do.call(rbind,filas),stringsAsFactors=FALSE)
names(anova_df) <- c("Fuente","GL","SC Ajust.","MC Ajust.",
                     "Valor F","Valor p","Sig")

idx_negrita <- which(tipo %in% c("modelo","grupo","error","total"))

kable(anova_df, escape=FALSE,
      caption=paste0("An\u00e1lisis de varianza \u2014 Modelo factorial completo 2^5",
                     " (\u03b1 = ", ALPHA, ")"),
      align=c("l","c","r","r","r","r","c")) |>
  kable_styling(bootstrap_options="condensed",
                full_width=TRUE, font_size=13) |>
  row_spec(0, background="#b5728f", color="white", bold=TRUE) |>
  row_spec(idx_negrita, bold=TRUE) |>
  footnote(general=paste0("*** p &lt; 0.001 &nbsp;** p &lt; 0.01 &nbsp;",
                          "* p &lt; 0.05 &nbsp;. p &lt; 0.10"),
           escape=FALSE)
Análisis de varianza — Modelo factorial completo 2^5 (α = 0.1)
Fuente GL SC Ajust. MC Ajust. Valor F Valor p Sig
Modelo 31 1431.23 46.169 16.55
  Lineal 5 1211 242.2 86.8
    Formato 1 601.48 601.476 215.56 0 ***
    Tamaño letra 1 103.02 103.023 36.92 0 ***
    Agrupación 1 444.16 444.156 159.18 0 ***
    Alineación 1 61.62 61.622 22.08 0 ***
    Guías 1 0.72 0.722 0.26 0.6143
  Interacciones de 2 términos 10 93.59 9.359 3.35
    Formato * Tamaño letra 1 46.92 46.923 16.82 3e-04 ***
    Formato * Agrupación 1 10.73 10.726 3.84 0.0587 .
    Formato * Alineación 1 3.24 3.24 1.16 0.2893
    Formato * Guías 1 0.49 0.49 0.18 0.678
    Tamaño letra * Agrupación 1 0.42 0.422 0.15 0.6998
    Tamaño letra * Alineación 1 1.5 1.501 0.54 0.4687
    Tamaño letra * Guías 1 2.64 2.641 0.95 0.3379
    Agrupación * Alineación 1 11.22 11.222 4.02 0.0534 .
    Agrupación * Guías 1 4 4 1.43 0.24
    Alineación * Guías 1 12.43 12.426 4.45 0.0427
  Interacciones de 3 términos 10 105.71 10.571 3.79
    Formato * Tamaño letra * Agrupación 1 40.32 40.323 14.45 6e-04 ***
    Formato * Tamaño letra * Alineación 1 11.73 11.731 4.2 0.0486
    Formato * Tamaño letra * Guías 1 3.33 3.331 1.19 0.2828
    Formato * Agrupación * Alineación 1 5.29 5.29 1.9 0.1781
    Formato * Agrupación * Guías 1 9.3 9.302 3.33 0.0772 .
    Formato * Alineación * Guías 1 1.63 1.626 0.58 0.4509
    Tamaño letra * Agrupación * Alineación 1 0.08 0.076 0.03 0.8703
    Tamaño letra * Agrupación * Guías 1 8.27 8.266 2.96 0.0949 .
    Tamaño letra * Alineación * Guías 1 18.06 18.063 6.47 0.016
    Agrupación * Alineación * Guías 1 7.7 7.701 2.76 0.1064
  Interacciones de 4 términos 5 18.05 3.61 1.29
    Formato * Tamaño letra * Agrupación * Alineación 1 11.73 11.731 4.2 0.0486
    Formato * Tamaño letra * Agrupación * Guías 1 2.03 2.031 0.73 0.4
    Formato * Tamaño letra * Alineación * Guías 1 1.32 1.322 0.47 0.4961
    Formato * Agrupación * Alineación * Guías 1 2.81 2.806 1.01 0.3235
    Tamaño letra * Agrupación * Alineación * Guías 1 0.16 0.16 0.06 0.8123
  Interacción de 5 términos 1 2.89 2.89 1.04
    Formato * Tamaño letra * Agrupación * Alineación * Guías 1 2.89 2.89 1.04 0.3165
Error 32 89.29 2.79
Total 63 1520.52
Note:
*** p < 0.001  ** p < 0.01  * p < 0.05  . p < 0.10

5 EcuaciĂłn del modelo de regresiĂłn

6 Ajustes y diagnĂłsticos para observaciones poco comunes

poco_idx <- which(abs(resid_est) > 2)
pc_df <- data.frame(
  Obs      = poco_idx,
  Tiempos  = round(y_vec[poco_idx], 2),
  Ajuste   = round(as.vector(y_hat)[poco_idx], 2),
  Resid    = round(as.vector(residuos)[poco_idx], 2),
  Residest = round(resid_est[poco_idx], 2),
  Tipo     = "R",
  stringsAsFactors=FALSE)

kable(pc_df,
      caption="Ajustes y diagn\u00f3sticos para observaciones poco comunes",
      col.names=c("Obs","Tiempo (s)","Ajuste","Resid.",
                  "Resid. est.","Tipo"),
      align=c("c","r","r","r","r","c")) |>
  kable_styling(bootstrap_options="condensed", full_width=FALSE) |>
  row_spec(0, background="#b5728f", color="white", bold=TRUE) |>
  footnote(general="R = Residuo grande (|Resid. est.| > 2)",
           escape=FALSE)
Ajustes y diagnĂłsticos para observaciones poco comunes
Obs Tiempo (s) Ajuste Resid. Resid. est. Tipo
5 37.4 39.8 -2.4 -2.03 R
21 45.8 43.2 2.6 2.20 R
37 42.2 39.8 2.4 2.03 R
53 40.6 43.2 -2.6 -2.20 R
Note:
R = Residuo grande (|Resid. est.| > 2)

7 VerificaciĂłn de supuestos

sup_df <- data.frame(
  Supuesto    = c("Normalidad de residuos",
                  "Independencia de residuos"),
  Prueba      = c("Lilliefors (Kolmogorov-Smirnov)",
                  "Durbin-Watson"),
  Estadistico = c(round(lf$statistic, 4),
                  round(dw,           4)),
  Valorp      = c(round(lf$p.value, 4), "---"),
  Conclusion  = c(
    ifelse(lf$p.value > ALPHA,
           paste0("No se rechaza H\u2080 \u2014 residuos normales (\u03b1=",
                  ALPHA, ")"),
           paste0("Se rechaza H\u2080 \u2014 residuos no normales (\u03b1=",
                  ALPHA, ")")),
    ifelse(dw > 1.5 & dw < 2.5,
           "No hay evidencia de autocorrelaci\u00f3n",
           "Posible autocorrelaci\u00f3n, revisar")),
  stringsAsFactors=FALSE)

kable(sup_df,
      caption=paste0("Verificaci\u00f3n de supuestos del modelo (\u03b1 = ",
                     ALPHA, ")"),
      col.names=c("Supuesto","Prueba","Estad\u00edstico",
                  "Valor p","Conclusi\u00f3n"),
      align=c("l","l","c","c","l")) |>
  kable_styling(bootstrap_options="condensed", full_width=TRUE) |>
  row_spec(0, background="#b5728f", color="white", bold=TRUE) |>
  column_spec(5, width="28%")
Verificación de supuestos del modelo (α = 0.1)
Supuesto Prueba EstadĂ­stico Valor p ConclusiĂłn
D Normalidad de residuos Lilliefors (Kolmogorov-Smirnov) 0.0715 0.5761 No se rechaza H₀ — residuos normales (α=0.1)
Independencia de residuos Durbin-Watson 1.6626 — No hay evidencia de autocorrelación

8 Gráficos de diagnóstico

8.1 Gráficas de residuos

par(mfrow=c(2,2), mar=c(4.5,4.5,3,1.5), oma=c(0,0,2.5,0))
qqnorm(residuos, main="Gr\u00e1fica de probabilidad normal",
       xlab="Residuo", ylab="Porcentaje", pch=20, col=COL_PPAL)
qqline(residuos, col=COL_LINEA, lwd=1.5)
plot(y_hat, residuos, pch=20, col=COL_PPAL,
     main="Residuos vs. ajustes",
     xlab="Valor ajustado", ylab="Residuo")
abline(h=0, lty=2, col=COL_LINEA, lwd=1.2)
hist(residuos, col=COL_PPAL, border="white",
     main="Histograma", xlab="Residuo", ylab="Frecuencia", breaks=10)
plot(seq_along(residuos), residuos, type="b", pch=20, col=COL_PPAL,
     main="Residuos vs. orden",
     xlab="Orden de observaci\u00f3n", ylab="Residuo")
abline(h=0, lty=2, col=COL_LINEA, lwd=1.2)
mtext("Gr\u00e1ficas de residuos para Tiempo (s)",
      outer=TRUE, cex=1.1, font=2, col=COL_LINEA)
Graficas de residuos para Tiempo

Graficas de residuos para Tiempo

par(mfrow=c(1,1), mar=c(5,4,4,2), oma=c(0,0,0,0))

8.2 Diagrama de Pareto de efectos estandarizados

ef_std <- abs(T_vals)
ord    <- order(ef_std, decreasing=FALSE)

umbral <- qt(1 - ALPHA/2, gl_error)
colores <- ifelse(ef_std[ord] > umbral, COL_PPAL, COL_CLARO)

par(mar=c(4,21,4,3))
barplot(ef_std[ord],
        names.arg=nombres_leg[ord],
        horiz=TRUE, col=colores, border=NA,
        las=1, cex.names=0.62,
        main=paste0("Diagrama de Pareto de efectos estandarizados\n",
                    "(la respuesta es Tiempo (s); \u03b1 = ",ALPHA,")"),
        xlab="Efecto estandarizado",
        xlim=c(0, max(ef_std)*1.12))
abline(v=umbral, lty=2, col=COL_LINEA, lwd=1.5)
mtext(round(umbral,2), side=3, at=umbral,
      col=COL_LINEA, cex=0.85, line=0.3)
Diagrama de Pareto de efectos estandarizados

Diagrama de Pareto de efectos estandarizados

par(mar=c(5,4,4,2))