F0 <- 3.26
df1 <- 3
df2 <- 20
(p_value <- 1 - pf(F0, df1, df2))[1] 0.04300116
Trabajo #1 — Modelos de Efectos Fijos (Montgomery, 9ª ed.)
Este documento presenta la solución de los cinco ejercicios asignados en el Trabajo #1 de la asignatura Diseño y Análisis de Experimentos, correspondientes al texto de Montgomery (9ª edición). Los ejercicios abarcan diseños unifactoriales de efectos fijos (3.1, 3.8, 3.28), un diseño con bloques completos al azar (4.8) y un diseño bifactorial de efectos fijos con interacción (5.12).
Para cada ejercicio se presenta: el planteamiento del problema, las hipótesis formales, el desarrollo (a mano o en R según el caso) y, sobre todo, la interpretación de cada resultado en el contexto del problema, ya que este es el componente que más peso tiene en la evaluación.
An experimenter has conducted a single-factor experiment with four levels of the factor, and each factor level has been replicated six times. Find the P-value if the F-statistic is F₀ = 3.26.
Se trata de un diseño unifactorial de efectos fijos (1FEF) con \(a = 4\) niveles y \(n = 6\) réplicas por nivel, por lo que \(N = a \times n = 24\).
Hipótesis:
\[ \begin{cases} H_0: \mu_1 = \mu_2 = \mu_3 = \mu_4 \\ H_1: \text{Al menos un par } \mu_i \neq \mu_j \end{cases} \]
Grados de libertad:
F0 <- 3.26
df1 <- 3
df2 <- 20
(p_value <- 1 - pf(F0, df1, df2))[1] 0.04300116
El valor-P (≈ 0.043) es menor que \(\alpha = 0.05\), por lo que se rechaza \(H_0\): hay evidencia de que al menos un nivel del factor tiene una media distinta a los demás. Sin embargo, a \(\alpha=0.01\) la conclusión cambiaría (no se rechazaría), lo que indica que la evidencia es significativa pero no abrumadora.
plot_f_region <- function(F0, df1, df2, alpha = 0.05, main = "") {
xmax <- max(F0, qf(0.999, df1, df2)) * 1.2
x <- seq(0, xmax, length.out = 2000)
y <- df(x, df1, df2)
fcrit <- qf(1 - alpha, df1, df2)
pval <- 1 - pf(F0, df1, df2)
plot(x, y, type = "l", lwd = 2, las = 1,
xlab = paste0("F ~ F(", df1, ", ", df2, ")"),
ylab = "Densidad", main = main)
x_crit <- x[x >= fcrit]
polygon(c(fcrit, x_crit, max(x_crit)),
c(0, df(x_crit, df1, df2), 0),
col = adjustcolor("red", alpha.f = 0.3), border = NA)
x_p <- x[x >= F0]
polygon(c(F0, x_p, max(x_p)),
c(0, df(x_p, df1, df2), 0),
density = 15, col = "blue", border = NA)
abline(v = fcrit, col = "red", lty = 2, lwd = 2)
abline(v = F0, col = "blue", lwd = 2)
legend("topright",
legend = c(paste0("Región de rechazo (α=", alpha, ")"),
paste0("Valor-P = ", format(pval, digits = 3))),
fill = c(adjustcolor("red", alpha.f = 0.3), "blue"),
density = c(NA, 15), bty = "n")
}
plot_f_region(F0 = 3.26, df1 = 3, df2 = 20, alpha = 0.05,
main = "Ejercicio 3.1: F(3, 20)")\(F_0\) queda apenas a la derecha de \(F_{crit}=3.10\): la región de rechazo (roja) y el área del valor-P (rayada) casi coinciden, lo cual confirma gráficamente el resultado ajustado (P cercano, pero por debajo, de 0.05).
The ANOVA of an experiment is shown below. Fill in the blanks. Is there any way to approach the observed power? Explain.
| Fuente | GL | SC | CM | F | P |
|---|---|---|---|---|---|
| Factor | ? | ? | 246.93 | ? | ? |
| Error | 25 | 186.53 | |||
| Total | 29 | 1174.24 |
A partir de \(N-1=29\) y \(N-a=25\) se deduce que \(N=30\) y \(a=5\) (por lo tanto \(n=6\)). Con esto:
SS_total <- 1174.24
df_total <- 29
SS_error <- 186.53
df_error <- 25
N <- df_total + 1
a <- N - df_error
n <- N / a
df_factor <- a - 1
SS_factor <- SS_total - SS_error
MS_factor <- SS_factor / df_factor
MS_error <- SS_error / df_error
F0 <- MS_factor / MS_error
p_value <- 1 - pf(F0, df_factor, df_error)
data.frame(a, n, df_factor, SS_factor, MS_factor, MS_error, F0, p_value) a n df_factor SS_factor MS_factor MS_error F0 p_value
1 5 6 4 987.71 246.9275 7.4612 33.09488 1.184779e-09
Tabla ANOVA completa:
| Fuente | GL | SC | CM | F₀ | P |
|---|---|---|---|---|---|
| Factor | 4 | 987.71 | 246.93 | 33.09 | ≈ 1.18e-09 |
| Error | 25 | 186.53 | 7.46 | ||
| Total | 29 | 1174.24 |
El valor-P es prácticamente cero: la evidencia contra \(H_0\) es abrumadora. Además, \(\eta^2 = SC_{Factor}/SC_{Total}=0.841\), es decir, el 84.1% de la variabilidad de la respuesta se explica por el factor — un efecto extremadamente grande.
Sí: aunque no tenemos las medias individuales, \(\eta^2\) permite estimar el tamaño de efecto de Cohen y de ahí la potencia con pwr.anova.test().
eta2 <- SS_factor / SS_total
f <- sqrt(eta2 / (1 - eta2))
pwr.anova.test(k = a, n = n, f = f, sig.level = 0.05)
Balanced one-way analysis of variance power calculation
k = 5
n = 6
f = 2.301126
sig.level = 0.05
power = 1
NOTE: n is number in each group
Con un efecto tan grande (\(f \approx 2.3\)), la potencia observada es prácticamente 1 (100%). Esto es consistente con el valor-P casi nulo: el diseño tenía capacidad más que suficiente para detectar un efecto de esta magnitud, por lo que el riesgo de un Error Tipo II es insignificante.
Four different designs for a digital computer circuit are being studied to compare the amount of noise present.
datos_328 <- data.frame(
Design = factor(rep(1:4, each = 5)),
y = c(19, 20, 19, 30, 8,
80, 61, 73, 56, 80,
47, 26, 25, 35, 50,
95, 46, 83, 78, 97)
)
boxplot(y ~ Design, data = datos_328, las = 1, col = 2:5,
xlab = "Circuit Design", ylab = "Noise Observed",
main = "Ruido observado por diseño de circuito")El Diseño 1 muestra visiblemente el menor ruido y el Diseño 4 el mayor, con 2 y 3 en posiciones intermedias. Se observan datos atípicos en los diseños 1 y 4, lo que anticipa una posible violación de normalidad.
Hipótesis: \(H_0: \mu_1=\mu_2=\mu_3=\mu_4\) vs. \(H_1:\) al menos un par distinto.
fit_328 <- lm(y ~ Design, data = datos_328)
anova(fit_328)Analysis of Variance Table
Response: y
Df Sum Sq Mean Sq F value Pr(>F)
Design 3 12042.0 4014.0 21.78 6.797e-06 ***
Residuals 16 2948.8 184.3
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(fit_328)$r.squared[1] 0.8032927
El valor-P (≈ 0.000007) lleva a rechazar \(H_0\): no todos los diseños producen el mismo ruido. Además, \(R^2=0.80\), es decir, el diseño de circuito explica el 80% de la variabilidad del ruido observado.
r_328 <- rstudent(fit_328)
par(mfrow = c(1, 2))
qqnorm(r_328, las = 1); qqline(r_328, col = 2, lty = 2)
plot(fit_328$fitted.values, r_328, las = 1,
xlab = "Valores ajustados", ylab = "Residual estudentizado",
main = "Residuales vs. Ajustados")
abline(h = 0, col = 2, lty = 2)shapiro.test(r_328)
Shapiro-Wilk normality test
data: r_328
W = 0.8682, p-value = 0.01093
bartlett.test(y ~ Design, data = datos_328)
Bartlett test of homogeneity of variances
data: y by Design
Bartlett's K-squared = 3.6893, df = 3, p-value = 0.297
set.seed(123)
durbinWatsonTest(fit_328) lag Autocorrelation D-W Statistic p-value
1 -0.2969208 2.493502 0.652
Alternative hypothesis: rho != 0
Varianza constante (Bartlett, p=0.30) e independencia (Durbin-Watson, p > 0.05) se cumplen. Sin embargo, normalidad se rechaza (Shapiro-Wilk, p=0.011): el QQ-plot muestra un punto muy alejado de la línea de referencia (Diseño 4, réplica 2, residual ≈ −3.75). Esto sugiere revisar ese dato atípico; dado que el ANOVA es razonablemente robusto a violaciones moderadas con diseños balanceados, la conclusión general probablemente se mantiene, pero debe reportarse esta limitación.
TukeyHSD(aov(fit_328), "Design") Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = fit_328)
$Design
diff lwr upr p adj
2-1 50.8 26.235183 75.364817 0.0001159
3-1 17.4 -7.164817 41.964817 0.2194816
4-1 60.6 36.035183 85.164817 0.0000147
3-2 -33.4 -57.964817 -8.835183 0.0064088
4-2 9.8 -14.764817 34.364817 0.6703350
4-3 43.2 18.635183 67.764817 0.0006406
El Diseño 1 tiene el menor ruido promedio (19.2) y es estadísticamente indistinguible del Diseño 3 (p=0.22), pero significativamente mejor que 2 y 4. Se recomienda el Diseño 1.
aov_tab <- anova(fit_328)
SS_factor_328 <- aov_tab$`Sum Sq`[1]
SS_error_328 <- aov_tab$`Sum Sq`[2]
eta2_328 <- SS_factor_328 / (SS_factor_328 + SS_error_328)
f_328 <- sqrt(eta2_328 / (1 - eta2_328))
pwr.anova.test(k = 4, n = 5, f = f_328, sig.level = 0.05)
Balanced one-way analysis of variance power calculation
k = 4
n = 5
f = 2.020815
sig.level = 0.05
power = 0.9999999
NOTE: n is number in each group
\(\eta^2=0.80\) y \(f\approx2.02\) (efecto muy grande) producen una potencia ≈ 1. El experimento tuvo sensibilidad estadística más que suficiente para respaldar la decisión de ingeniería de elegir el Diseño 1.
A chemist wishes to test the effect of four chemical agents on the strength of a particular type of cloth… she decides to use a RCBD, with the bolts of cloth considered as blocks.
datos_48 <- data.frame(
Chemical = factor(rep(1:4, each = 5)),
Bolt = factor(rep(1:5, times = 4)),
y = c(73, 68, 74, 71, 67,
73, 67, 75, 72, 70,
75, 68, 78, 73, 68,
73, 71, 75, 75, 69)
)
par(mfrow = c(1, 2))
boxplot(y ~ Chemical, data = datos_48, col = 2:5, las = 1,
xlab = "Chemical", ylab = "Tensile Strength", main = "Por Chemical")
boxplot(y ~ Bolt, data = datos_48, col = rainbow(5), las = 1,
xlab = "Bolt (Bloque)", ylab = "Tensile Strength", main = "Por Bloque")La dispersión de medianas entre bloques (bolts) es visiblemente mayor que entre químicos, lo que sugiere que gran parte de la variabilidad se debe al bolt y justifica haberlo usado como bloque.
Hipótesis (para el efecto de interés, Chemical):
\[ \begin{cases} H_0: \tau_1=\tau_2=\tau_3=\tau_4=0 \\ H_1: \text{al menos un } \tau_i \neq 0 \end{cases} \]
fit_48 <- lm(y ~ Chemical + Bolt, data = datos_48)
anova(fit_48)Analysis of Variance Table
Response: y
Df Sum Sq Mean Sq F value Pr(>F)
Chemical 3 12.95 4.317 2.3761 0.1211
Bolt 4 157.00 39.250 21.6055 2.059e-05 ***
Residuals 12 21.80 1.817
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El factor Chemical no es significativo (p=0.121): no hay evidencia de que los químicos difieran en su efecto sobre la resistencia. En cambio, Bolt sí es altamente significativo (p<0.0001), confirmando que existía variabilidad real entre rollos de tela y que bloquear fue la decisión correcta: de no haberlo hecho, esa variabilidad habría inflado el error experimental y podría haber ocultado o distorsionado el efecto del químico.
TukeyHSD(aov(fit_48), "Chemical") Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = fit_48)
$Chemical
diff lwr upr p adj
2-1 0.8 -1.7308322 3.330832 0.7852734
3-1 1.8 -0.7308322 4.330832 0.2042593
4-1 2.0 -0.5308322 4.530832 0.1417326
3-2 1.0 -1.5308322 3.530832 0.6540138
4-2 1.2 -1.3308322 3.730832 0.5182726
4-3 0.2 -2.3308322 2.730832 0.9952030
r_48 <- rstudent(fit_48)
par(mfrow = c(1, 2))
qqnorm(r_48, las = 1); qqline(r_48, col = 2, lty = 2)
plot(fit_48$fitted.values, r_48, las = 1,
xlab = "Valores ajustados", ylab = "Residual estudentizado",
main = "Residuales vs. Ajustados")
abline(h = 0, col = 2, lty = 2)shapiro.test(r_48)
Shapiro-Wilk normality test
data: r_48
W = 0.90145, p-value = 0.04391
ncvTest(fit_48)Non-constant Variance Score Test
Variance formula: ~ fitted.values
Chisquare = 0.00451298, Df = 1, p = 0.94644
set.seed(123)
durbinWatsonTest(fit_48) lag Autocorrelation D-W Statistic p-value
1 -0.3102064 2.595413 0.492
Alternative hypothesis: rho != 0
Ningún par de químicos difiere significativamente entre sí (consistente con el ANOVA). En cuanto a supuestos: la varianza es constante (p=0.95) y los residuales son independientes (Durbin-Watson, p > 0.05); la normalidad es marginal (Shapiro-Wilk p=0.044, muy cerca del límite), por lo que el modelo es aceptable pero merece observarse con cautela.
Conclusión general: no hay evidencia de que el tipo de químico afecte la resistencia de la tela; las diferencias observadas en la tabla original se debían principalmente a la variabilidad entre bolts, correctamente aislada gracias al diseño de bloques.
Johnson and Leone describe an experiment to investigate warping of copper plates. The two factors studied were the temperature and the copper content of the plates.
datos_512 <- data.frame(
Temp = factor(rep(c(50, 75, 100, 125), each = 8)),
Copper = factor(rep(rep(c(40, 60, 80, 100), each = 2), times = 4)),
Temp_num = rep(c(50, 75, 100, 125), each = 8),
Copper_num = rep(rep(c(40, 60, 80, 100), each = 2), times = 4),
y = c(17,20, 16,21, 24,22, 28,27,
12,9, 18,13, 17,12, 27,31,
16,12, 18,21, 25,23, 30,23,
21,17, 23,21, 23,22, 29,31)
)
par(mfrow = c(1, 2))
boxplot(y ~ Temp, data = datos_512, col = 2:5, las = 1,
xlab = "Temperature", ylab = "Warping", main = "Por Temperatura")
boxplot(y ~ Copper, data = datos_512, col = 3:6, las = 1,
xlab = "Copper Content (%)", ylab = "Warping", main = "Por % de Cobre")with(datos_512, interaction.plot(Copper, Temp, y, las = 1,
col = c(2,3,4,6), lwd = 2, type = "b", pch = 16,
xlab = "Copper Content (%)", ylab = "Warping promedio",
trace.label = "Temp (°C)",
main = "Interacción Temperatura x Contenido de Cobre"))El pandeo aumenta claramente con el % de cobre, casi sin importar la temperatura. Las líneas del gráfico de interacción son aproximadamente paralelas (no se cruzan de forma dramática), lo que sugiere que la interacción, de existir, es leve.
Hipótesis:
\[ \begin{cases} H_0: \gamma_{ij}=0 \ \ \forall i,j \quad \text{(interacción)}\\ H_0: \alpha_i = 0 \ \ \forall i \quad \text{(Temperatura)}\\ H_0: \beta_j = 0 \ \ \forall j \quad \text{(Cobre)} \end{cases} \]
fit_512 <- lm(y ~ Temp * Copper, data = datos_512)
anova(fit_512)Analysis of Variance Table
Response: y
Df Sum Sq Mean Sq F value Pr(>F)
Temp 3 156.09 52.031 7.6728 0.002127 **
Copper 3 698.34 232.781 34.3272 3.35e-07 ***
Temp:Copper 9 113.78 12.642 1.8643 0.132748
Residuals 16 108.50 6.781
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La interacción no es significativa (p=0.133) → se interpreta con los efectos principales. Tanto Temperatura (p=0.0021) como Contenido de Cobre (p<0.0001) son significativos: ambos factores afectan el pandeo, siendo el efecto del cobre mucho más fuerte (mayor SC).
Dado que la interacción no es significativa, se reajusta el modelo aditivo para interpretar los efectos principales de forma más limpia:
fit_512_add <- lm(y ~ Temp + Copper, data = datos_512)
anova(fit_512_add)Analysis of Variance Table
Response: y
Df Sum Sq Mean Sq F value Pr(>F)
Temp 3 156.09 52.031 5.852 0.003589 **
Copper 3 698.34 232.781 26.181 6.98e-08 ***
Residuals 25 222.28 8.891
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
r_512 <- rstudent(fit_512)
par(mfrow = c(1, 2))
qqnorm(r_512, las = 1); qqline(r_512, col = 2, lty = 2)
plot(fit_512$fitted.values, r_512, las = 1,
xlab = "Valores ajustados", ylab = "Residual estudentizado",
main = "Residuales vs. Ajustados")
abline(h = 0, col = 2, lty = 2)shapiro.test(r_512)
Shapiro-Wilk normality test
data: r_512
W = 0.96235, p-value = 0.318
ncvTest(fit_512)Non-constant Variance Score Test
Variance formula: ~ fitted.values
Chisquare = 0.2565838, Df = 1, p = 0.61248
set.seed(123)
durbinWatsonTest(fit_512) lag Autocorrelation D-W Statistic p-value
1 -0.6059908 3.182028 0.304
Alternative hypothesis: rho != 0
Los tres supuestos (normalidad p=0.32, varianza constante p=0.61, independencia con Durbin-Watson p > 0.05) se cumplen. Por lo tanto, sí es válido generalizar las conclusiones del ANOVA: el modelo es adecuado y las inferencias sobre los efectos de temperatura y cobre son estadísticamente confiables.
TukeyHSD(aov(fit_512_add), "Copper") Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = fit_512_add)
$Copper
diff lwr upr p adj
60-40 3.375 -0.7259616 7.475962 0.1339553
80-40 5.500 1.3990384 9.600962 0.0056569
100-40 12.750 8.6490384 16.850962 0.0000000
80-60 2.125 -1.9759616 6.225962 0.4959857
100-60 9.375 5.2740384 13.475962 0.0000080
100-80 7.250 3.1490384 11.350962 0.0002930
with(datos_512, tapply(y, Copper, mean)) 40 60 80 100
15.500 18.875 21.000 28.250
El pandeo aumenta monótonamente con el cobre (medias: 15.5, 18.9, 21.0, 28.25 para 40/60/80/100%). Todas las comparaciones con 100% son significativas, y 40% difiere de 80% y 100%. Para minimizar el pandeo se recomienda 40% de cobre, el nivel con menor pandeo promedio.
No cambia la elección del nivel óptimo de cobre. Como la interacción no fue significativa, el efecto del cobre sobre el pandeo es consistente sin importar la temperatura ambiente — el 40% de cobre sigue siendo la mejor opción incluso si la temperatura varía de forma incontrolada en el entorno de uso.
pwr.2way del paquete pwr2)## tamaños de efecto a partir de la tabla ANOVA con interaccion
tab_int <- anova(fit_512)
SS_Temp <- tab_int$`Sum Sq`[1]
SS_Copper <- tab_int$`Sum Sq`[2]
SS_AB <- tab_int$`Sum Sq`[3]
SS_Error <- tab_int$`Sum Sq`[4]
SS_Total <- sum(tab_int$`Sum Sq`)
f_Temp <- sqrt((SS_Temp /SS_Total) / (1 - SS_Temp /SS_Total))
f_Copper <- sqrt((SS_Copper/SS_Total) / (1 - SS_Copper/SS_Total))
## si el paquete 'pwr2' esta disponible, usamos directamente pwr.2way()
if (requireNamespace("pwr2", quietly = TRUE)) {
library(pwr2)
print(pwr.2way(a = 4, b = 4, alpha = 0.05,
size.A = 2, size.B = 2,
f.A = f_Temp, f.B = f_Copper))
} else {
## si no esta disponible, replicamos su algoritmo interno
## (formulas identicas a las usadas por pwr2::pwr.2way, ver
## https://github.com/cran/pwr2/blob/master/R/pwr.2way.R)
a <- 4; b <- 4; size.A <- 2; size.B <- 2; alpha <- 0.05
N_A <- size.A * a * b
lambda_A <- N_A * f_Temp^2
qA <- qf(alpha, a - 1, N_A - a - b + 1, lower.tail = FALSE)
power_A <- pf(qA, a - 1, N_A - a - b + 1, lambda_A, lower.tail = FALSE)
N_B <- size.B * a * b
lambda_B <- N_B * f_Copper^2
qB <- qf(alpha, b - 1, N_B - a - b + 1, lower.tail = FALSE)
power_B <- pf(qB, b - 1, N_B - a - b + 1, lambda_B, lower.tail = FALSE)
data.frame(f.A = f_Temp, f.B = f_Copper,
power.A = power_A, power.B = power_B,
power = min(power_A, power_B))
} f.A f.B power.A power.B power
1 0.4117668 1.358543 0.4122454 0.9999965 0.4122454
La potencia para detectar el efecto de Temperatura es moderada (≈ 0.41), mientras que para Cobre es prácticamente 1. Esto es consistente con sus tamaños de efecto (\(f_{Temp}\approx0.41\) vs. \(f_{Copper}\approx1.36\)): el experimento tenía sensibilidad de sobra para detectar el efecto del cobre, pero solo una probabilidad moderada de detectar el efecto (más sutil) de la temperatura si este fuera más pequeño de lo observado.
MS_A <- tab_int$`Mean Sq`[1] # Temp
MS_B <- tab_int$`Mean Sq`[2] # Copper
MS_AB <- tab_int$`Mean Sq`[3] # Interaccion
MS_E <- tab_int$`Mean Sq`[4] # Error
a <- 4; b <- 4; n <- 2
sigma2_e <- MS_E
sigma2_ab <- (MS_AB - MS_E) / n
sigma2_A <- (MS_A - MS_AB) / (b * n)
sigma2_B <- (MS_B - MS_AB) / (a * n)
comp <- data.frame(
Componente = c("Temperatura (A)", "Cobre (B)", "Interaccion (AB)", "Error"),
Varianza = c(sigma2_A, sigma2_B, sigma2_ab, sigma2_e)
)
comp$Porcentaje <- round(100 * comp$Varianza / sum(comp$Varianza), 1)
comp Componente Varianza Porcentaje
1 Temperatura (A) 4.923611 11.7
2 Cobre (B) 27.517361 65.3
3 Interaccion (AB) 2.930556 7.0
4 Error 6.781250 16.1
Si ambos factores fueran aleatorios, el contenido de cobre explicaría ≈ 65% de la variabilidad total, la temperatura ≈ 12%, la interacción ≈ 7% y el error ≈ 16%. Esto refuerza la conclusión de que el cobre es, con diferencia, la fuente de variación más influyente en el pandeo.
fit_lm <- lm(y ~ Temp_num + Copper_num, data = datos_512)
summary(fit_lm)
Call:
lm(formula = y ~ Temp_num + Copper_num, data = datos_512)
Residuals:
Min 1Q Median 3Q Max
-10.5188 -1.7875 0.7813 2.3781 6.3687
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.93125 2.97332 1.322 0.196
Temp_num 0.03250 0.02344 1.387 0.176
Copper_num 0.20188 0.02930 6.891 1.43e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.706 on 29 degrees of freedom
Multiple R-squared: 0.6301, Adjusted R-squared: 0.6046
F-statistic: 24.7 on 2 and 29 DF, p-value: 5.456e-07
predict(fit_lm, newdata = data.frame(Temp_num = 80, Copper_num = 90)) 1
24.7
El modelo de regresión lineal (tratando ambos factores como continuos) predice un pandeo de ≈ 24.7 unidades a 80 °C y 90% de cobre. El coeficiente de Copper_num (≈0.20, p<0.0001) confirma que el cobre es el predictor dominante del pandeo, mientras que Temp_num no resulta significativo en este modelo lineal simple (p=0.18), consistente con su efecto más moderado detectado en el ANOVA.