Está en la página 1de 8

Tarea 1 - Diseños Experimentales

Paulo César Morales Sucasaire

Problema 3
De acuerdo a la pregunta anterior se aplicó un bloque debido a que el error aleatorio se encuentra grande.

Variable respuesta: Resistencia ()


Factor 1: Cerámica (C1, C2, C3)
Factor 3: Resina (R1, R2)
Factor bloqueo: (B1, B2, B3)

Importar datos
In [2]: import pandas as pd

# Data proporcionada
data = {
'Ceramica': ['C1', 'C2', 'C3', 'C1', 'C2', 'C3', 'C1', 'C2', 'C3', 'C1', 'C2', 'C3', 'C1', 'C2', 'C3', 'C1', 'C2', 'C3'],
'Resina': ['R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2'],
'Bloque': ['b1', 'b1', 'b1', 'b1', 'b1', 'b1', 'b2', 'b2', 'b2', 'b2', 'b2', 'b2', 'b3', 'b3', 'b3', 'b3', 'b3', 'b3'],
'Resistencia': [202.77, 211.56, 201.99, 202.49, 202.59, 202.15, 200.03, 209.81, 199.31, 200.38, 199.94, 200.42, 200.53, 209.74, 199.93, 200.68, 199
}

# DataFrame
df = pd.DataFrame(data)

# Mostrar
print(df)
Ceramica Resina Bloque Resistencia
0 C1 R1 b1 202.77
1 C2 R1 b1 211.56
2 C3 R1 b1 201.99
3 C1 R2 b1 202.49
4 C2 R2 b1 202.59
5 C3 R2 b1 202.15
6 C1 R1 b2 200.03
7 C2 R1 b2 209.81
8 C3 R1 b2 199.31
9 C1 R2 b2 200.38
10 C2 R2 b2 199.94
11 C3 R2 b2 200.42
12 C1 R1 b3 200.53
13 C2 R1 b3 209.74
14 C3 R1 b3 199.93
15 C1 R2 b3 200.68
16 C2 R2 b3 199.97
17 C3 R2 b3 199.85
In [14]: import statsmodels.api as sm
from statsmodels.formula.api import ols

# Definir el modelo de ANOVA


modelo_anova = ols('Resistencia ~ Ceramica + Resina + Ceramica * Resina + Bloque', data=df).fit()

# Prueba de ANOVA
tabla_anova = sm.stats.anova_lm(modelo_anova)
In [7]: # Clumna de residuos
df['Residuos'] = modelo_anova.resid

df.head()
Out[7]: Ceramica Resina Bloque Resistencia Residuos

0 C1 R1 b1 202.77 0.187222

1 C2 R1 b1 211.56 -0.282778

2 C3 R1 b1 201.99 0.107222

3 C1 R2 b1 202.49 -0.166111

4 C2 R2 b1 202.59 0.283889

Supuestos

Prueba de Normalidad para los residuos

Ho: Los datos tienen distribución normal.


H1: Los datos no tienen distribución normal.
In [10]: from scipy.stats import shapiro

# Shapiro-Wilk
stat_shapiro, p_value_shapiro = shapiro(df['Residuos'])

# Resultados
print("Estadística de Shapiro-Wilk:", stat_shapiro)
print("Valor p:", p_value_shapiro)

# Interpretar
alpha = 0.05
if p_value_shapiro < alpha:
print("\nLos residuos no siguen una distribución normal (se rechaza la hipótesis nula).")
else:
print("\nLos residuos siguen una distribución normal (no hay evidencia para rechazar la hipótesis nula).")
Estadística de Shapiro-Wilk: 0.9374831914901733
Valor p: 0.2623034715652466

Los residuos siguen una distribución normal (no hay evidencia para rechazar la hipótesis nula).

Prueba de Homogenidad de varianzas

Ho: Los errores tienen una varianza similar.


H1: Los errores tienen una varianza diferente.
In [13]: from scipy.stats import levene

# Obtener los residuos del modelo ANOVA


residuos = modelo_anova.resid

# Agrupar los residuos por Ceramica y Resina


grupos = []
for ceramica in df['Ceramica'].unique():
for resina in df['Resina'].unique():
grupo = residuos[(df['Ceramica'] == ceramica) & (df['Resina'] == resina)]
grupos.append(grupo)

# Realizar la prueba de Levene


estadistica, p_valor = levene(*grupos)

# Mostrar resultados
print("Estadística de Levene:", estadistica)
print("Valor p:", p_valor)

# Interpretación
alpha = 0.05
if p_valor < alpha:
print("\nHay evidencia significativa para rechazar la hipótesis nula.")
print("Las varianzas no son homogéneas entre las combinaciones de Ceramica y Resina.")
else:
print("\nNo hay evidencia significativa para rechazar la hipótesis nula.")
print("Las varianzas son homogéneas entre las combinaciones de Ceramica y Resina.")
Estadística de Levene: 0.1254790383469212
Valor p: 0.9838167155539966

No hay evidencia significativa para rechazar la hipótesis nula.


Las varianzas son homogéneas entre las combinaciones de Ceramica y Resina.
In [16]: import matplotlib.pyplot as plt
import statsmodels.api as sm
from scipy.stats import probplot

fig, axs = plt.subplots(2, 2, figsize=(12, 10))


# Normal Probability Plot
probplot(residuos, plot=axs[0, 0])
axs[0, 0].set_title("Normal Probability Plot")
axs[0, 0].set_xlabel("Percent")
axs[0, 0].set_ylabel("Residuo")

# Histograma de Residuos
axs[0, 1].hist(residuos, bins=15, color='blue', alpha=0.7, rwidth=0.95)
axs[0, 1].set_title("Histograma de Residuos")
axs[0, 1].set_xlabel("Residuo")
axs[0, 1].set_ylabel("Frecuencia")

# Versus Fits
axs[1, 0].scatter(modelo_anova.fittedvalues, residuos, color='green', alpha=0.7)
axs[1, 0].plot(modelo_anova.fittedvalues, [0] * len(residuos), color='black', linestyle='--', linewidth=2)
axs[1, 0].set_title("Versus Fits")
axs[1, 0].set_xlabel("Valores Ajustados")
axs[1, 0].set_ylabel("Residuo")

# Versus Order
axs[1, 1].scatter(range(1, len(residuos) + 1), residuos, color='red', alpha=0.7)
axs[1, 1].plot(range(1, len(residuos) + 1), [0] * len(residuos), color='black', linestyle='--', linewidth=2)
axs[1, 1].set_title("Versus Order")
axs[1, 1].set_xlabel("Orden de Observación")
axs[1, 1].set_ylabel("Residuo")

# Ajustar el diseño del gráfico


plt.tight_layout()
plt.suptitle("Residual Plots for Resistencia", y=1.02)

# Mostrar el gráfico combinado


plt.show()
Modelo factorial con bloque

Teniendo en consideración los dos factores de Cerámica y Resina, y una segmentación por bloqueo se plantea:

Modelo aditivo

Yijk = U + τij + γij + (τγ)ij + βk + εijk

Análisis de la varianza (Anova)


In [15]: print(tabla_anova)

df sum_sq mean_sq F PR(>F)


Ceramica 2.0 90.140411 45.070206 530.203059 7.116347e-11
Resina 1.0 41.102222 41.102222 483.523953 8.477322e-10
Bloque 2.0 19.576344 9.788172 115.147441 1.248180e-07
Ceramica:Resina 2.0 95.563878 47.781939 562.103719 5.327673e-11
Residual 10.0 0.850056 0.085006 NaN NaN
Con respecto al problema 2, en este al usar la agrupación de bloques el error reduce de 18.26 a 0.85

Efectos principales
In [25]: # Calcular las medias de resistencia para cada tipo de resina
medias_resina = df.groupby('Resina')['Resistencia'].mean().reset_index()

# Calcular las medias de resistencia para cada tipo de cerámica


medias_ceramica = df.groupby('Ceramica')['Resistencia'].mean().reset_index()

# Calcular las medias de resistencia para cada tipo de Bloque


medias_bloque = df.groupby('Bloque')['Resistencia'].mean().reset_index()
# Crear el gráfico de efectos principales para la cerámica y resina
plt.figure(figsize=(15, 6))

# Gráfico cerámica
plt.subplot(1, 3, 1)
plt.plot(medias_ceramica['Ceramica'], medias_ceramica['Resistencia'], marker='o', color='blue', linestyle='-', markersize=10)
plt.axhline(df['Resistencia'].mean(), color='red', linestyle='--', label='Media General de Resistencia')
plt.title('Cerámica')
plt.xlabel('Tipo de Cerámica')
plt.ylabel('Media de Resistencia')
plt.legend()

# Gráfico resina
plt.subplot(1, 3, 2)
plt.plot(medias_resina['Resina'], medias_resina['Resistencia'], marker='o', color='green', linestyle='-', markersize=10)
plt.axhline(df['Resistencia'].mean(), color='red', linestyle='--', label='Media General de Resistencia')
plt.title('Resina')
plt.xlabel('Tipo de Resina')
plt.ylabel('Media de Resistencia')
plt.legend()

# Gráfico bloque
plt.subplot(1, 3, 3)
plt.plot(medias_bloque['Bloque'], medias_bloque['Resistencia'], marker='o', color='green', linestyle='-', markersize=10)
plt.axhline(df['Resistencia'].mean(), color='red', linestyle='--', label='Media General de Resistencia')
plt.title('Bloque')
plt.xlabel('Tipo de Bloque')
plt.ylabel('Media de Resistencia')
plt.legend()

# Ajustar el diseño y mostrar la figura


plt.tight_layout()
plt.show()

Podemos observar que la cerámica C2 tiene una media de resistencia más alta, con respecto a la resina, R1 tiene una mejor media. Finalmente el bloque
B1 muestra una mejor media a comparación a los otros bloques.

Factor Resina

Prueba de hipótesis para resina

Ho: Todos los niveles de resina tienen el mismo efecto en la resistencia.


H1: Al menos un nivel de resina de los tratamientos brinda un efecto diferente a la resistencia.

Conclusión

Al menos uno de los tratamientos brinda un efecto diferente a la resistencia.

Esto significa que, según la prueba de Tukey, no hay una diferencia significativa en las medias de resistencia entre los grupos R1 y R2. En otras
palabras, no hay evidencia estadística suficiente para afirmar que la resistencia es diferente entre las resinas R1 y R2.

Prueba de Comparación de Tukey


In [27]: import pandas as pd
import numpy as np
from statsmodels.stats.multicomp import pairwise_tukeyhsd

# Calcular la media de resistencia para cada tipo de resina


media_resina = df.groupby('Resina')['Resistencia'].mean().reset_index()

# Realizar la prueba de Tukey


tukey_results = pairwise_tukeyhsd(df['Resistencia'], df['Resina'])

# Mostrar la media de resistencia por resina


print("Media de Resistencia por Tipo de Resina:")
print(media_resina)

# Mostrar los resultados de la prueba de Tukey


print("\nResultados de la Prueba de Tukey:")
print(tukey_results.summary())
Media de Resistencia por Tipo de Resina:
Resina Resistencia
0 R1 203.963333
1 R2 200.941111

Resultados de la Prueba de Tukey:


Multiple Comparison of Means - Tukey HSD, FWER=0.05
==================================================
group1 group2 meandiff p-adj lower upper reject
--------------------------------------------------
R1 R2 -3.0222 0.093 -6.6091 0.5647 False
--------------------------------------------------
La columna "reject" indica si se rechaza la hipótesis nula. En este caso, "False" significa que no hay suficiente evidencia para rechazar la hipótesis nula
de que las medias son iguales. En términos más simples, no se ha encontrado una diferencia significativa entre las medias de R1 y R2.

La mayor resistencia lo produce el tipo de resina R1

Factor Cerámica

Prueba para cerámica

Ho: Todos los niveles de cerámica tienen el mismo efecto en la resistencia.


H1: Al menos un nivel de cerámica de los tratamientos brinda un efecto diferente a la resistencia.

Conclusión

Al menos uno de los tratamientos brinda un efecto diferente a la resistencia.

Prueba de Comparación de Tukey


In [32]: import pandas as pd
import numpy as np
from statsmodels.stats.multicomp import pairwise_tukeyhsd

# Calcular la media de resistencia para cada tipo de resina


media_resina = df.groupby('Ceramica')['Resistencia'].mean().reset_index()

# Realizar la prueba de Tukey


tukey_results = pairwise_tukeyhsd(df['Resistencia'], df['Ceramica'])

# Mostrar la media de resistencia por resina


print("Media de Resistencia por Tipo de Ceramica:")
print(media_resina)

# Mostrar los resultados de la prueba de Tukey


print("\nResultados de la Prueba de Tukey:")
print(tukey_results.summary())
Media de Resistencia por Tipo de Ceramica:
Ceramica Resistencia
0 C1 201.146667
1 C2 205.601667
2 C3 200.608333

Resultados de la Prueba de Tukey:


Multiple Comparison of Means - Tukey HSD, FWER=0.05
====================================================
group1 group2 meandiff p-adj lower upper reject
----------------------------------------------------
C1 C2 4.455 0.0743 -0.3981 9.3081 False
C1 C3 -0.5383 0.9554 -5.3915 4.3148 False
C2 C3 -4.9933 0.0434 -9.8465 -0.1402 True
----------------------------------------------------
Entre C1 y C2: El valor p ajustado es 0.0743, que es mayor que el nivel de significancia típico de 0.05. Por lo tanto, no hay suficiente evidencia para
rechazar la hipótesis nula. La diferencia promedio entre C1 y C2 es de 4.455, con un intervalo de confianza que va desde -0.3981 hasta 9.3081.

Entre C1 y C3: El valor p ajustado es 0.9554, que es mucho mayor que 0.05. No hay suficiente evidencia para rechazar la hipótesis nula, indicando que
las medias de C1 y C3 no son significativamente diferentes. La diferencia promedio es -0.5383, con un intervalo de confianza desde -5.3915 hasta
4.3148.

Entre C2 y C3: El valor p ajustado es 0.0434, que es menor que 0.05. Hay suficiente evidencia para rechazar la hipótesis nula, indicando que hay una
diferencia significativa entre las medias de C2 y C3. La diferencia promedio es -4.9933, con un intervalo de confianza desde -9.8465 hasta -0.1402.

En resumen, la interpretación general es que solo hay evidencia significativa de diferencias entre las medias de C2 y C3, mientras que las
comparaciones entre C1 y C2, así como entre C1 y C3, no muestran diferencias significativas.

Bloques

Prueba para bloques

Ho: Todos los niveles de bloques tienen el mismo efecto en la resistencia.


H1: Al menos un nivel de bloques de los tratamientos brinda un efecto diferente a la resistencia.

Conclusión

Al menos uno de los tratamientos brinda un efecto diferente a la resistencia.

Prueba de Comparación de Tukey


In [33]: import pandas as pd
import numpy as np
from statsmodels.stats.multicomp import pairwise_tukeyhsd

# Calcular la media de resistencia para cada tipo de resina


media_resina = df.groupby('Bloque')['Resistencia'].mean().reset_index()

# Realizar la prueba de Tukey


tukey_results = pairwise_tukeyhsd(df['Resistencia'], df['Bloque'])

# Mostrar la media de resistencia por resina


print("Media de Resistencia por Tipo de Bloque:")
print(media_resina)

# Mostrar los resultados de la prueba de Tukey


print("\nResultados de la Prueba de Tukey:")
print(tukey_results.summary())
Media de Resistencia por Tipo de Bloque:
Bloque Resistencia
0 b1 203.925000
1 b2 201.648333
2 b3 201.783333

Resultados de la Prueba de Tukey:


Multiple Comparison of Means - Tukey HSD, FWER=0.05
===================================================
group1 group2 meandiff p-adj lower upper reject
---------------------------------------------------
b1 b2 -2.2767 0.5808 -8.119 3.5656 False
b1 b3 -2.1417 0.617 -7.984 3.7006 False
b2 b3 0.135 0.998 -5.7073 5.9773 False
---------------------------------------------------
Entre b1 y b2: El valor p ajustado es 0.5808, que es mayor que el nivel de significancia de 0.05. No hay suficiente evidencia para rechazar la hipótesis
nula de que las medias son iguales. Por lo tanto, no se considera una diferencia significativa entre las medias de b1 y b2.

Entre b1 y b3: El valor p ajustado es 0.617, que es mayor que 0.05. Similar al caso anterior, no hay suficiente evidencia para rechazar la hipótesis nula, lo
que sugiere que no hay una diferencia significativa entre las medias de b1 y b3.

Entre b2 y b3: El valor p ajustado es 0.998, que es mucho mayor que 0.05. No hay evidencia significativa para rechazar la hipótesis nula. No se considera
una diferencia significativa entre las medias de b2 y b3.

En resumen, según la prueba de Tukey, no se encontraron diferencias significativas entre las medias de resistencia para los diferentes bloques ("b1",
"b2" y "b3").

La media de las resistencias para el b1 es superior a los otros 2 bloques.

Interacción entre los factores


In [34]: # Combinar las columnas 'Ceramica' y 'Resina' en una sola columna
df['Ceramica_Resina'] = df['Ceramica'] + '_' + df['Resina']

# Prueba de Tukey con la interacción


tukey_results_interaccion = pairwise_tukeyhsd(df['Resistencia'], df['Ceramica_Resina'])

# Media de resistencia por tipo de resina


media_resina_interaccion = df.groupby('Ceramica_Resina')['Resistencia'].mean().reset_index()
print("Media de Resistencia por Tipo de Ceramica_Resina:")
print(media_resina_interaccion)
Media de Resistencia por Tipo de Ceramica_Resina:
Ceramica_Resina Resistencia
0 C1_R1 201.110000
1 C1_R2 201.183333
2 C2_R1 210.370000
3 C2_R2 200.833333
4 C3_R1 200.410000
5 C3_R2 200.806667
La interacción de la cerámica C2 y la resina R1 nos da ula resistencia máxima.
In [35]: # Resultados de la prueba de Tukey con la interacción
print("\nResultados de la Prueba de Tukey con Interacción:")
print(tukey_results_interaccion.summary())
Resultados de la Prueba de Tukey con Interacción:
Multiple Comparison of Means - Tukey HSD, FWER=0.05
=====================================================
group1 group2 meandiff p-adj lower upper reject
-----------------------------------------------------
C1_R1 C1_R2 0.0733 1.0 -3.5048 3.6515 False
C1_R1 C2_R1 9.26 0.0 5.6818 12.8382 True
C1_R1 C2_R2 -0.2767 0.9998 -3.8548 3.3015 False
C1_R1 C3_R1 -0.7 0.9836 -4.2782 2.8782 False
C1_R1 C3_R2 -0.3033 0.9997 -3.8815 3.2748 False
C1_R2 C2_R1 9.1867 0.0 5.6085 12.7648 True
C1_R2 C2_R2 -0.35 0.9993 -3.9282 3.2282 False
C1_R2 C3_R1 -0.7733 0.9748 -4.3515 2.8048 False
C1_R2 C3_R2 -0.3767 0.9991 -3.9548 3.2015 False
C2_R1 C2_R2 -9.5367 0.0 -13.1148 -5.9585 True
C2_R1 C3_R1 -9.96 0.0 -13.5382 -6.3818 True
C2_R1 C3_R2 -9.5633 0.0 -13.1415 -5.9852 True
C2_R2 C3_R1 -0.4233 0.9984 -4.0015 3.1548 False
C2_R2 C3_R2 -0.0267 1.0 -3.6048 3.5515 False
C3_R1 C3_R2 0.3967 0.9988 -3.1815 3.9748 False
-----------------------------------------------------
La media de las resistencias para la cerámica C2 y resina R1 es superior a todas las otras cominaciones, y se observa que C2_R1 es significativamente
diferente a todas las otras combinaciones.
In [ ]:
Processing math: 100%

También podría gustarte