R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

INTRODUCCIÓN

#El presente análisis estadístico tiene como finalidad evaluar y comparar la microdureza superficial de cinco materiales de resina compuesta utilizados en odontología.

#La variable dependiente corresponde a la microdureza superficial expresada en unidades Vickers (HV), mientras #que la variable independiente corresponde al tipo de material restaurador.

#Se analizaron cinco grupos:

#1. Filtek Z350 XT A2 (grupo control). #2. Simplishade. #3. Filtek Easy Match. #4. Vittra APS Unique. #5. Transcend.

#La unidad experimental considerada para el análisis es el disco de resina. Cuando existen varias indentaciones en un mismo disco, estas se resumen mediante su promedio para evitar la pseudorreplicación.

OBJETIVO DEL ANÁLISIS

#Comparar los valores de microdureza superficial entre los cinco grupos de resinas mediante procedimientos estadísticos descriptivos e inferenciales.

HIPÓTESIS ESTADÍSTICAS

#Hipótesis nula (H0):

#Las medias de microdureza superficial son iguales entre los cinco grupos de resinas.

#Hipótesis alternativa (H1):

#Al menos uno de los grupos presenta una media de microdureza superficial diferente.

#Se establece un nivel de significancia de 0.05.

##Instalación y carga de paquetes

# Instalar paquetes solamente si no están disponibles

paquetes <- c(
  "readxl",
  "tidyverse",
  "ggplot2",
  "dplyr",
  "tidyr",
  "car",
  "rstatix",
  "effectsize",
  "knitr",
  "broom",
  "FSA"
)

instalar <- paquetes[
  !paquetes %in% installed.packages()[, "Package"]
]

if(length(instalar) > 0){
  install.packages(
    instalar,
    repos = "https://cloud.r-project.org"
  )
}

# Cargar librerías

library(readxl)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(dplyr)
library(tidyr)
library(car)
## Cargando paquete requerido: carData
## 
## Adjuntando el paquete: 'car'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some
library(rstatix)
## 
## Adjuntando el paquete: 'rstatix'
## 
## The following object is masked from 'package:stats':
## 
##     filter
library(effectsize)
## 
## Adjuntando el paquete: 'effectsize'
## 
## The following objects are masked from 'package:rstatix':
## 
##     cohens_d, eta_squared, omega_squared
library(knitr)
library(broom)
library(FSA)
## Warning: package 'FSA' was built under R version 4.4.3
## Registered S3 methods overwritten by 'FSA':
##   method       from
##   confint.boot car 
##   hist.boot    car 
## ## FSA v0.10.0. See citation('FSA') if used in publication.
## ## Run fishR() for related website and fishR('IFAR') for related book.
## 
## Adjuntando el paquete: 'FSA'
## 
## The following object is masked from 'package:car':
## 
##     bootCase
# Configuración general

options(
  scipen = 999,
  digits = 4
)

set.seed(123)

##Importación del conjunto de datos

library(readxl)
datosv <- read_excel("D:/usuario nuevo/Downloads/datosv.xlsx")
## New names:
## • `` -> `...1`
## • `` -> `...6`
View(datosv)
# Examinar estructura

dim(datosv)
## [1] 25 10
head(datosv, 30)
## # A tibble: 25 × 10
##    ...1            `78.6` `80.7` `79.3` `79.5` ...6  `60.0` `57.2` `59.0` `56.4`
##    <chr>           <chr>  <chr>  <chr>  <chr>  <chr> <chr>  <chr>  <chr>  <chr> 
##  1 GRUPO 1  Z350   78.5   81.5   78.8   81.8   GRUP… 52.8   54.0   52.9   57.0  
##  2 <NA>            83.1   82.6   78.7   78.0   <NA>  58.0   55.8   54.5   55.5  
##  3 <NA>            84.8   77.5   87.5   81.4   <NA>  52.9   51.2   54.0   53.2  
##  4 <NA>            78.6   83.0   81.5   83.6   <NA>  52.6   56.8   57.2   54.6  
##  5 <NA>            80.9   83.0   86.1   87.2   <NA>  60.0   56.5   61.4   53.1  
##  6 <NA>            79.7   80.8   84.0   81.0   <NA>  59.2   56.7   58.0   56.7  
##  7 <NA>            82.7   83.1   79.6   82.8   <NA>  53.6   58.8   58.6   51.8  
##  8 <NA>            <NA>   <NA>   <NA>   <NA>   <NA>  <NA>   <NA>   <NA>   <NA>  
##  9 GRUPO 2  Simpl… 66.9   66.3   62.5   59.1   GRUP… 71.7   69.9   68.4   67.5  
## 10 <NA>            64.5   67.4   63.5   69.1   <NA>  79.2   75.9   78.5   78.1  
## # ℹ 15 more rows
# Importar el archivo conservando las filas y columnas originales

datos_originales <- read_excel(
  file.choose(),
  range = "A1:K27",
  col_names = FALSE
)
## New names:
## • `` -> `...1`
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
## • `` -> `...11`
# Verificar dimensiones

dim(datos_originales)
## [1] 27 11
# Visualizar estructura completa

print(datos_originales, n = Inf)
## # A tibble: 27 × 11
##    ...1  ...2              ...3  ...4  ...5  ...6  ...7  ...8  ...9  ...10 ...11
##    <lgl> <chr>             <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
##  1 NA    <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  2 NA    <NA>              78.6  80.7  79.3  79.5  <NA>  60.0  57.2  59.0  56.4 
##  3 NA    GRUPO 1  Z350     78.5  81.5  78.8  81.8  GRUP… 52.8  54.0  52.9  57.0 
##  4 NA    <NA>              83.1  82.6  78.7  78.0  <NA>  58.0  55.8  54.5  55.5 
##  5 NA    <NA>              84.8  77.5  87.5  81.4  <NA>  52.9  51.2  54.0  53.2 
##  6 NA    <NA>              78.6  83.0  81.5  83.6  <NA>  52.6  56.8  57.2  54.6 
##  7 NA    <NA>              80.9  83.0  86.1  87.2  <NA>  60.0  56.5  61.4  53.1 
##  8 NA    <NA>              79.7  80.8  84.0  81.0  <NA>  59.2  56.7  58.0  56.7 
##  9 NA    <NA>              82.7  83.1  79.6  82.8  <NA>  53.6  58.8  58.6  51.8 
## 10 NA    <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 11 NA    GRUPO 2  Simplis… 66.9  66.3  62.5  59.1  GRUP… 71.7  69.9  68.4  67.5 
## 12 NA    <NA>              64.5  67.4  63.5  69.1  <NA>  79.2  75.9  78.5  78.1 
## 13 NA    <NA>              62.7  64.9  66.6  63.4  <NA>  73.7  73.4  78.6  74.8 
## 14 NA    <NA>              64.9  65.1  60.0  67.9  <NA>  71.1  78.7  74.2  78.4 
## 15 NA    <NA>              66.5  62.8  64.4  62.6  <NA>  71.0  69.0  68.0  71.3 
## 16 NA    <NA>              69.5  68.4  65.2  66.8  <NA>  68.0  77.4  69.3  65.5 
## 17 NA    <NA>              67.2  67.4  61.7  62.0  <NA>  74.1  73.9  74.9  77.9 
## 18 NA    <NA>              65.8  65.9  60.9  66.8  <NA>  76.1  74.8  76.9  74.7 
## 19 NA    <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 20 NA    GRUPO 3   Easyma… 82.5  77.8  84.9  79.5  <NA>  <NA>  <NA>  <NA>  <NA> 
## 21 NA    <NA>              84.5  82.3  84.7  86.8  <NA>  <NA>  <NA>  <NA>  <NA> 
## 22 NA    <NA>              82.1  86.6  80.1  84.9  <NA>  <NA>  <NA>  <NA>  <NA> 
## 23 NA    <NA>              89.8  89.1  85.4  82.9  <NA>  <NA>  <NA>  <NA>  <NA> 
## 24 NA    <NA>              76.7  78.4  83.6  81.5  <NA>  <NA>  <NA>  <NA>  <NA> 
## 25 NA    <NA>              86.6  88.2  81.2  81.5  <NA>  <NA>  <NA>  <NA>  <NA> 
## 26 NA    <NA>              86.8  79.5  87.5  81.3  <NA>  <NA>  <NA>  <NA>  <NA> 
## 27 NA    <NA>              84.0  80.9  84.9  81.5  <NA>  <NA>  <NA>  <NA>  <NA>

##Organización de los cinco grupos

# =====================================================
# ORGANIZACIÓN DE LOS CINCO GRUPOS EXPERIMENTALES
# =====================================================

# Función para extraer las cuatro mediciones
# correspondientes a cada disco

extraer_grupo <- function(datos, filas, columnas, nombre) {

  # Extraer las mediciones

  matriz <- datos[filas, columnas]

  # Convertir todas las columnas a formato numérico

  matriz <- as.data.frame(
    lapply(matriz, function(x) {
      as.numeric(as.character(x))
    })
  )

  # Verificar que existan cuatro mediciones

  if (ncol(matriz) != 4) {
    stop(paste("Error en las columnas del grupo:", nombre))
  }

  # Verificar valores faltantes

  if (any(is.na(matriz))) {
    stop(paste("Existen valores faltantes en el grupo:", nombre))
  }

  # Calcular promedio de las cuatro indentaciones

  promedio <- rowMeans(matriz)

  # Crear tabla del grupo

  resultado <- data.frame(
    grupo = nombre,
    disco = seq_along(promedio),
    microdureza = promedio
  )

  return(resultado)
}


# =====================================================
# EXTRAER LOS CINCO GRUPOS
# =====================================================

g1 <- extraer_grupo(
  datos_originales,
  2:9,
  3:6,
  "Z350 XT Control"
)

g2 <- extraer_grupo(
  datos_originales,
  11:18,
  3:6,
  "Simplishade"
)

g3 <- extraer_grupo(
  datos_originales,
  20:27,
  3:6,
  "Easy Match"
)

g4 <- extraer_grupo(
  datos_originales,
  2:9,
  8:11,
  "Vittra APS Unique"
)

g5 <- extraer_grupo(
  datos_originales,
  11:18,
  8:11,
  "Transcend"
)


# =====================================================
# UNIFICAR LOS CINCO GRUPOS
# =====================================================

datos <- rbind(
  g1,
  g2,
  g3,
  g4,
  g5
)


# =====================================================
# DEFINIR EL ORDEN DE LOS GRUPOS
# =====================================================

datos$grupo <- factor(
  datos$grupo,
  levels = c(
    "Z350 XT Control",
    "Simplishade",
    "Easy Match",
    "Vittra APS Unique",
    "Transcend"
  )
)


# =====================================================
# VERIFICACIÓN DE LA BASE DE DATOS
# =====================================================

# Mostrar estructura

str(datos)
## 'data.frame':    40 obs. of  3 variables:
##  $ grupo      : Factor w/ 5 levels "Z350 XT Control",..: 1 1 1 1 1 1 1 1 2 2 ...
##  $ disco      : int  1 2 3 4 5 6 7 8 1 2 ...
##  $ microdureza: num  79.5 80.2 80.6 82.8 81.7 ...
# Mostrar registros

print(datos)
##                grupo disco microdureza
## 1    Z350 XT Control     1       79.53
## 2    Z350 XT Control     2       80.15
## 3    Z350 XT Control     3       80.60
## 4    Z350 XT Control     4       82.80
## 5    Z350 XT Control     5       81.67
## 6    Z350 XT Control     6       84.30
## 7    Z350 XT Control     7       81.38
## 8    Z350 XT Control     8       82.05
## 9        Simplishade     1       63.70
## 10       Simplishade     2       66.12
## 11       Simplishade     3       64.40
## 12       Simplishade     4       64.47
## 13       Simplishade     5       64.08
## 14       Simplishade     6       67.47
## 15       Simplishade     7       64.58
## 16       Simplishade     8       64.85
## 17        Easy Match     1       81.17
## 18        Easy Match     2       84.58
## 19        Easy Match     3       83.42
## 20        Easy Match     4       86.80
## 21        Easy Match     5       80.05
## 22        Easy Match     6       84.38
## 23        Easy Match     7       83.78
## 24        Easy Match     8       82.83
## 25 Vittra APS Unique     1       58.15
## 26 Vittra APS Unique     2       54.17
## 27 Vittra APS Unique     3       55.95
## 28 Vittra APS Unique     4       52.83
## 29 Vittra APS Unique     5       55.30
## 30 Vittra APS Unique     6       57.75
## 31 Vittra APS Unique     7       57.65
## 32 Vittra APS Unique     8       55.70
## 33         Transcend     1       69.38
## 34         Transcend     2       77.92
## 35         Transcend     3       75.12
## 36         Transcend     4       75.60
## 37         Transcend     5       69.83
## 38         Transcend     6       70.05
## 39         Transcend     7       75.20
## 40         Transcend     8       75.62
# Número de discos por grupo

print(table(datos$grupo))
## 
##   Z350 XT Control       Simplishade        Easy Match Vittra APS Unique 
##                 8                 8                 8                 8 
##         Transcend 
##                 8
# Número total de discos

cat("Total de discos:", nrow(datos), "\n")
## Total de discos: 40
# Valores faltantes

cat(
  "Valores faltantes:",
  sum(is.na(datos$microdureza)),
  "\n"
)
## Valores faltantes: 0
# Verificar que existan 40 discos

stopifnot(nrow(datos) == 40)

# Verificar ocho discos por grupo

stopifnot(all(table(datos$grupo) == 8))

# Verificar ausencia de valores faltantes

stopifnot(!any(is.na(datos$microdureza)))

cat("Base de datos organizada correctamente.")
## Base de datos organizada correctamente.

#Transformamos la base original a formato largo, donde cada fila representa un disco y su promedio de microdureza. Esto permite realizar comparaciones independientes entre los cinco materiales, siempre que los discos sean efectivamente las unidades experimentales independientes. El resultado esperado es una base de 40 filas, con ocho discos en cada grupo.

##Verificación de la estructura y calidad de los datos

# Estructura de la base

str(datos)
## 'data.frame':    40 obs. of  3 variables:
##  $ grupo      : Factor w/ 5 levels "Z350 XT Control",..: 1 1 1 1 1 1 1 1 2 2 ...
##  $ disco      : int  1 2 3 4 5 6 7 8 1 2 ...
##  $ microdureza: num  79.5 80.2 80.6 82.8 81.7 ...
# Número de observaciones

nrow(datos)
## [1] 40
# Número de grupos

nlevels(datos$grupo)
## [1] 5
# Número de discos por grupo

datos %>%
  count(grupo)
##               grupo n
## 1   Z350 XT Control 8
## 2       Simplishade 8
## 3        Easy Match 8
## 4 Vittra APS Unique 8
## 5         Transcend 8
# Estadísticos generales

summary(datos$microdureza)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    52.8    64.3    75.2    71.9    81.5    86.8
# Identificar valores faltantes

datos %>%
  filter(is.na(microdureza))
## [1] grupo       disco       microdureza
## <0 rows> (o 0- extensión row.names)
# Identificar valores no positivos

datos %>%
  filter(microdureza <= 0)
## [1] grupo       disco       microdureza
## <0 rows> (o 0- extensión row.names)
# Importar el archivo conservando las filas y columnas originales

datos_originales <- read_excel(
  file.choose(),
  range = "A1:K27",
  col_names = FALSE
)
## New names:
## • `` -> `...1`
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
## • `` -> `...11`
# Verificar dimensiones

dim(datos_originales)
## [1] 27 11
# Visualizar estructura completa

print(datos_originales, n = Inf)
## # A tibble: 27 × 11
##    ...1  ...2              ...3  ...4  ...5  ...6  ...7  ...8  ...9  ...10 ...11
##    <lgl> <chr>             <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
##  1 NA    <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  2 NA    <NA>              78.6  80.7  79.3  79.5  <NA>  60.0  57.2  59.0  56.4 
##  3 NA    GRUPO 1  Z350     78.5  81.5  78.8  81.8  GRUP… 52.8  54.0  52.9  57.0 
##  4 NA    <NA>              83.1  82.6  78.7  78.0  <NA>  58.0  55.8  54.5  55.5 
##  5 NA    <NA>              84.8  77.5  87.5  81.4  <NA>  52.9  51.2  54.0  53.2 
##  6 NA    <NA>              78.6  83.0  81.5  83.6  <NA>  52.6  56.8  57.2  54.6 
##  7 NA    <NA>              80.9  83.0  86.1  87.2  <NA>  60.0  56.5  61.4  53.1 
##  8 NA    <NA>              79.7  80.8  84.0  81.0  <NA>  59.2  56.7  58.0  56.7 
##  9 NA    <NA>              82.7  83.1  79.6  82.8  <NA>  53.6  58.8  58.6  51.8 
## 10 NA    <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 11 NA    GRUPO 2  Simplis… 66.9  66.3  62.5  59.1  GRUP… 71.7  69.9  68.4  67.5 
## 12 NA    <NA>              64.5  67.4  63.5  69.1  <NA>  79.2  75.9  78.5  78.1 
## 13 NA    <NA>              62.7  64.9  66.6  63.4  <NA>  73.7  73.4  78.6  74.8 
## 14 NA    <NA>              64.9  65.1  60.0  67.9  <NA>  71.1  78.7  74.2  78.4 
## 15 NA    <NA>              66.5  62.8  64.4  62.6  <NA>  71.0  69.0  68.0  71.3 
## 16 NA    <NA>              69.5  68.4  65.2  66.8  <NA>  68.0  77.4  69.3  65.5 
## 17 NA    <NA>              67.2  67.4  61.7  62.0  <NA>  74.1  73.9  74.9  77.9 
## 18 NA    <NA>              65.8  65.9  60.9  66.8  <NA>  76.1  74.8  76.9  74.7 
## 19 NA    <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 20 NA    GRUPO 3   Easyma… 82.5  77.8  84.9  79.5  <NA>  <NA>  <NA>  <NA>  <NA> 
## 21 NA    <NA>              84.5  82.3  84.7  86.8  <NA>  <NA>  <NA>  <NA>  <NA> 
## 22 NA    <NA>              82.1  86.6  80.1  84.9  <NA>  <NA>  <NA>  <NA>  <NA> 
## 23 NA    <NA>              89.8  89.1  85.4  82.9  <NA>  <NA>  <NA>  <NA>  <NA> 
## 24 NA    <NA>              76.7  78.4  83.6  81.5  <NA>  <NA>  <NA>  <NA>  <NA> 
## 25 NA    <NA>              86.6  88.2  81.2  81.5  <NA>  <NA>  <NA>  <NA>  <NA> 
## 26 NA    <NA>              86.8  79.5  87.5  81.3  <NA>  <NA>  <NA>  <NA>  <NA> 
## 27 NA    <NA>              84.0  80.9  84.9  81.5  <NA>  <NA>  <NA>  <NA>  <NA>

Estadística descriptiva

#Este análisis responde a la primera pregunta: ¿cuáles son los valores de microdureza de cada material?

#Calcularemos: #- Número de muestras. #- Media. #- Desviación estándar. #- Mediana. #- Mínimo y máximo. #- Primer y tercer cuartil. #- Rango intercuartílico.

# Función para extraer las cuatro indentaciones
# correspondientes a cada disco

extraer_grupo <- function(datos, filas, columnas, nombre){

  matriz <- datos[
    filas,
    columnas
  ] %>%
    as.data.frame()

  # Convertir mediciones a formato numérico

  matriz <- matriz %>%
    mutate(
      across(
        everything(),
        as.numeric
      )
    )

  # Verificar que existan cuatro mediciones
  # completas por disco

  if(any(!complete.cases(matriz))){
    stop(
      paste(
        "Existen mediciones faltantes en el grupo:",
        nombre
      )
    )
  }

  # Calcular promedio de las cuatro indentaciones

  promedio <- rowMeans(matriz)

  # Crear base de datos por disco

  tibble(
    grupo = nombre,
    disco = seq_along(promedio),
    microdureza = promedio
  )
}

# Grupo 1: Filtek Z350 XT Control

g1 <- extraer_grupo(
  datos_originales,
  2:9,
  3:6,
  "Z350 XT Control"
)

# Grupo 2: Simplishade

g2 <- extraer_grupo(
  datos_originales,
  11:18,
  3:6,
  "Simplishade"
)

# Grupo 3: Filtek Easy Match

g3 <- extraer_grupo(
  datos_originales,
  20:27,
  3:6,
  "Easy Match"
)

# Grupo 4: Vittra APS Unique

g4 <- extraer_grupo(
  datos_originales,
  2:9,
  8:11,
  "Vittra APS Unique"
)

# Grupo 5: Transcend

g5 <- extraer_grupo(
  datos_originales,
  11:18,
  8:11,
  "Transcend"
)

# Unificar los grupos

datos <- bind_rows(
  g1, g2, g3, g4, g5
)

# Ordenar los grupos

datos$grupo <- factor(
  datos$grupo,
  levels = c(
    "Z350 XT Control",
    "Simplishade",
    "Easy Match",
    "Vittra APS Unique",
    "Transcend"
  )
)

# Verificar estructura

str(datos)
## tibble [40 × 3] (S3: tbl_df/tbl/data.frame)
##  $ grupo      : Factor w/ 5 levels "Z350 XT Control",..: 1 1 1 1 1 1 1 1 2 2 ...
##  $ disco      : int [1:40] 1 2 3 4 5 6 7 8 1 2 ...
##  $ microdureza: num [1:40] 79.5 80.2 80.6 82.8 81.7 ...
# Verificar cantidad de discos

table(datos$grupo)
## 
##   Z350 XT Control       Simplishade        Easy Match Vittra APS Unique 
##                 8                 8                 8                 8 
##         Transcend 
##                 8
# Verificar valores faltantes

sum(is.na(datos$microdureza))
## [1] 0
# Mostrar base definitiva

print(datos, n = Inf)
## # A tibble: 40 × 3
##    grupo             disco microdureza
##    <fct>             <int>       <dbl>
##  1 Z350 XT Control       1        79.5
##  2 Z350 XT Control       2        80.2
##  3 Z350 XT Control       3        80.6
##  4 Z350 XT Control       4        82.8
##  5 Z350 XT Control       5        81.7
##  6 Z350 XT Control       6        84.3
##  7 Z350 XT Control       7        81.4
##  8 Z350 XT Control       8        82.0
##  9 Simplishade           1        63.7
## 10 Simplishade           2        66.1
## 11 Simplishade           3        64.4
## 12 Simplishade           4        64.5
## 13 Simplishade           5        64.1
## 14 Simplishade           6        67.5
## 15 Simplishade           7        64.6
## 16 Simplishade           8        64.8
## 17 Easy Match            1        81.2
## 18 Easy Match            2        84.6
## 19 Easy Match            3        83.4
## 20 Easy Match            4        86.8
## 21 Easy Match            5        80.0
## 22 Easy Match            6        84.4
## 23 Easy Match            7        83.8
## 24 Easy Match            8        82.8
## 25 Vittra APS Unique     1        58.2
## 26 Vittra APS Unique     2        54.2
## 27 Vittra APS Unique     3        56.0
## 28 Vittra APS Unique     4        52.8
## 29 Vittra APS Unique     5        55.3
## 30 Vittra APS Unique     6        57.8
## 31 Vittra APS Unique     7        57.6
## 32 Vittra APS Unique     8        55.7
## 33 Transcend             1        69.4
## 34 Transcend             2        77.9
## 35 Transcend             3        75.1
## 36 Transcend             4        75.6
## 37 Transcend             5        69.8
## 38 Transcend             6        70.0
## 39 Transcend             7        75.2
## 40 Transcend             8        75.6
# Estadística descriptiva

tabla_descriptiva <- datos %>%

  group_by(grupo) %>%

  summarise(

    n = n(),

    Media = mean(microdureza),

    DE = sd(microdureza),

    Mediana = median(microdureza),

    Minimo = min(microdureza),

    Maximo = max(microdureza),

    Q1 = quantile(microdureza, 0.25),

    Q3 = quantile(microdureza, 0.75),

    RIC = IQR(microdureza),

    .groups = "drop"

  )

# Presentar resultados

knitr::kable(
  tabla_descriptiva,
  digits = 2,
  caption = "Tabla 1. Estadísticos descriptivos de microdureza superficial Vickers por grupo"
)
Tabla 1. Estadísticos descriptivos de microdureza superficial Vickers por grupo
grupo n Media DE Mediana Minimo Maximo Q1 Q3 RIC
Z350 XT Control 8 81.56 1.53 81.53 79.53 84.30 80.49 82.24 1.75
Simplishade 8 64.96 1.24 64.53 63.70 67.47 64.32 65.17 0.85
Easy Match 8 83.38 2.09 83.60 80.05 86.80 82.41 84.42 2.01
Vittra APS Unique 8 55.94 1.87 55.83 52.83 58.15 55.02 57.68 2.66
Transcend 8 73.59 3.30 75.16 69.38 77.92 69.99 75.61 5.61

##Intervalos de confianza del 95%

tabla_ic <- datos %>%

  group_by(grupo) %>%

  summarise(

    n = n(),

    media = mean(microdureza),

    desviacion = sd(microdureza),

    error_estandar = desviacion / sqrt(n),

    t_critico = qt(0.975, df = n - 1),

    IC_inferior =
      media - t_critico * error_estandar,

    IC_superior =
      media + t_critico * error_estandar,

    .groups = "drop"

  )

kable(
  tabla_ic,
  digits = 2,
  caption = "Tabla 2. Medias e intervalos de confianza del 95% de microdureza Vickers"
)
Tabla 2. Medias e intervalos de confianza del 95% de microdureza Vickers
grupo n media desviacion error_estandar t_critico IC_inferior IC_superior
Z350 XT Control 8 81.56 1.53 0.54 2.36 80.28 82.84
Simplishade 8 64.96 1.24 0.44 2.36 63.92 66.00
Easy Match 8 83.38 2.09 0.74 2.36 81.63 85.12
Vittra APS Unique 8 55.94 1.87 0.66 2.36 54.38 57.50
Transcend 8 73.59 3.30 1.17 2.36 70.83 76.35

#Interpretación: un intervalo de confianza más estrecho indica mayor precisión en la estimación de la media. Sin embargo, los intervalos individuales no sustituyen las comparaciones estadísticas entre grupos.

##Gráfico de medias con intervalos de confianza

ggplot(
  tabla_ic,
  aes(
    x = grupo,
    y = media
  )
) +

  geom_col(
    fill = "steelblue",
    width = 0.65
  ) +

  geom_errorbar(
    aes(
      ymin = IC_inferior,
      ymax = IC_superior
    ),
    width = 0.18,
    linewidth = 0.8
  ) +

  labs(
    title = "Microdureza superficial de las resinas",
    subtitle = "Media e intervalo de confianza del 95%",
    x = "Material restaurador",
    y = "Microdureza Vickers (HV)"
  ) +

  theme_classic() +

  theme(
    axis.text.x = element_text(
      angle = 25,
      hjust = 1
    ),
    plot.title = element_text(
      face = "bold",
      size = 14
    )
  )

#permite comparar visualmente los promedios y la precisión de las estimaciones de cada grupo.

##Diagrama de cajas (Boxplot)

ggplot(
  datos,
  aes(
    x = grupo,
    y = microdureza,
    fill = grupo
  )
) +

  geom_boxplot(
    alpha = 0.7,
    outlier.shape = NA
  ) +

  geom_jitter(
    width = 0.12,
    size = 2,
    alpha = 0.8
  ) +

  labs(
    title = "Distribución de la microdureza superficial",
    x = "Grupo experimental",
    y = "Microdureza Vickers (HV)"
  ) +

  theme_classic() +

  theme(
    legend.position = "none",
    axis.text.x = element_text(
      angle = 25,
      hjust = 1
    )
  )

#La línea central representa la mediana. #La caja representa el rango intercuartílico. #Los bigotes representan la extensión de los valores no considerados atípicos por la regla del gráfico. #Los puntos representan los discos individuales.

##Identificación de valores atípicos

valores_atipicos <- datos %>%

  group_by(grupo) %>%

  identify_outliers(
    microdureza
  )

kable(
  valores_atipicos,
  digits = 3,
  caption = "Tabla 3. Identificación de posibles valores atípicos por grupo"
)
Tabla 3. Identificación de posibles valores atípicos por grupo
grupo disco microdureza is.outlier is.extreme
Simplishade 6 67.47 TRUE FALSE

##Normalidad de los residuos

# Modelo ANOVA preliminar

modelo_anova <- aov(
  microdureza ~ grupo,
  data = datos
)

# Extraer residuos

residuos <- residuals(modelo_anova)

# Prueba de Shapiro-Wilk

shapiro_resultado <- shapiro.test(residuos)

shapiro_resultado
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.98, p-value = 0.8

#Interpretación: no se encuentra evidencia estadísticamente significativa para rechazar el supuesto de normalidad de los residuos (p = 0.8). Por tanto, este supuesto se considera razonablemente satisfecho.

##Homogeneidad de varianzas

# Prueba de Levene

levene_resultado <- car::leveneTest(
  microdureza ~ grupo,
  data = datos,
  center = median
)

levene_resultado
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  4    1.41   0.25
##       35

#Interpretación: no se encontraron diferencias estadísticamente significativas entre las varianzas de los cinco grupos. Por tanto, no existe evidencia suficiente para rechazar el supuesto de homogeneidad de varianzas.

##Gráficos de diagnóstico

# Gráfico Q-Q

qqnorm(
  residuos,
  main = "Normalidad de los residuos del modelo"
)

qqline(
  residuos,
  col = "red",
  lwd = 2
)

#Se observa cierta desviación en las colas, especialmente en algunos valores inferiores, pero no parece existir una desviación generalizada importante.

# Residuos frente a valores ajustados

plot(
  modelo_anova,
  which = 1
)

#Estos gráficos permiten complementar las pruebas formales y verificar visualmente el comportamiento de los residuos. #Se observa que los residuos se distribuyen alrededor de cero, sin un patrón sistemático evidente. La línea roja se mantiene relativamente próxima a la línea horizontal de referencia.Sin embargo, aparecen tres observaciones identificadas con los números 33, 34 y 37, que presentan residuos relativamente elevados en valor absoluto. #Estos puntos corresponden a discos del grupo Transcend: #- Observación 33: aproximadamente 69.4 HV. #- Observación 34: aproximadamente 77.9 HV. #- Observación 37: aproximadamente 69.8 HV. #Esto es coherente con la mayor desviación estándar observada en Transcend (3.30 HV).

##ANOVA de una vía #La hipótesis nula plantea que las medias de microdureza de los cinco materiales son iguales #La hipótesis alternativa establece que al menos una media es diferente.

# Ejecutar ANOVA

resultado_anova <- summary(
  modelo_anova
)

resultado_anova
##             Df Sum Sq Mean Sq F value              Pr(>F)    
## grupo        4   4246    1062     235 <0.0000000000000002 ***
## Residuals   35    158       5                                
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

#El análisis de varianza de una vía identificó diferencias estadísticamente significativas en la microdureza superficial entre los cinco grupos de resinas evaluados (F(4,35) = 233.52; p menor que 0.001).

#Este resultado permite rechazar la hipótesis nula de igualdad de medias y concluir que al menos uno de los materiales presenta un comportamiento diferente en términos de microdureza superficial.

#Es necesario realizar comparaciones múltiples para identificar específicamente entre cuáles materiales existen diferencias.

##Tamaño del efecto

# Calcular eta cuadrado

eta_resultado <- effectsize::eta_squared(
  modelo_anova,
  partial = FALSE
)

eta_resultado
## # Effect Size for ANOVA (Type I)
## 
## Parameter | Eta2 |       95% CI
## -------------------------------
## grupo     | 0.96 | [0.94, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].

#El grupo de material representa aproximadamente el 96% de la variabilidad total observada en la microdureza de los discos analizados, dentro del modelo de ANOVA. #Este resultado representa una magnitud de efecto muy elevada. #El tamaño del efecto estimado mediante eta cuadrado fue de 0.96 (IC 95%: 0.94–1.00), lo que evidencia una magnitud de efecto muy elevada. Este hallazgo indica que las diferencias entre los materiales representan una proporción considerable de la variabilidad total de la microdureza superficial observada. Este resultado complementa el valor p del ANOVA y demuestra que las diferencias no solamente son estadísticamente significativas, sino también de gran magnitud en el contexto experimental.

##Comparaciones múltiples de Tukey

# Prueba de Tukey

resultado_tukey <- TukeyHSD(
  modelo_anova,
  "grupo",
  conf.level = 0.95
)

resultado_tukey
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = microdureza ~ grupo, data = datos)
## 
## $grupo
##                                      diff     lwr     upr  p adj
## Simplishade-Z350 XT Control       -16.600 -19.659 -13.541 0.0000
## Easy Match-Z350 XT Control          1.816  -1.243   4.874 0.4431
## Vittra APS Unique-Z350 XT Control -25.622 -28.680 -22.563 0.0000
## Transcend-Z350 XT Control          -7.969 -11.027  -4.910 0.0000
## Easy Match-Simplishade             18.416  15.357  21.474 0.0000
## Vittra APS Unique-Simplishade      -9.022 -12.080  -5.963 0.0000
## Transcend-Simplishade               8.631   5.573  11.690 0.0000
## Vittra APS Unique-Easy Match      -27.438 -30.496 -24.379 0.0000
## Transcend-Easy Match               -9.784 -12.843  -6.726 0.0000
## Transcend-Vittra APS Unique        17.653  14.595  20.712 0.0000

#A. Easy Match frente a Z350 XT (control) #- Diferencia de medias: 1.816 HV. #- IC 95%: -1.243 a 4.874. #- p ajustado: 0.4431. #No se encontraron diferencias estadísticamente significativas.

#Este resultado es interesante porque Easy Match presentó la mayor media de microdureza (83.38 HV), mientras que Z350 XT presentó 81.56 HV.

#Aunque Easy Match presentó un promedio numéricamente superior, no podemos afirmar que tenga mayor microdureza que el control.

#Tampoco podemos afirmar que ambos materiales sean equivalentes.

#B. Simplishade frente a Z350 XT #- Diferencia: -16.600 HV. #- p menor que 0.001. #Simplishade presentó una microdureza significativamente inferior a la del grupo control.

#C. Vittra APS Unique frente a Z350 XT #- Diferencia: -25.622 HV. #- p menor que 0.001. #Vittra APS Unique presentó una microdureza significativamente inferior a la del control. Esta fue una de las mayores diferencias observadas.

#D. Transcend frente a Z350 XT #- Diferencia: -7.969 HV. #- p menor que 0.001. #Transcend presentó una microdureza significativamente inferior a la del grupo control.

#E. Comparación entre las cuatro resinas experimentales

#También encontramos diferencias significativas entre todas las comparaciones posibles de los grupos experimentales: #- Easy Match presentó mayor microdureza que Simplishade. #- Easy Match presentó mayor microdureza que Vittra APS Unique. #- Easy Match presentó mayor microdureza que Transcend. #- Transcend presentó mayor microdureza que Simplishade. #- Transcend presentó mayor microdureza que Vittra APS Unique. #- Simplishade presentó mayor microdureza que Vittra APS Unique. #Por tanto, las cuatro resinas experimentales no presentaron un comportamiento homogéneo en cuanto a microdureza superficial.

#Agrupación estadística de Tukey #- Grupo A: Easy Match y Z350 XT. #- Grupo B: Transcend. #- Grupo C: Simplishade. #- Grupo D: Vittra APS Unique.

##Tabla resultados

# Convertir resultados en tabla

tabla_tukey <- as.data.frame(
  resultado_tukey$grupo
)

tabla_tukey$Comparacion <- rownames(
  tabla_tukey
)

tabla_tukey <- tabla_tukey %>%

  select(
    Comparacion,
    diff,
    lwr,
    upr,
    `p adj`
  )

colnames(tabla_tukey) <- c(
  "Comparación",
  "Diferencia de medias",
  "IC inferior",
  "IC superior",
  "Valor p ajustado"
)

knitr::kable(
  tabla_tukey,
  digits = 4,
  caption = "Tabla 2. Comparaciones múltiples de microdureza mediante Tukey"
)
Tabla 2. Comparaciones múltiples de microdureza mediante Tukey
Comparación Diferencia de medias IC inferior IC superior Valor p ajustado
Simplishade-Z350 XT Control Simplishade-Z350 XT Control -16.600 -19.659 -13.541 0.0000
Easy Match-Z350 XT Control Easy Match-Z350 XT Control 1.816 -1.243 4.874 0.4431
Vittra APS Unique-Z350 XT Control Vittra APS Unique-Z350 XT Control -25.622 -28.680 -22.563 0.0000
Transcend-Z350 XT Control Transcend-Z350 XT Control -7.969 -11.027 -4.910 0.0000
Easy Match-Simplishade Easy Match-Simplishade 18.416 15.357 21.474 0.0000
Vittra APS Unique-Simplishade Vittra APS Unique-Simplishade -9.022 -12.080 -5.963 0.0000
Transcend-Simplishade Transcend-Simplishade 8.631 5.573 11.690 0.0000
Vittra APS Unique-Easy Match Vittra APS Unique-Easy Match -27.438 -30.496 -24.379 0.0000
Transcend-Easy Match Transcend-Easy Match -9.784 -12.843 -6.726 0.0000
Transcend-Vittra APS Unique Transcend-Vittra APS Unique 17.653 14.595 20.712 0.0000
# Preparar datos de Tukey

tukey_grafico <- as.data.frame(
  resultado_tukey$grupo
)

tukey_grafico$Comparacion <- rownames(
  tukey_grafico
)

# Gráfico de diferencias e intervalos

ggplot(
  tukey_grafico,
  aes(
    x = reorder(Comparacion, diff),
    y = diff
  )
) +

  geom_point(
    size = 2.8
  ) +

  geom_errorbar(
    aes(
      ymin = lwr,
      ymax = upr
    ),
    width = 0.2
  ) +

  geom_hline(
    yintercept = 0,
    linetype = "dashed",
    color = "red"
  ) +

  coord_flip() +

  labs(
    title = "Comparaciones múltiples de Tukey",
    subtitle = "Diferencias de medias e intervalos de confianza del 95%",
    x = "Comparaciones entre materiales",
    y = "Diferencia de microdureza (HV)"
  ) +

  theme_classic() +

  theme(
    plot.title = element_text(
      face = "bold"
    )
  )

#La línea vertical en cero representa ausencia de diferencia entre dos materiales. Cuando el intervalo de confianza no cruza esa línea, la comparación es estadísticamente significativa.

# Restablecer configuración de impresión de valores faltantes

options(na.print = "NA")

# Restablecer opciones numéricas

options(
  scipen = 999,
  digits = 4
)

# Verificar configuración

getOption("na.print")
## [1] "NA"

##Datos influyentes

# =====================================================
# DIAGNÓSTICO DE RESIDUOS Y DISTANCIA DE COOK
# =====================================================

# Crear tabla de diagnóstico

diagnostico <- data.frame(

  grupo = datos$grupo,

  disco = datos$disco,

  microdureza = datos$microdureza,

  residuo = residuals(modelo_anova),

  residuo_estandarizado = rstandard(modelo_anova),

  distancia_cook = cooks.distance(modelo_anova)

)

# =====================================================
# IDENTIFICAR RESIDUOS ESTANDARIZADOS > 2
# =====================================================

observaciones_residuos <- diagnostico %>%

  filter(
    abs(residuo_estandarizado) > 2
  )

print(observaciones_residuos)
##        grupo disco microdureza residuo residuo_estandarizado distancia_cook
## 33 Transcend     1       69.38  -4.216                -2.118         0.1282
## 34 Transcend     2       77.92   4.334                 2.178         0.1355
# =====================================================
# IDENTIFICAR DISTANCIAS DE COOK > 4/n
# =====================================================

observaciones_cook <- diagnostico %>%

  filter(
    distancia_cook > 4/nrow(datos)
  )

print(observaciones_cook)
##        grupo disco microdureza residuo residuo_estandarizado distancia_cook
## 33 Transcend     1       69.38  -4.216                -2.118         0.1282
## 34 Transcend     2       77.92   4.334                 2.178         0.1355
## 37 Transcend     5       69.83  -3.766                -1.892         0.1023
# =====================================================
# MOSTRAR LAS 10 OBSERVACIONES MÁS INFLUYENTES
# =====================================================

diagnostico_ordenado <- diagnostico %>%

  arrange(
    desc(distancia_cook)
  )

head(
  diagnostico_ordenado,
  10
)
##                grupo disco microdureza residuo residuo_estandarizado
## 34         Transcend     2       77.92   4.334                 2.178
## 33         Transcend     1       69.38  -4.216                -2.118
## 37         Transcend     5       69.83  -3.766                -1.892
## 38         Transcend     6       70.05  -3.541                -1.779
## 20        Easy Match     4       86.80   3.425                 1.721
## 21        Easy Match     5       80.05  -3.325                -1.671
## 28 Vittra APS Unique     4       52.83  -3.112                -1.564
## 6    Z350 XT Control     6       84.30   2.741                 1.377
## 14       Simplishade     6       67.47   2.516                 1.264
## 25 Vittra APS Unique     1       58.15   2.212                 1.112
##    distancia_cook
## 34        0.13551
## 33        0.12819
## 37        0.10228
## 38        0.09042
## 20        0.08461
## 21        0.07975
## 28        0.06988
## 6         0.05418
## 14        0.04565
## 25        0.03531

#Residuos estandarizados #- Los discos 1 y 2 presentan residuos estandarizados superiores a 2 en valor absoluto. #- El disco 5 presenta un valor cercano a -2. #- Esto indica que sus mediciones se encuentran relativamente alejadas del valor promedio estimado para Transcend. #Distancia de Cook #Los tres discos superan el criterio exploratorio de 4/40 = 0.10. #Esto indica que podrían tener cierta influencia sobre el ajuste del modelo.Sin embargo, es importante aclarar que superar este umbral no significa que las observaciones sean incorrectas ni que deban eliminarse. #La resina Transcend presenta una variabilidad experimental mayor que los otros materiales: #- Media: 73.59 HV. #- Desviación estándar: 3.30 HV. #- Mínimo: 69.38 HV. #- Máximo: 77.92 HV. #Los tres discos identificados reflejan parte de esa variabilidad. #No se tiene evidencia para afirmar que sean errores de medición.

##Análisis inferencial de la microdureza superficial

#La evaluación de la microdureza superficial se realizó en 40 discos de resina compuesta, distribuidos en cinco grupos de ocho unidades experimentales. Para cada disco se efectuaron cuatro indentaciones en la superficie superior mediante el método Vickers, utilizando el promedio de estas mediciones como valor representativo de cada unidad experimental.

#En cuanto a los resultados descriptivos, Filtek Easy Match presentó el mayor promedio de microdureza superficial (83.38 ± 2.09 HV), seguido de Filtek Z350 XT (81.56 ± 1.53 HV), Transcend (73.59 ± 3.30 HV), Simplishade (64.96 ± 1.24 HV) y Vittra APS Unique (55.94 ± 1.87 HV).

#La evaluación de los supuestos estadísticos evidenció un comportamiento compatible con la normalidad de los residuos, según la prueba de Shapiro-Wilk (W = 0.98; p = 0.80). Asimismo, la prueba de Levene no identificó diferencias estadísticamente significativas entre las varianzas de los grupos (F = 1.41; p = 0.25).

#Una vez verificados los supuestos, se realizó un análisis de varianza de una vía, mediante el cual se identificaron diferencias estadísticamente significativas en la microdureza superficial entre los cinco materiales evaluados (F(4,35) = 235; p < 0.001).

#El tamaño del efecto, estimado mediante eta cuadrado, fue de 0.96 (IC 95%: 0.94–1.00), indicando una magnitud de efecto muy elevada y una importante contribución del tipo de material a la variabilidad observada en la microdureza.

#Las comparaciones múltiples mediante la prueba de Tukey identificaron diferencias estadísticamente significativas en nueve de las diez comparaciones realizadas (p < 0.001). La única comparación que no evidenció diferencias significativas fue la correspondiente a Filtek Easy Match y Filtek Z350 XT (diferencia de medias = 1.816 HV; IC 95%: -1.243 a 4.874; p ajustado = 0.4431).

#Entre los materiales experimentales, Easy Match presentó valores significativamente superiores a Transcend, Simplishade y Vittra APS Unique. Transcend, a su vez, presentó valores significativamente superiores a Simplishade y Vittra APS Unique. Finalmente, Simplishade presentó valores significativamente superiores a Vittra APS Unique.

#En conjunto, los hallazgos evidencian diferencias importantes en la microdureza superficial entre los materiales evaluados. Filtek Easy Match presentó el mayor valor promedio, mientras que Vittra APS Unique presentó el menor. Asimismo, Filtek Easy Match no mostró diferencias estadísticamente significativas respecto al grupo control Filtek Z350 XT, aunque estos resultados no permiten establecer equivalencia entre ambos materiales.

##Crear base de datos para análisis de sensibilidad

# Identificar discos potencialmente influyentes

discos_influyentes <- c(1, 2, 5)

# Base original: incluye los 40 discos

datos_completos <- datos

# Base complementaria: excluye temporalmente
# los tres discos identificados de Transcend

datos_sensibilidad <- datos %>%

  filter(
    !(grupo == "Transcend" &
        disco %in% discos_influyentes)
  )

# Verificar tamaños de muestra

table(datos_completos$grupo)
## 
##   Z350 XT Control       Simplishade        Easy Match Vittra APS Unique 
##                 8                 8                 8                 8 
##         Transcend 
##                 8
table(datos_sensibilidad$grupo)
## 
##   Z350 XT Control       Simplishade        Easy Match Vittra APS Unique 
##                 8                 8                 8                 8 
##         Transcend 
##                 5

##Comparación de los modelos ANOVA

# ANOVA principal

modelo_original <- aov(
  microdureza ~ grupo,
  data = datos_completos
)

# ANOVA de sensibilidad

modelo_sensibilidad <- aov(
  microdureza ~ grupo,
  data = datos_sensibilidad
)

# Extraer resultados

anova_original <- summary(
  modelo_original
)[[1]]

anova_sensibilidad <- summary(
  modelo_sensibilidad
)[[1]]

# Crear tabla comparativa

comparacion_anova <- data.frame(

  Modelo = c(
    "Modelo original (40 discos)",
    "Sensibilidad (37 discos)"
  ),

  F = c(
    anova_original$`F value`[1],
    anova_sensibilidad$`F value`[1]
  ),

  Valor_p = c(
    anova_original$`Pr(>F)`[1],
    anova_sensibilidad$`Pr(>F)`[1]
  )

)

knitr::kable(
  comparacion_anova,
  digits = 5,
  caption = "Tabla. Análisis de sensibilidad del ANOVA"
)
Tabla. Análisis de sensibilidad del ANOVA
Modelo F Valor_p
Modelo original (40 discos) 234.5 0
Sensibilidad (37 discos) 323.9 0

##Comparación del tamaño del efecto

# Eta cuadrado del modelo original

eta_original <- effectsize::eta_squared(
  modelo_original,
  partial = FALSE
)

# Eta cuadrado del modelo de sensibilidad

eta_sensibilidad <- effectsize::eta_squared(
  modelo_sensibilidad,
  partial = FALSE
)

eta_original
## # Effect Size for ANOVA (Type I)
## 
## Parameter | Eta2 |       95% CI
## -------------------------------
## grupo     | 0.96 | [0.94, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].
eta_sensibilidad
## # Effect Size for ANOVA (Type I)
## 
## Parameter | Eta2 |       95% CI
## -------------------------------
## grupo     | 0.98 | [0.96, 1.00]
## 
## - One-sided CIs: upper bound fixed at [1.00].

##Gráfico específico de la variabilidad de Transcend

# Filtrar Transcend

datos_transcend <- datos %>%

  filter(
    grupo == "Transcend"
  )

# Gráfico individual

ggplot(
  datos_transcend,
  aes(
    x = grupo,
    y = microdureza
  )
) +

  geom_boxplot(
    fill = "steelblue",
    alpha = 0.5,
    width = 0.35
  ) +

  geom_jitter(
    width = 0.08,
    size = 3
  ) +

  geom_text(
    aes(
      label = paste("Disco", disco)
    ),
    nudge_x = 0.15,
    size = 3
  ) +

  labs(
    title = "Variabilidad de microdureza en Transcend",
    subtitle = "Valores individuales de los ocho discos",
    x = "Material",
    y = "Microdureza Vickers (HV)"
  ) +

  theme_classic()

#Los resultados del análisis de sensibilidad son muy importantes y, desde el punto de vista metodológico, nos permiten llegar a una conclusión favorable:las diferencias de microdureza entre los cinco materiales se mantienen e incluso se hacen más marcadas cuando se excluyen temporalmente las tres observaciones potencialmente influyentes de Transcend.Esto significa que el resultado principal del estudio no depende exclusivamente de esos tres discos.

#las diferencias entre los materiales no desaparecen cuando se retiran las observaciones potencialmente influyentes. Por tanto, el hallazgo global es robusto frente a esta evaluación de sensibilidad.No obstante, esto no demuestra que los tres discos deban excluirse ni que el modelo reducido sea preferible.