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

##Carga de paquetes

# Cargar los paquetes necesarios
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(rstatix)
## 
## Adjuntando el paquete: 'rstatix'
## 
## The following object is masked from 'package:stats':
## 
##     filter
library(knitr)
library(effectsize)
## 
## Adjuntando el paquete: 'effectsize'
## 
## The following objects are masked from 'package:rstatix':
## 
##     cohens_d, eta_squared, omega_squared
library(boot)

library(readxl)
library(tidyverse)
library(rstatix)
library(knitr)
library(effectsize)
library(boot)

options(
  digits = 4,
  scipen = 999
)

alpha <- 0.05

theme_set(
  theme_classic(base_size = 12)
)

library(readxl)
datos <- read_excel("D:/usuario nuevo/Downloads/datos.xlsx")
View(datos)
# Comprobar la carpeta de trabajo
getwd()
## [1] "D:/usuario nuevo/Desktop/ESTADISTICA UN"
# Mostrar los archivos disponibles en esa carpeta
list.files()
##  [1] "~$tadistica.docx"                                                                                                                                                                           
##  [2] "analisis-estadistico-contracción-dde-reinas-U.docx"                                                                                                                                         
##  [3] "analisis-estadistico-contracción-dde-reinas-U.Rmd"                                                                                                                                          
##  [4] "Análisis de contracción por polimerización de 5 resinas unicromáticas.Rmd"                                                                                                                  
##  [5] "analisis estadistico contracción dde reinas U.Rmd"                                                                                                                                          
##  [6] "Análisis estadístico profesional de los métodos de medición del color dental.docx"                                                                                                          
##  [7] "Area-bajo-la-curva.html"                                                                                                                                                                    
##  [8] "Area-bala-la-C2_files"                                                                                                                                                                      
##  [9] "boxplot_area_tecnologia.png"                                                                                                                                                                
## [10] "boxplot_g2.png"                                                                                                                                                                             
## [11] "estadistica.docx"                                                                                                                                                                           
## [12] "Felipe.docx"                                                                                                                                                                                
## [13] "Felipe.html"                                                                                                                                                                                
## [14] "Felipe.log"                                                                                                                                                                                 
## [15] "Felipe.Rmd"                                                                                                                                                                                 
## [16] "Felipe.tex"                                                                                                                                                                                 
## [17] "Informe Estadística.docx"                                                                                                                                                                   
## [18] "MODELO DE  MACHINE LEARNING PARA LA IDENTIFICACIÓN DE LA CALIDAD OSEA PARA LA INSTALACIÓN DE IMPLANTES DE OSTEOINTEGRACIÓN EN TOMOGRAFIAS DE HAZ CÓNICO A (Recuperado automáticamente).docx"
## [19] "MODELO DE  MACHINE LEARNING PARA LA IDENTIFICACIÓN DE LA CALIDAD OSEA PARA LA INSTALACIÓN DE IMPLANTES DE OSTEOINTEGRACIÓN EN TOMOGRAFIAS DE HAZ CÓNICO A.docx"                             
## [20] "Nathaly.docx"                                                                                                                                                                               
## [21] "Nathaly.html"                                                                                                                                                                               
## [22] "Nathaly.pdf"                                                                                                                                                                                
## [23] "Nathaly.Rmd"                                                                                                                                                                                
## [24] "Para interpretar correctamente las gráficas Felipe.docx"                                                                                                                                    
## [25] "Resultados-Tintes.html"                                                                                                                                                                     
## [26] "resultados_raman"                                                                                                                                                                           
## [27] "rsconnect"                                                                                                                                                                                  
## [28] "Tabla para datos.xlsx"
# Definir el archivo
archivo <- "D:/usuario nuevo/Downloads/datos.xlsx"

# Comprobar que existe
if (!file.exists(archivo)) {
  stop(
    "No se encuentra datos.xlsx. ",
    "Guarda el Excel en la carpeta de trabajo de RStudio."
  )
}

# Mostrar los nombres exactos de las hojas
hojas <- excel_sheets(archivo)

print(hojas)
## [1] "Todo "

# Seleccionar la hoja llamada Todo, ignorando espacios externos
indice_hoja <- which(trimws(hojas) == "Todo")

if (length(indice_hoja) != 1) {
  stop(
    "No se identificó una única hoja llamada Todo. ",
    "Revisa el resultado del chunk importar-excel."
  )
}

hoja_correcta <- hojas[indice_hoja]

# Leer la hoja conservando su estructura original
datos_originales <- read_excel(
  path = archivo,
  sheet = hoja_correcta,
  col_names = FALSE
)

# Revisar dimensiones y primeras filas
dim(datos_originales)
## [1] 124  11
head(datos_originales, 15)
## # A tibble: 15 × 11
##    ...1              ...2  ...3  ...4  ...5  ...6  ...7  ...8  ...9  ...10 ...11
##    <chr>             <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
##  1 Muestra curada T… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  2 1                 0,49… 0.25… 0.25… 0.25… 2.08… 2.08… 2.08… 2.08… 2.07… 2.55…
##  3 2                 0,48… 0.25… 0.25… 0.25… 2.08… 2.09… 2.08… 2.08… 2.08… 2.71…
##  4 3                 0,50… 0.25… 0.25… 0.25… 2.07… 2.05… 2.07… 2.07… 2.06… 1.98…
##  5 4                 0,48… 0.25… 0.25… 0.25… 2.06… 2.06… 2.06… 2.06… 2.05… 1.44…
##  6 5                 0,48… 0.24… 0.24… 0.249 2.05… 2.05… 2.05… 2.05… 2.04… 1.02…
##  7 6                 0,49… 0.25… 0.25… 0.25… 2.04… 2.06… 2.05… 2.05… 2.05… 1.19…
##  8 7                 0,49… 0.25… 0.255 0.25… 2.05… 2.05… 2.06… 2.05… 2.05… 1.29…
##  9 8                 0,48… 0.25… 0.25… 0.25… 2.07… 2.06… 2.07… 2.07… 2.06… 2.02…
## 10 <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 11 <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 12 <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 13 Muestra sin cura… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
## 14 1                 0,48… 0.24… 0.24… 0.24… 2.00… 2.00… 2.00… 2.00… 2.00… <NA> 
## 15 2                 0,49… 0.25… 0.25… 0.25… 2.01… 2.01… 2.01… 2.01… 2.01… <NA>

# Mostrar todas las filas para identificar los encabezados de cada sección
print(datos_originales, n = 124)
## # A tibble: 124 × 11
##     ...1             ...2  ...3  ...4  ...5  ...6  ...7  ...8  ...9  ...10 ...11
##     <chr>            <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
##   1 Muestra curada … Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##   2 1                0,49… 0.25… 0.25… 0.25… 2.08… 2.08… 2.08… 2.08… 2.07… 2.55…
##   3 2                0,48… 0.25… 0.25… 0.25… 2.08… 2.09… 2.08… 2.08… 2.08… 2.71…
##   4 3                0,50… 0.25… 0.25… 0.25… 2.07… 2.05… 2.07… 2.07… 2.06… 1.98…
##   5 4                0,48… 0.25… 0.25… 0.25… 2.06… 2.06… 2.06… 2.06… 2.05… 1.44…
##   6 5                0,48… 0.24… 0.24… 0.249 2.05… 2.05… 2.05… 2.05… 2.04… 1.02…
##   7 6                0,49… 0.25… 0.25… 0.25… 2.04… 2.06… 2.05… 2.05… 2.05… 1.19…
##   8 7                0,49… 0.25… 0.255 0.25… 2.05… 2.05… 2.06… 2.05… 2.05… 1.29…
##   9 8                0,48… 0.25… 0.25… 0.25… 2.07… 2.06… 2.07… 2.07… 2.06… 2.02…
##  10 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  11 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  12 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  13 Muestra sin cur… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  14 1                0,48… 0.24… 0.24… 0.24… 2.00… 2.00… 2.00… 2.00… 2.00… <NA> 
##  15 2                0,49… 0.25… 0.25… 0.25… 2.01… 2.01… 2.01… 2.01… 2.01… <NA> 
##  16 3                0,49… 0.25… 0.25… 0.25… 2.02… 2.02… 2.02… 2.02… 2.01… <NA> 
##  17 4                0,48… 0.25… 0.25… 0.25… 2.06… 2.05… 2.06… 2.06… 2.05… <NA> 
##  18 5                0,48… 0.24… 0.24… 0.24… 2.01… 2.01… 2.02… 2.01… 2.01… <NA> 
##  19 6                0,48… 0.25… 0.25… 0.25… 2.06… 2.06… 2.06… 2.06… 2.06… <NA> 
##  20 7                0,49… 0.25… 0.25… 0.25… 2.04… 2.04… 2.04… 2.04… 2.04… <NA> 
##  21 8                0,50… 0.25… 0.25… 0.25… 2.02… 2.01… 2.01… 2.01… 2.00… <NA> 
##  22 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  23 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  24 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  Prom… 2.02… <NA> 
##  25 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  26 Muestra curada … Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  27 1                0,49… 0.24… 0.24… 0.24… 1.95… 1.94… 1.96… 1.95… 1.95… 0.49…
##  28 2                0,49… 0.24… 0.24… 0.24… 1.95… 1.96… 1.96… 1.96… 1.95… 0.61…
##  29 3                0,50… 0.24… 0.24… 0.24… 1.96… 1.96… 1.95… 1.96… 1.95… 0.72…
##  30 4                0,49… 0.24… 0.24… 0.24… 1.95… 1.96… 1.95… 1.95… 1.95… 0.52…
##  31 5                0,49… 0.23… 0.23… 0.23… 1.94… 1.95… 1.95… 1.95… 1.94… 8.48…
##  32 6                0,49… 0.24… 0.24… 0.24… 1.97… 1.98… 1.99… 1.98… 1.98… 1.81…
##  33 7                0,49… 0.24… 0.24… 0.24… 1.98… 1.98… 1.98… 1.98… 1.98… 1.89…
##  34 8                0,48… 0.23… 0.23… 0.23… 1.97… 1.97… 1.96… 1.97… 1.96… 1.09…
##  35 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  36 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  37 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  38 Muestra sin cur… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  39 1                0,49… 0.23… 0.23… 0.24… 1.94… 1.94… 1.94… 1.94… 1.94… <NA> 
##  40 2                0,49… 0.23… 0.23… 0.23… 1.94… 1.94… 1.93… 1.94… 1.93… <NA> 
##  41 3                0,49… 0.23… 0.24… 0.23… 1.95… 2.03… 1.95… 1.98… 1.97… <NA> 
##  42 4                0,49… 0.23… 0.23… 0.23… 1.94… 1.94… 1.94… 1.94… 1.94… <NA> 
##  43 5                0,49… 0.24… 0.24… 0.24… 1.95… 1.96… 1.95… 1.95… 1.95… <NA> 
##  44 6                0,48… 0.23… 0.23… 0.23… 1.95… 1.93… 1.94… 1.94… 1.93… <NA> 
##  45 7                0,49… 0.24… 0.24… 0.24… 1.94… 1.94… 1.95… 1.94… 1.94… <NA> 
##  46 8                0,49… 0.24… 0.23… 0.23… 1.93… 1.92… 1.92… 1.92… 1.92… <NA> 
##  47 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  48 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  49 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  Prom… 1.94… <NA> 
##  50 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  51 Muestra curada … Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  52 1                0,48… 0.24… 0.24… 0.24… 1.98… 1.98… 1.99… 1.98… 1.98… 2.83…
##  53 2                0,49… 0.24… 0.24… 0.24… 1.97… 1.96… 1.97… 1.97… 1.96… 1.93…
##  54 3                0,47… 0.23… 0.23… 0.23… 1.98… 1.98… 1.99… 1.98… 1.98… 2.77…
##  55 4                0,48… 0.24… 0.24… 0.24… 1.99… 1.98… 1.99… 1.99… 1.98… 2.93…
##  56 5                0,48… 0.24… 0.24… 0.24… 1.97… 1.98… 1.98… 1.98… 1.97… 2.61…
##  57 6                0,47… 0.24… 0.24… 0.24… 2.01… 2.01… 2.00… 2.01… 2.00… 3.91…
##  58 7                0,48… 0.24… 0.24… 0.24… 2.02… 2.02… 2.02… 2.02… 2.02… 4.57…
##  59 8                0,47… 0.24… 0.24… 0.24… 2.02… 2.03… 2.02… 2.02… 2.02… 4.68…
##  60 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  61 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  62 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  63 Muestra sin cur… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  64 1                0,50… 0.24… 0.24… 0.24… 1.94… 1.94… 1.94… 1.94… 1.93… <NA> 
##  65 2                0,49… 0.24… 0.24… 0.24… 1.95… 1.96… 1.96… 1.96… 1.95… <NA> 
##  66 3                0,50… 0.24… 0.24… 0.24… 1.96… 1.96… 1.96… 1.96… 1.95… <NA> 
##  67 4                0,49… 0.24… 0.24… 0.24… 2.01… 2.01… 2.00… 2.01… 2.00… <NA> 
##  68 5                0,50… 0.23… 0.23… 0.23… 1.89… 1.88… 1.89… 1.88… 1.88… <NA> 
##  69 6                0,49… 0.23… 0.23… 0.23… 1.90… 1.90… 1.90… 1.90… 1.90… <NA> 
##  70 7                0,50… 0.23… 0.23… 0.23… 1.86… 1.88… 1.87… 1.87… 1.87… <NA> 
##  71 8                0,49… 0.23… 0.23… 0.23… 1.90… 1.91… 1.90… 1.90… 1.90… <NA> 
##  72 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  73 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  74 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  Prom… 1.92… <NA> 
##  75 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  76 Muestra curada … Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  77 1                0,47… 0.24… 0.245 0.24… 2.05… 2.06… 2.07… 2.06… 2.05… 3.05…
##  78 2                0,46… 0.23… 0.23… 0.23… 2.02… 2.01… 2.01… 2.02… 2.01… 1.01…
##  79 3                0,48… 0.245 0.24… 0.24… 2.02… 2.02… 2.02… 2.02… 2.01… 1.18…
##  80 4                0,48… 0.248 0.247 0.24… 2.04… 2.03… 2.05… 2.04… 2.04… 2.21…
##  81 5                0,47… 0.23… 0.24… 0.23… 2.02… 2.07… 1.98… 2.02… 2.02… 1.32…
##  82 6                0,47… 0.23… 0.24  0.23… 1.99… 2.03… 2.02… 2.01… 2.01… 0.83…
##  83 7                0,46… 0.23… 0.24… 0.23… 1.99… 2.07… 2.03… 2.03… 2.02… 1.55…
##  84 8                0,48… 0.24… 0.245 0.248 2.00… 2.02… 2.04… 2.02… 2.02… 1.32…
##  85 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  86 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  87 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  88 Muestra sin cur… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  89 1                0,48… 0.22… 0.22… 0.23… 1.89… 1.90… 1.90… 1.90… 1.89… <NA> 
##  90 2                0,50… 0.249 0.248 0.24… 1.97… 1.96… 1.96… 1.96… 1.96… <NA> 
##  91 3                0,49… 0.24… 0.24… 0.24… 1.95… 1.95… 1.94… 1.95… 1.94… <NA> 
##  92 4                0,49… 0.25… 0.25… 0.252 2.03… 2.03… 2.03… 2.03… 2.02… <NA> 
##  93 5                0,48… 0.24… 0.25… 0.25… 2.05… 2.06… 2.06… 2.06… 2.05… <NA> 
##  94 6                0,48… 0.24… 0.25… 0.25… 2.06… 2.07… 2.15… 2.09… 2.08… <NA> 
##  95 7                0,49… 0.24… 0.246 0.24… 1.96… 1.97… 1.98… 1.97… 1.96… <NA> 
##  96 8                0,50… 0.254 0.25… 0.25… 2.00… 2.01… 2.01… 2.01… 2.00… <NA> 
##  97 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  98 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  99 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  Prom… 1.99… <NA> 
## 100 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 101 Muestra curada … Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
## 102 1                0,48… 0.24… 0.24… 0.24… 1.97… 1.97… 1.97… 1.97… 1.97… 3.37…
## 103 2                0,48… 0.23… 0.23… 0.23… 1.95… 1.94… 1.95… 1.95… 1.94… 2.05…
## 104 3                0,48… 0.23… 0.23… 0.23… 1.93… 1.94… 1.94… 1.94… 1.93… 1.70…
## 105 4                0,48… 0.23… 0.23… 0.23… 1.95… 1.94… 1.94… 1.94… 1.94… 1.97…
## 106 5                0,50… 0.24… 0.24… 0.24… 1.95… 1.95… 1.96… 1.95… 1.95… 2.37…
## 107 6                0,48… 0.23… 0.23… 0.23… 1.94… 1.95… 1.94… 1.94… 1.94… 2.00…
## 108 7                0,49… 0.23… 0.23… 0.23… 1.94… 1.94… 1.94… 1.94… 1.93… 1.77…
## 109 8                0,48… 0.23… 0.23… 0.23… 1.95… 1.94… 1.95… 1.95… 1.94… 2.07…
## 110 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 111 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 112 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 113 Muestra sin cur… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
## 114 1                0,48… 0.23… 0.22… 0.22… 1.91… 1.90… 1.90… 1.90… 1.90… <NA> 
## 115 2                0,49… 0.23… 0.23… 0.23… 1.92… 1.91… 1.92… 1.92… 1.91… <NA> 
## 116 3                0,48… 0.23… 0.23… 0.23… 1.91… 1.91… 1.92… 1.91… 1.91… <NA> 
## 117 4                0,50… 0.23… 0.23… 0.23… 1.87… 1.87… 1.86… 1.87… 1.86… <NA> 
## 118 5                0,50… 0.24… 0.24… 0.24… 1.93… 1.93… 1.92… 1.93… 1.92… <NA> 
## 119 6                0,49… 0.23… 0.23… 0.23… 1.88… 1.90… 1.90… 1.89… 1.89… <NA> 
## 120 7                0,48… 0.23… 0.23… 0.23… 1.90… 1.91… 1.90… 1.90… 1.90… <NA> 
## 121 8                0,49… 0.23… 0.23… 0.23… 1.92… 1.91… 1.93… 1.92… 1.91… <NA> 
## 122 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 123 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 124 <NA>             <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  Prom… 1.90… <NA>
# Mostrar la estructura general
str(datos_originales)
## tibble [124 × 11] (S3: tbl_df/tbl/data.frame)
##  $ ...1 : chr [1:124] "Muestra curada Transcend" "1" "2" "3" ...
##  $ ...2 : chr [1:124] "Masa de resina curada" "0,4980" "0,4833" "0,5006" ...
##  $ ...3 : chr [1:124] "b1" "0.25929999999999997" "0.25180000000000002" "0.25990000000000002" ...
##  $ ...4 : chr [1:124] "b2" "0.2586" "0.25230000000000002" "0.25750000000000001" ...
##  $ ...5 : chr [1:124] "b3" "0.25950000000000001" "0.2515" "0.25979999999999998" ...
##  $ ...6 : chr [1:124] "GE1" "2.0863007959782149" "2.0876889848812095" "2.0797673452430412" ...
##  $ ...7 : chr [1:124] "GE2" "2.0802005012531328" "2.0922077922077924" "2.0592348827642946" ...
##  $ ...8 : chr [1:124] "GE3" "2.0880503144654088" "2.0849870578084557" "2.0789036544850492" ...
##  $ ...9 : chr [1:124] "SG PROMEDIO" "2.0848505372322523" "2.0882946116324859" "2.0726352941641282" ...
##  $ ...10: chr [1:124] "DENSIDAD (g/cm3)" "2.0797218049106609" "2.08315740688787" "2.0675366113404845" ...
##  $ ...11: chr [1:124] "% de Contracción" "2.555022105610516" "2.7157311128204964" "1.9807222786706435" ...
# Mostrar las primeras 15 filas
head(datos_originales, 15)
## # A tibble: 15 × 11
##    ...1              ...2  ...3  ...4  ...5  ...6  ...7  ...8  ...9  ...10 ...11
##    <chr>             <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
##  1 Muestra curada T… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  2 1                 0,49… 0.25… 0.25… 0.25… 2.08… 2.08… 2.08… 2.08… 2.07… 2.55…
##  3 2                 0,48… 0.25… 0.25… 0.25… 2.08… 2.09… 2.08… 2.08… 2.08… 2.71…
##  4 3                 0,50… 0.25… 0.25… 0.25… 2.07… 2.05… 2.07… 2.07… 2.06… 1.98…
##  5 4                 0,48… 0.25… 0.25… 0.25… 2.06… 2.06… 2.06… 2.06… 2.05… 1.44…
##  6 5                 0,48… 0.24… 0.24… 0.249 2.05… 2.05… 2.05… 2.05… 2.04… 1.02…
##  7 6                 0,49… 0.25… 0.25… 0.25… 2.04… 2.06… 2.05… 2.05… 2.05… 1.19…
##  8 7                 0,49… 0.25… 0.255 0.25… 2.05… 2.05… 2.06… 2.05… 2.05… 1.29…
##  9 8                 0,48… 0.25… 0.25… 0.25… 2.07… 2.06… 2.07… 2.07… 2.06… 2.02…
## 10 <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 11 <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 12 <NA>              <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
## 13 Muestra sin cura… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
## 14 1                 0,48… 0.24… 0.24… 0.24… 2.00… 2.00… 2.00… 2.00… 2.00… <NA> 
## 15 2                 0,49… 0.25… 0.25… 0.25… 2.01… 2.01… 2.01… 2.01… 2.01… <NA>

##Identificar las secciones del Excel

# Mostrar las filas que contienen los encabezados de las secciones
datos_originales %>%
  mutate(
    fila_excel = row_number(),
    encabezado = as.character(...1)
  ) %>%
  filter(
    str_detect(
      encabezado,
      regex("^Muestra", ignore_case = TRUE)
    )
  ) %>%
  select(fila_excel, encabezado) %>%
  kable(
    caption = "Secciones identificadas en la hoja original"
  )
Secciones identificadas en la hoja original
fila_excel encabezado
1 Muestra curada Transcend
13 Muestra sin curar Transcend
26 Muestra curada EASYMATCH
38 Muestra sin curar EASYMATCH
51 Muestra curada SIMPLISHADE
63 Muestra sin curar SIMPLISHADE
76 Muestra curada VITTRA
88 Muestra sin curar VITTRA
101 Muestra curada Z350XT
113 Muestra sin curar Z350XT

##Comprobar la estructura de las mediciones

# Mostrar las primeras filas de cada sección
datos_originales %>%
  mutate(
    fila_excel = row_number(),
    encabezado = as.character(...1)
  ) %>%
  filter(
    !is.na(encabezado),
    str_detect(
      encabezado,
      regex(
        "^Muestra|^Masa|^b1$|^b2$|^b3$|^GE1$|^GE2$|^GE3$|^SG PROMEDIO|^DENSIDAD|^% de Contracción",
        ignore_case = TRUE
      )
    )
  ) %>%
  select(fila_excel, everything()) %>%
  print(n = Inf)
## # A tibble: 10 × 13
##    fila_excel ...1   ...2  ...3  ...4  ...5  ...6  ...7  ...8  ...9  ...10 ...11
##         <int> <chr>  <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
##  1          1 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  2         13 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  3         26 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  4         38 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  5         51 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  6         63 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  7         76 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  8         88 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
##  9        101 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
## 10        113 Muest… Masa… b1    b2    b3    GE1   GE2   GE3   SG P… DENS… % de…
## # ℹ 1 more variable: encabezado <chr>

library(dplyr)
library(stringr)
library(readr)
library(tidyr)
library(knitr)

# Identificar las filas que inician cada sección
encabezados <- datos_originales %>%
  mutate(
    fila_excel = row_number(),
    texto = as.character(...1)
  ) %>%
  filter(
    str_detect(texto, regex("^Muestra", ignore_case = TRUE))
  ) %>%
  select(fila_excel, texto)

print(encabezados, n = Inf)
## # A tibble: 10 × 2
##    fila_excel texto                        
##         <int> <chr>                        
##  1          1 Muestra curada Transcend     
##  2         13 Muestra sin curar Transcend  
##  3         26 Muestra curada EASYMATCH     
##  4         38 Muestra sin curar  EASYMATCH 
##  5         51 Muestra curada SIMPLISHADE   
##  6         63 Muestra sin curar SIMPLISHADE
##  7         76 Muestra curada VITTRA        
##  8         88 Muestra sin curar VITTRA     
##  9        101 Muestra curada   Z350XT      
## 10        113 Muestra sin curar  Z350XT
# Función para identificar la resina y el estado
identificar_resina <- function(texto) {
  case_when(
    str_detect(texto, regex("Transcend", TRUE)) ~ "Transcend",
    str_detect(texto, regex("EasyMatch", TRUE)) ~ "EasyMatch",
    str_detect(texto, regex("SimpliShade", TRUE)) ~ "SimpliShade",
    str_detect(texto, regex("Vittra", TRUE)) ~ "Vittra",
    str_detect(texto, regex("Z350", TRUE)) ~ "Filtek Z350 XT",
    TRUE ~ NA_character_
  )
}

identificar_estado <- function(texto) {
  case_when(
    str_detect(texto, regex("^Muestra curada", TRUE)) ~ "Curada",
    str_detect(texto, regex("^Muestra sin curar", TRUE)) ~ "Sin curar",
    TRUE ~ NA_character_
  )
}

# Extraer las observaciones de cada bloque
lista_bloques <- vector("list", nrow(encabezados))

for (i in seq_len(nrow(encabezados))) {

  inicio <- encabezados$fila_excel[i]

  fin <- if (i < nrow(encabezados)) {
    encabezados$fila_excel[i + 1] - 1
  } else {
    nrow(datos_originales)
  }

  bloque <- datos_originales[
    (inicio + 1):fin,
    ,
    drop = FALSE
  ]

  # La primera columna contiene los números de muestra
  numero <- suppressWarnings(
    parse_number(as.character(bloque[[1]]))
  )

  # Conservar únicamente filas con número de muestra
  valido <- !is.na(numero)

  if (!any(valido)) next

  bloque <- bloque[valido, , drop = FALSE]
  numero <- numero[valido]

  # Conversión de coma decimal y punto decimal
  convertir_numero <- function(x) {
    parse_number(
      as.character(x),
      locale = locale(decimal_mark = ".", grouping_mark = ",")
    )
  }

  # La masa de resina puede estar registrada con coma decimal
  masa <- convertir_numero(
    str_replace(as.character(bloque[[2]]), ",", ".")
  )

  lista_bloques[[i]] <- tibble(
    resina = identificar_resina(encabezados$texto[i]),
    estado = identificar_estado(encabezados$texto[i]),
    muestra = numero,
    masa = masa,
    b1 = convertir_numero(bloque[[3]]),
    b2 = convertir_numero(bloque[[4]]),
    b3 = convertir_numero(bloque[[5]]),
    GE1 = convertir_numero(bloque[[6]]),
    GE2 = convertir_numero(bloque[[7]]),
    GE3 = convertir_numero(bloque[[8]]),
    SG_promedio = convertir_numero(bloque[[9]]),
    densidad = convertir_numero(bloque[[10]]),
    contraccion_excel = convertir_numero(bloque[[11]])
  )
}

datos_limpios <- bind_rows(lista_bloques) %>%
  filter(!is.na(resina), !is.na(estado)) %>%
  mutate(
    resina = factor(
      resina,
      levels = c(
        "Transcend",
        "EasyMatch",
        "SimpliShade",
        "Vittra",
        "Filtek Z350 XT"
      )
    ),
    estado = factor(
      estado,
      levels = c("Sin curar", "Curada")
    )
  )

# Resumen de observaciones extraídas
datos_limpios %>%
  count(resina, estado) %>%
  pivot_wider(
    names_from = estado,
    values_from = n,
    values_fill = 0
  ) %>%
  kable(
    caption = "Número de muestras por resina y estado"
  )
Número de muestras por resina y estado
resina Sin curar Curada
Transcend 8 8
EasyMatch 8 8
SimpliShade 8 8
Vittra 8 8
Filtek Z350 XT 8 8

##control de calidad de los datos

library(dplyr)
library(tidyr)
library(knitr)

# Revisar la estructura de la base
str(datos_limpios)
## tibble [80 × 13] (S3: tbl_df/tbl/data.frame)
##  $ resina           : Factor w/ 5 levels "Transcend","EasyMatch",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ estado           : Factor w/ 2 levels "Sin curar","Curada": 2 2 2 2 2 2 2 2 1 1 ...
##  $ muestra          : num [1:80] 1 2 3 4 5 6 7 8 1 2 ...
##  $ masa             : num [1:80] 0.498 0.483 0.501 0.489 0.485 ...
##  $ b1               : num [1:80] 0.259 0.252 0.26 0.252 0.248 ...
##  $ b2               : num [1:80] 0.259 0.252 0.258 0.252 0.249 ...
##  $ b3               : num [1:80] 0.26 0.252 0.26 0.252 0.249 ...
##  $ GE1              : num [1:80] 2.09 2.09 2.08 2.06 2.05 ...
##  $ GE2              : num [1:80] 2.08 2.09 2.06 2.06 2.05 ...
##  $ GE3              : num [1:80] 2.09 2.08 2.08 2.06 2.06 ...
##  $ SG_promedio      : num [1:80] 2.08 2.09 2.07 2.06 2.05 ...
##  $ densidad         : num [1:80] 2.08 2.08 2.07 2.06 2.05 ...
##  $ contraccion_excel: num [1:80] 2.56 2.72 1.98 1.44 1.03 ...
# Resumen de datos faltantes
faltantes <- datos_limpios %>%
  summarise(
    across(
      everything(),
      ~ sum(is.na(.)),
      .names = "NA_{.col}"
    )
  ) %>%
  pivot_longer(
    cols = everything(),
    names_to = "Variable",
    values_to = "Datos_faltantes"
  )

kable(
  faltantes,
  caption = "Control de datos faltantes por variable"
)
Control de datos faltantes por variable
Variable Datos_faltantes
NA_resina 0
NA_estado 0
NA_muestra 0
NA_masa 0
NA_b1 0
NA_b2 0
NA_b3 0
NA_GE1 0
NA_GE2 0
NA_GE3 0
NA_SG_promedio 0
NA_densidad 0
NA_contraccion_excel 40
# Estadísticos descriptivos de las variables numéricas
resumen_numerico <- datos_limpios %>%
  summarise(
    across(
      where(is.numeric),
      list(
        n = ~ sum(!is.na(.)),
        media = ~ mean(., na.rm = TRUE),
        desviacion = ~ sd(., na.rm = TRUE),
        minimo = ~ min(., na.rm = TRUE),
        maximo = ~ max(., na.rm = TRUE)
      ),
      .names = "{.col}_{.fn}"
    )
  )

kable(
  resumen_numerico,
  digits = 4,
  caption = "Resumen descriptivo de las variables numéricas"
)
Resumen descriptivo de las variables numéricas
muestra_n muestra_media muestra_desviacion muestra_minimo muestra_maximo masa_n masa_media masa_desviacion masa_minimo masa_maximo b1_n b1_media b1_desviacion b1_minimo b1_maximo b2_n b2_media b2_desviacion b2_minimo b2_maximo b3_n b3_media b3_desviacion b3_minimo b3_maximo GE1_n GE1_media GE1_desviacion GE1_minimo GE1_maximo GE2_n GE2_media GE2_desviacion GE2_minimo GE2_maximo GE3_n GE3_media GE3_desviacion GE3_minimo GE3_maximo SG_promedio_n SG_promedio_media SG_promedio_desviacion SG_promedio_minimo SG_promedio_maximo densidad_n densidad_media densidad_desviacion densidad_minimo densidad_maximo contraccion_excel_n contraccion_excel_media contraccion_excel_desviacion contraccion_excel_minimo contraccion_excel_maximo
80 4.5 2.306 1 8 80 0.4907 0.0089 0.4678 0.5074 80 0.2428 0.007 0.229 0.2599 80 0.2432 0.0068 0.2297 0.2586 80 0.2433 0.0072 0.2294 0.2598 80 1.982 0.0544 1.865 2.088 80 1.985 0.0556 1.874 2.092 80 1.986 0.0578 1.869 2.15 80 1.984 0.0552 1.871 2.095 80 1.979 0.055 1.867 2.089 40 1.94 1.051 0.0848 4.684

##datos faltantes y validación de las mediciones

#Verificar datos faltantes
faltantes <- datos_limpios %>%
  summarise(
    across(
      everything(),
      ~ sum(is.na(.)),
      .names = "{.col}"
    )
  ) %>%
  pivot_longer(
    cols = everything(),
    names_to = "Variable",
    values_to = "Datos_faltantes"
  )

knitr::kable(
  faltantes,
  caption = "Número de datos faltantes por variable"
)
Número de datos faltantes por variable
Variable Datos_faltantes
resina 0
estado 0
muestra 0
masa 0
b1 0
b2 0
b3 0
GE1 0
GE2 0
GE3 0
SG_promedio 0
densidad 0
contraccion_excel 40
# 2. Resumen descriptivo por resina y estado
resumen_estado <- datos_limpios %>%
  group_by(resina, estado) %>%
  summarise(
    n = n(),
    masa_media = mean(masa, na.rm = TRUE),
    SG_media = mean(SG_promedio, na.rm = TRUE),
    densidad_media = mean(densidad, na.rm = TRUE),
    contraccion_media = mean(contraccion_excel, na.rm = TRUE),
    contraccion_sd = sd(contraccion_excel, na.rm = TRUE),
    contraccion_min = min(contraccion_excel, na.rm = TRUE),
    contraccion_max = max(contraccion_excel, na.rm = TRUE),
    .groups = "drop"
  )
## Warning: There were 10 warnings in `summarise()`.
## The first warning was:
## ℹ In argument: `contraccion_min = min(contraccion_excel, na.rm = TRUE)`.
## ℹ In group 1: `resina = Transcend` and `estado = Sin curar`.
## Caused by warning in `min()`:
## ! ningún argumento finito para min; retornando Inf
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 9 remaining warnings.
knitr::kable(
  resumen_estado,
  digits = 4,
  caption = "Resumen descriptivo por resina y estado de curado"
)
Resumen descriptivo por resina y estado de curado
resina estado n masa_media SG_media densidad_media contraccion_media contraccion_sd contraccion_min contraccion_max
Transcend Sin curar 8 0.4937 2.032 2.027 NaN NA Inf -Inf
Transcend Curada 8 0.4915 2.068 2.063 1.7796 0.6373 1.0256 2.716
EasyMatch Sin curar 8 0.4930 1.949 1.944 NaN NA Inf -Inf
EasyMatch Curada 8 0.4937 1.967 1.962 0.9071 0.6495 0.0848 1.897
SimpliShade Sin curar 8 0.4995 1.932 1.928 NaN NA Inf -Inf
SimpliShade Curada 8 0.4831 1.998 1.993 3.2829 0.9913 1.9346 4.684
Vittra Sin curar 8 0.4949 2.000 1.995 NaN NA Inf -Inf
Vittra Curada 8 0.4761 2.032 2.027 1.5640 0.7314 0.8308 3.057
Filtek Z350 XT Sin curar 8 0.4927 1.910 1.905 NaN NA Inf -Inf
Filtek Z350 XT Curada 8 0.4883 1.952 1.948 2.1680 0.5298 1.7082 3.380

# Revisar los valores de contracción por estado y resina
datos_limpios %>%
  group_by(resina, estado) %>%
  summarise(
    n_total = n(),
    n_contraccion_valida = sum(is.finite(contraccion_excel)),
    n_faltantes = sum(!is.finite(contraccion_excel)),
    valores_contraccion = paste(
      round(contraccion_excel, 4),
      collapse = ", "
    ),
    .groups = "drop"
  ) %>%
  knitr::kable(
    caption = "Verificación de los valores de contracción por resina y estado"
  )
Verificación de los valores de contracción por resina y estado
resina estado n_total n_contraccion_valida n_faltantes valores_contraccion
Transcend Sin curar 8 0 8 NA, NA, NA, NA, NA, NA, NA, NA
Transcend Curada 8 8 0 2.555, 2.7157, 1.9807, 1.445, 1.0256, 1.1921, 1.2927, 2.0297
EasyMatch Sin curar 8 0 8 NA, NA, NA, NA, NA, NA, NA, NA
EasyMatch Curada 8 8 0 0.5, 0.6155, 0.7232, 0.5252, 0.0848, 1.819, 1.8974, 1.0914
SimpliShade Sin curar 8 0 8 NA, NA, NA, NA, NA, NA, NA, NA
SimpliShade Curada 8 8 0 2.8334, 1.9346, 2.7763, 2.9338, 2.611, 3.9171, 4.5722, 4.6845
Vittra Sin curar 8 0 8 NA, NA, NA, NA, NA, NA, NA, NA
Vittra Curada 8 8 0 3.0567, 1.0131, 1.1872, 2.2132, 1.3248, 0.8308, 1.5569, 1.3294
Filtek Z350 XT Sin curar 8 0 8 NA, NA, NA, NA, NA, NA, NA, NA
Filtek Z350 XT Curada 8 8 0 3.3797, 2.0531, 1.7082, 1.9763, 2.3738, 2.0041, 1.7708, 2.0781
# Inspeccionar las columnas originales de las muestras sin curar
datos_limpios %>%
  filter(estado == "Sin curar") %>%
  select(
    resina, muestra, masa,
    b1, b2, b3,
    GE1, GE2, GE3,
    SG_promedio, densidad,
    contraccion_excel
  ) %>%
  knitr::kable(
    digits = 4,
    caption = "Datos originales de las muestras sin curar"
  )
Datos originales de las muestras sin curar
resina muestra masa b1 b2 b3 GE1 GE2 GE3 SG_promedio densidad contraccion_excel
Transcend 1 0.4860 0.2438 0.2442 0.2441 2.007 2.010 2.009 2.009 2.004 NA
Transcend 2 0.4999 0.2516 0.2523 0.2518 2.013 2.019 2.015 2.016 2.011 NA
Transcend 3 0.4995 0.2526 0.2531 0.2523 2.023 2.027 2.021 2.024 2.019 NA
Transcend 4 0.4887 0.2519 0.2509 0.2523 2.064 2.055 2.067 2.062 2.057 NA
Transcend 5 0.4870 0.2455 0.2454 0.2461 2.017 2.016 2.022 2.018 2.013 NA
Transcend 6 0.4875 0.2517 0.2511 0.2515 2.067 2.062 2.066 2.065 2.060 NA
Transcend 7 0.4951 0.2529 0.2531 0.2532 2.044 2.046 2.047 2.046 2.041 NA
Transcend 8 0.5062 0.2557 0.2544 0.2545 2.021 2.010 2.011 2.014 2.009 NA
EasyMatch 1 0.4930 0.2396 0.2399 0.2401 1.946 1.948 1.949 1.948 1.943 NA
EasyMatch 2 0.4918 0.2384 0.2390 0.2377 1.941 1.945 1.935 1.941 1.936 NA
EasyMatch 3 0.4900 0.2392 0.2498 0.2393 1.954 2.040 1.954 1.983 1.978 NA
EasyMatch 4 0.4916 0.2388 0.2386 0.2394 1.945 1.943 1.949 1.946 1.941 NA
EasyMatch 5 0.4957 0.2423 0.2434 0.2424 1.956 1.965 1.957 1.959 1.954 NA
EasyMatch 6 0.4883 0.2379 0.2362 0.2368 1.950 1.937 1.942 1.943 1.938 NA
EasyMatch 7 0.4950 0.2405 0.2403 0.2412 1.945 1.944 1.950 1.946 1.942 NA
EasyMatch 8 0.4982 0.2401 0.2390 0.2393 1.930 1.922 1.924 1.925 1.921 NA
SimpliShade 1 0.5037 0.2447 0.2441 0.2451 1.945 1.940 1.948 1.944 1.940 NA
SimpliShade 2 0.4969 0.2428 0.2437 0.2439 1.956 1.962 1.964 1.961 1.956 NA
SimpliShade 3 0.5074 0.2486 0.2489 0.2491 1.961 1.963 1.964 1.963 1.958 NA
SimpliShade 4 0.4930 0.2478 0.2481 0.2476 2.011 2.013 2.009 2.011 2.006 NA
SimpliShade 5 0.5020 0.2369 0.2353 0.2365 1.894 1.882 1.891 1.889 1.884 NA
SimpliShade 6 0.4957 0.2355 0.2361 0.2358 1.905 1.909 1.907 1.907 1.903 NA
SimpliShade 7 0.5027 0.2331 0.2361 0.2347 1.865 1.886 1.876 1.875 1.871 NA
SimpliShade 8 0.4948 0.2352 0.2364 0.2354 1.906 1.915 1.907 1.909 1.905 NA
Vittra 1 0.4837 0.2290 0.2297 0.2303 1.899 1.904 1.909 1.904 1.899 NA
Vittra 2 0.5054 0.2490 0.2480 0.2488 1.971 1.964 1.970 1.968 1.963 NA
Vittra 3 0.4982 0.2429 0.2439 0.2420 1.951 1.959 1.945 1.952 1.947 NA
Vittra 4 0.4960 0.2524 0.2519 0.2520 2.036 2.032 2.033 2.034 2.029 NA
Vittra 5 0.4856 0.2498 0.2504 0.2505 2.059 2.065 2.066 2.063 2.058 NA
Vittra 6 0.4840 0.2494 0.2502 0.2589 2.063 2.070 2.150 2.095 2.089 NA
Vittra 7 0.4992 0.2455 0.2460 0.2471 1.968 1.972 1.980 1.973 1.968 NA
Vittra 8 0.5073 0.2540 0.2561 0.2561 2.003 2.019 2.019 2.014 2.009 NA
Filtek Z350 XT 1 0.4834 0.2308 0.2299 0.2294 1.914 1.907 1.903 1.908 1.903 NA
Filtek Z350 XT 2 0.4921 0.2365 0.2354 0.2363 1.925 1.917 1.924 1.922 1.917 NA
Filtek Z350 XT 3 0.4843 0.2309 0.2317 0.2321 1.911 1.917 1.920 1.916 1.911 NA
Filtek Z350 XT 4 0.5007 0.2332 0.2335 0.2328 1.872 1.874 1.869 1.871 1.867 NA
Filtek Z350 XT 5 0.5018 0.2421 0.2424 0.2417 1.932 1.935 1.929 1.932 1.927 NA
Filtek Z350 XT 6 0.4952 0.2330 0.2350 0.2353 1.889 1.903 1.905 1.899 1.894 NA
Filtek Z350 XT 7 0.4872 0.2319 0.2323 0.2315 1.908 1.911 1.905 1.908 1.904 NA
Filtek Z350 XT 8 0.4970 0.2388 0.2374 0.2395 1.925 1.915 1.930 1.923 1.918 NA

# Comparar las densidades de cada resina y estado
datos_limpios %>%
  group_by(resina, estado) %>%
  summarise(
    n = n(),
    densidad_min = min(densidad, na.rm = TRUE),
    densidad_media = mean(densidad, na.rm = TRUE),
    densidad_max = max(densidad, na.rm = TRUE),
    SG_media = mean(SG_promedio, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  knitr::kable(
    digits = 4,
    caption = "Densidades por resina y estado de curado"
  )
Densidades por resina y estado de curado
resina estado n densidad_min densidad_media densidad_max SG_media
Transcend Sin curar 8 2.004 2.027 2.060 2.032
Transcend Curada 8 2.048 2.063 2.083 2.068
EasyMatch Sin curar 8 1.921 1.944 1.978 1.949
EasyMatch Curada 8 1.946 1.962 1.982 1.967
SimpliShade Sin curar 8 1.871 1.928 2.006 1.932
SimpliShade Curada 8 1.966 1.993 2.022 1.998
Vittra Sin curar 8 1.899 1.995 2.089 2.000
Vittra Curada 8 2.012 2.027 2.058 2.032
Filtek Z350 XT Sin curar 8 1.867 1.905 1.927 1.910
Filtek Z350 XT Curada 8 1.938 1.948 1.972 1.952

##validar la fórmula de contracción en R

# Organizar las densidades por número de muestra
densidades_pareadas <- datos_limpios %>%
  select(resina, estado, muestra, densidad) %>%
  pivot_wider(
    names_from = estado,
    values_from = densidad
  ) %>%
  mutate(
    contraccion_recalculada =
      (1 - `Sin curar` / Curada) * 100
  )

# Mostrar los resultados por muestra
knitr::kable(
  densidades_pareadas,
  digits = 4,
  caption = "Contracción recalculada a partir de densidades emparejadas"
)
Contracción recalculada a partir de densidades emparejadas
resina muestra Curada Sin curar contraccion_recalculada
Transcend 1 2.080 2.004 3.6601
Transcend 2 2.083 2.011 3.4749
Transcend 3 2.067 2.019 2.3641
Transcend 4 2.056 2.057 -0.0325
Transcend 5 2.048 2.013 1.6893
Transcend 6 2.051 2.060 -0.4379
Transcend 7 2.053 2.041 0.6123
Transcend 8 2.069 2.009 2.8742
EasyMatch 1 1.954 1.943 0.5624
EasyMatch 2 1.956 1.936 1.0365
EasyMatch 3 1.958 1.978 -1.0054
EasyMatch 4 1.954 1.941 0.6867
EasyMatch 5 1.946 1.954 -0.4526
EasyMatch 6 1.980 1.938 2.1192
EasyMatch 7 1.982 1.942 2.0255
EasyMatch 8 1.966 1.921 2.2725
SimpliShade 1 1.984 1.940 2.2366
SimpliShade 2 1.966 1.956 0.5007
SimpliShade 3 1.983 1.958 1.2575
SimpliShade 4 1.986 2.006 -1.0070
SimpliShade 5 1.979 1.884 4.8051
SimpliShade 6 2.006 1.903 5.1676
SimpliShade 7 2.020 1.871 7.3922
SimpliShade 8 2.022 1.905 5.8177
Vittra 1 2.058 1.899 7.7182
Vittra 2 2.016 1.963 2.6064
Vittra 3 2.019 1.947 3.5865
Vittra 4 2.041 2.029 0.5828
Vittra 5 2.022 2.058 -1.7778
Vittra 6 2.012 2.089 -3.8389
Vittra 7 2.027 1.968 2.8924
Vittra 8 2.022 2.009 0.6559
Filtek Z350 XT 1 1.972 1.903 3.4867
Filtek Z350 XT 2 1.945 1.917 1.4382
Filtek Z350 XT 3 1.938 1.911 1.3880
Filtek Z350 XT 4 1.944 1.867 3.9515
Filtek Z350 XT 5 1.952 1.927 1.2518
Filtek Z350 XT 6 1.944 1.894 2.5679
Filtek Z350 XT 7 1.940 1.904 1.8575
Filtek Z350 XT 8 1.946 1.918 1.4057
# Resumen de la contracción recalculada por resina
resumen_contraccion <- densidades_pareadas %>%
  group_by(resina) %>%
  summarise(
    n = sum(is.finite(contraccion_recalculada)),
    media = mean(contraccion_recalculada, na.rm = TRUE),
    desviacion_estandar = sd(contraccion_recalculada, na.rm = TRUE),
    minimo = min(contraccion_recalculada, na.rm = TRUE),
    maximo = max(contraccion_recalculada, na.rm = TRUE),
    .groups = "drop"
  )

knitr::kable(
  resumen_contraccion,
  digits = 4,
  caption = "Resumen de la contracción recalculada por resina"
)
Resumen de la contracción recalculada por resina
resina n media desviacion_estandar minimo maximo
Transcend 8 1.7756 1.582 -0.4379 3.660
EasyMatch 8 0.9056 1.212 -1.0054 2.272
SimpliShade 8 3.2713 2.940 -1.0070 7.392
Vittra 8 1.5532 3.525 -3.8389 7.718
Filtek Z350 XT 8 2.1684 1.051 1.2518 3.951

##verificar el emparejamiento y los valores individuales

# Identificar las muestras con contracción negativa
muestras_negativas <- densidades_pareadas %>%
  filter(contraccion_recalculada < 0) %>%
  arrange(resina, muestra)

knitr::kable(
  muestras_negativas,
  digits = 4,
  caption = "Muestras con contracción recalculada negativa"
)
Muestras con contracción recalculada negativa
resina muestra Curada Sin curar contraccion_recalculada
Transcend 4 2.056 2.057 -0.0325
Transcend 6 2.051 2.060 -0.4379
EasyMatch 3 1.958 1.978 -1.0054
EasyMatch 5 1.946 1.954 -0.4526
SimpliShade 4 1.986 2.006 -1.0070
Vittra 5 2.022 2.058 -1.7778
Vittra 6 2.012 2.089 -3.8389
# Revisar todos los valores individuales
knitr::kable(
  densidades_pareadas %>%
    arrange(resina, muestra),
  digits = 4,
  caption = "Densidades emparejadas y contracción por muestra"
)
Densidades emparejadas y contracción por muestra
resina muestra Curada Sin curar contraccion_recalculada
Transcend 1 2.080 2.004 3.6601
Transcend 2 2.083 2.011 3.4749
Transcend 3 2.067 2.019 2.3641
Transcend 4 2.056 2.057 -0.0325
Transcend 5 2.048 2.013 1.6893
Transcend 6 2.051 2.060 -0.4379
Transcend 7 2.053 2.041 0.6123
Transcend 8 2.069 2.009 2.8742
EasyMatch 1 1.954 1.943 0.5624
EasyMatch 2 1.956 1.936 1.0365
EasyMatch 3 1.958 1.978 -1.0054
EasyMatch 4 1.954 1.941 0.6867
EasyMatch 5 1.946 1.954 -0.4526
EasyMatch 6 1.980 1.938 2.1192
EasyMatch 7 1.982 1.942 2.0255
EasyMatch 8 1.966 1.921 2.2725
SimpliShade 1 1.984 1.940 2.2366
SimpliShade 2 1.966 1.956 0.5007
SimpliShade 3 1.983 1.958 1.2575
SimpliShade 4 1.986 2.006 -1.0070
SimpliShade 5 1.979 1.884 4.8051
SimpliShade 6 2.006 1.903 5.1676
SimpliShade 7 2.020 1.871 7.3922
SimpliShade 8 2.022 1.905 5.8177
Vittra 1 2.058 1.899 7.7182
Vittra 2 2.016 1.963 2.6064
Vittra 3 2.019 1.947 3.5865
Vittra 4 2.041 2.029 0.5828
Vittra 5 2.022 2.058 -1.7778
Vittra 6 2.012 2.089 -3.8389
Vittra 7 2.027 1.968 2.8924
Vittra 8 2.022 2.009 0.6559
Filtek Z350 XT 1 1.972 1.903 3.4867
Filtek Z350 XT 2 1.945 1.917 1.4382
Filtek Z350 XT 3 1.938 1.911 1.3880
Filtek Z350 XT 4 1.944 1.867 3.9515
Filtek Z350 XT 5 1.952 1.927 1.2518
Filtek Z350 XT 6 1.944 1.894 2.5679
Filtek Z350 XT 7 1.940 1.904 1.8575
Filtek Z350 XT 8 1.946 1.918 1.4057

#Interpretación de los resultados #Resina Contracción media (%) DE Rango (%) #Transcend 1.7756 1.582 −0.4379 a 3.660 #EasyMatch 0.9056 1.212 −1.0054 a 2.272 #SimpliShade 3.2713 2.940 −1.0070 a 7.392 #Vittra 1.5532 3.525 −3.8389 a 7.718 #Filtek Z350 XT 2.1684 1.051 1.2518 a 3.951

#SimpliShade presenta la mayor media y EasyMatch la menor. Vittra presenta la desviación estándar más alta, lo que indica una mayor dispersión de los resultados en esta muestra.

#Los valores negativos significan que, para algunas parejas, la densidad registrada como sin curar fue mayor que la densidad registrada como curada. Esto puede deberse a variación experimental, al emparejamiento de muestras o a la precisión de las mediciones. No se descartan automáticamente.

##verificar las parejas y resumir la contracción

# Verificar que cada pareja tenga ambas densidades
control_parejas <- densidades_pareadas %>%
  group_by(resina) %>%
  summarise(
    n_parejas = n(),
    parejas_completas = sum(
      is.finite(`Sin curar`) & is.finite(Curada)
    ),
    .groups = "drop"
  )

knitr::kable(
  control_parejas,
  caption = "Control de integridad de las parejas experimentales"
)
Control de integridad de las parejas experimentales
resina n_parejas parejas_completas
Transcend 8 8
EasyMatch 8 8
SimpliShade 8 8
Vittra 8 8
Filtek Z350 XT 8 8
# Resumen de la contracción por resina
resumen_contraccion <- densidades_pareadas %>%
  group_by(resina) %>%
  summarise(
    n = sum(is.finite(contraccion_recalculada)),
    media = mean(contraccion_recalculada, na.rm = TRUE),
    desviacion_estandar = sd(contraccion_recalculada, na.rm = TRUE),
    mediana = median(contraccion_recalculada, na.rm = TRUE),
    Q1 = quantile(contraccion_recalculada, 0.25, na.rm = TRUE),
    Q3 = quantile(contraccion_recalculada, 0.75, na.rm = TRUE),
    minimo = min(contraccion_recalculada, na.rm = TRUE),
    maximo = max(contraccion_recalculada, na.rm = TRUE),
    .groups = "drop"
  )

knitr::kable(
  resumen_contraccion,
  digits = 3,
  caption = "Estadísticos descriptivos de la contracción por resina (%)"
)
Estadísticos descriptivos de la contracción por resina (%)
resina n media desviacion_estandar mediana Q1 Q3 minimo maximo
Transcend 8 1.776 1.582 2.027 0.451 3.024 -0.438 3.660
EasyMatch 8 0.906 1.212 0.862 0.309 2.049 -1.005 2.273
SimpliShade 8 3.271 2.940 3.521 1.068 5.330 -1.007 7.392
Vittra 8 1.553 3.525 1.631 -0.007 3.066 -3.839 7.718
Filtek Z350 XT 8 2.168 1.051 1.648 1.401 2.798 1.252 3.952

#Interpretación descriptiva preliminar #Contracción media por resina #Porcentaje medio calculado a partir de las densidades de cada pareja experimental. #- SimpliShade presenta la mayor contracción media (3.271 %). #- EasyMatch presenta la menor (0.906 %). #- Vittra muestra la mayor desviación estándar (3.525), lo que indica una dispersión considerable. #- Filtek Z350 XT tiene la menor desviación estándar (1.051) y todos sus valores observados son positivos. #- Las otras cuatro resinas presentan al menos una contracción calculada negativa. Estos resultados deben conservarse mientras se verifica su origen; no deben eliminarse solo por su signo.

##revisar la distribución de los datos

library(ggplot2)
library(dplyr)

# 1. Distribución de la contracción por resina
grafico_cajas <- ggplot(
  densidades_pareadas,
  aes(x = resina, y = contraccion_recalculada)
) +
  geom_boxplot(outlier.shape = NA, width = 0.65) +
  geom_jitter(width = 0.10, height = 0, size = 2) +
  labs(
    title = "Distribución de la contracción por resina",
    x = "Resina",
    y = "Contracción (%)"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 25, hjust = 1)
  )

print(grafico_cajas)

# 2. Modelo inicial para examinar residuos
modelo_inicial <- lm(
  contraccion_recalculada ~ resina,
  data = densidades_pareadas
)

# 3. Gráfico Q-Q de los residuos
qqnorm(
  residuals(modelo_inicial),
  main = "Gráfico Q-Q de los residuos"
)
qqline(residuals(modelo_inicial), col = "red", lwd = 2)

# 4. Prueba de Shapiro-Wilk sobre los residuos
shapiro.test(residuals(modelo_inicial))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_inicial)
## W = 0.97, p-value = 0.5

Interpretación de los gráficos y la prueba de normalidad

#Los resultados son útiles para decidir cómo comparar las cinco resinas. Hay que interpretarlos con cautela porque tenemos solamente ocho parejas experimentales por resina. #Gráfico 1. Distribución de la contracción #El diagrama de cajas muestra diferencias descriptivas entre los grupos: #- SimpliShade: presenta la mediana más alta y una dispersión amplia. Hay valores tanto negativos como elevados. #- EasyMatch: muestra una mediana baja y varios valores negativos. #- Transcend: presenta una mediana intermedia, con variabilidad entre las muestras. #- Vittra: muestra la mayor amplitud visual, incluyendo valores negativos y uno cercano al 8 %. #- Filtek Z350 XT: presenta valores más agrupados y todos los resultados observados son positivos. #Estos patrones sugieren que puede haber diferencias entre resinas, pero el gráfico por sí solo no determina si son estadísticamente significativas. #Gráfico 2. Q-Q de los residuos #La mayoría de los puntos se encuentran relativamente cerca de la línea de referencia, aunque se observan desviaciones en las colas, especialmente en algunos valores extremos. Esto merece atención, pero no implica automáticamente que el supuesto de normalidad se incumpla. #Prueba de Shapiro-Wilk #Estadístico \(W\) #0.970

#Valor \(p\) #0.500

#Resultado informado por R para los residuos del modelo inicial.

#Como \(p=0.500\) es mayor que 0.05, no encontramos evidencia estadística suficiente para rechazar la normalidad de los residuos. Esto no demuestra que los residuos sean perfectamente normales, especialmente con una muestra pequeña.

##comprobar la homogeneidad de varianzas

# Prueba de homogeneidad de varianzas
prueba_levene <- rstatix::levene_test(
  densidades_pareadas,
  contraccion_recalculada ~ resina,
  center = median
)

knitr::kable(
  prueba_levene,
  digits = 4,
  caption = "Prueba de Levene para homogeneidad de varianzas"
)
Prueba de Levene para homogeneidad de varianzas
df1 df2 statistic p
4 35 4.073 0.0082
# Complemento visual: residuos frente a valores ajustados
plot(
  fitted(modelo_inicial),
  residuals(modelo_inicial),
  xlab = "Valores ajustados",
  ylab = "Residuos",
  main = "Residuos frente a valores ajustados",
  pch = 19
)

abline(h = 0, lty = 2, col = "red")

#Interpretación de la prueba de Levene #El resultado es estadísticamente significativo: #Estadístico Resultado #Estadístico de Levene 4.073 #Grados de libertad 4 y 35 #Valor \(p\) 0.0082

#Como \(p=0.0082 < 0.05\), rechazamos la hipótesis de igualdad de varianzas. Hay evidencia de que la variabilidad de la contracción no es igual en las cinco resinas.

#Esto coincide con el gráfico de residuos: la dispersión es distinta según los valores ajustados, y algunas resinas muestran residuos mucho más extremos que otras.

#Por tanto, no se utiliza el ANOVA clásico como análisis principal. La opción paramétrica más apropiada para comparar las medias es el ANOVA de Welch, que no requiere asumir varianzas iguales.

##ANOVA de Welch y comparaciones posteriores

# ANOVA de Welch: comparación global entre las cinco resinas
resultado_welch <- rstatix::welch_anova_test(
  densidades_pareadas,
  contraccion_recalculada ~ resina
)

knitr::kable(
  resultado_welch,
  digits = 4,
  caption = "ANOVA de Welch para comparar la contracción entre resinas"
)
ANOVA de Welch para comparar la contracción entre resinas
.y. n statistic DFn DFd p method
contraccion_recalculada 40 1.64 4 16.93 0.211 Welch ANOVA
# Comparaciones post hoc de Games-Howell
resultado_games_howell <- rstatix::games_howell_test(
  densidades_pareadas,
  contraccion_recalculada ~ resina,
  conf.level = 0.95
)

knitr::kable(
  resultado_games_howell,
  digits = 4,
  caption = "Comparaciones múltiples de Games-Howell entre resinas"
)
Comparaciones múltiples de Games-Howell entre resinas
.y. group1 group2 estimate conf.low conf.high p.adj p.adj.signif
contraccion_recalculada Transcend EasyMatch -0.8700 -3.0857 1.346 0.7324 ns
contraccion_recalculada Transcend SimpliShade 1.4957 -2.3382 5.330 0.7152 ns
contraccion_recalculada Transcend Vittra -0.2224 -4.7437 4.299 0.9998 ns
contraccion_recalculada Transcend Filtek Z350 XT 0.3929 -1.7430 2.529 0.9749 ns
contraccion_recalculada EasyMatch SimpliShade 2.3657 -1.3880 6.120 0.2940 ns
contraccion_recalculada EasyMatch Vittra 0.6476 -3.8243 5.120 0.9861 ns
contraccion_recalculada EasyMatch Filtek Z350 XT 1.2628 -0.5091 3.035 0.2271 ns
contraccion_recalculada SimpliShade Vittra -1.7181 -6.7969 3.361 0.8239 ns
contraccion_recalculada SimpliShade Filtek Z350 XT -1.1029 -4.8372 2.631 0.8494 ns
contraccion_recalculada Vittra Filtek Z350 XT 0.6152 -3.8461 5.077 0.9879 ns

#Los resultados del ANOVA de Welch y de Games–Howell indican que, con los datos disponibles, no se encontraron diferencias estadísticamente significativas en la contracción media entre las cinco resinas. #ANOVA de Welch #Estadístico Resultado #Estadístico \(F\) 1.64 #Grados de libertad del numerador 4 #Grados de libertad del denominador 16.93 #Valor \(p\) 0.211 #Nivel de significación 0.05

#Como \(p=0.211 > 0.05\), no rechazamos la hipótesis nula de igualdad de medias. Esto significa que no hay evidencia estadística suficiente para afirmar que la contracción media difiera entre las resinas. #Comparaciones múltiples de Games–Howell #Las diez comparaciones por pares presentan valores de \(p\) ajustados superiores a 0.05. La comparación con el valor \(p\) ajustado más bajo es EasyMatch frente a Filtek Z350 XT (\(p_{\text{ajustado}}=0.2271\)); aun así, no alcanza significación estadística.

#Además, todos los intervalos de confianza del 95 % incluyen el cero. Por tanto, ninguna comparación individual demuestra una diferencia estadísticamente significativa al nivel establecido.

#Es importante no interpretar estos resultados como prueba de que las cinco resinas sean equivalentes. Con solo ocho parejas por resina, el estudio puede tener potencia limitada para detectar diferencias reales.

##Estimar la precisión de las medias

# Intervalos de confianza del 95 % para cada media
intervalos_medias <- densidades_pareadas %>%
  group_by(resina) %>%
  summarise(
    n = sum(is.finite(contraccion_recalculada)),
    media = mean(contraccion_recalculada, na.rm = TRUE),
    desviacion = sd(contraccion_recalculada, na.rm = TRUE),
    error_estandar = desviacion / sqrt(n),
    t_critico = qt(0.975, df = n - 1),
    IC95_inferior = media - t_critico * error_estandar,
    IC95_superior = media + t_critico * error_estandar,
    .groups = "drop"
  )

knitr::kable(
  intervalos_medias,
  digits = 3,
  caption = "Contracción media e intervalos de confianza del 95 % por resina"
)
Contracción media e intervalos de confianza del 95 % por resina
resina n media desviacion error_estandar t_critico IC95_inferior IC95_superior
Transcend 8 1.776 1.582 0.559 2.365 0.453 3.098
EasyMatch 8 0.906 1.212 0.428 2.365 -0.107 1.918
SimpliShade 8 3.271 2.940 1.040 2.365 0.813 5.730
Vittra 8 1.553 3.525 1.246 2.365 -1.393 4.500
Filtek Z350 XT 8 2.168 1.051 0.372 2.365 1.289 3.047
# Gráfico de medias e intervalos de confianza
library(ggplot2)

ggplot(
  intervalos_medias,
  aes(x = resina, y = media)
) +
  geom_point(size = 3) +
  geom_errorbar(
    aes(ymin = IC95_inferior, ymax = IC95_superior),
    width = 0.15
  ) +
  labs(
    title = "Contracción media e IC del 95 % por resina",
    x = "Resina",
    y = "Contracción (%)"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 25, hjust = 1)
  )

#Los resultados muestran que las estimaciones de contracción tienen distintos grados de precisión. Sin embargo, hay un detalle importante: los intervalos de confianza individuales no sustituyen la comparación estadística global que ya realizamos con el ANOVA de Welch. #1. Interpretación de las medias y sus intervalos de confianza #Resina Media (%) IC del 95 % #Transcend 1.776 0.453 a 3.098 #EasyMatch 0.906 −0.107 a 1.918 #SimpliShade 3.271 0.813 a 5.730 #Vittra 1.553 −1.393 a 4.500 #Filtek Z350 XT 2.168 1.289 a 3.047

#- SimpliShade tiene la mayor media estimada, pero también una incertidumbre considerable. #- EasyMatch tiene la menor media estimada. #- Vittra presenta el intervalo más amplio, coherente con su elevada variabilidad. #- Los intervalos de EasyMatch y Vittra incluyen el cero; esto indica que, bajo el cálculo empleado, las medias no se distinguen de cero al nivel del 5 % mediante estos intervalos individuales. No significa que su contracción sea necesariamente cero. #Aunque algunas medias parecen diferentes, el resultado global del ANOVA de Welch fue \(p=0.211\), por lo que no encontramos evidencia suficiente de diferencias entre las cinco resinas. No debemos concluir que SimpliShade tenga una contracción significativamente mayor que las demás. ##Tabla consolidada para el artículo

# TABLA 1. Estadísticos descriptivos por resina
tabla_final <- resumen_contraccion %>%
  select(
    resina, n, media, desviacion_estandar,
    mediana, Q1, Q3, minimo, maximo
  ) %>%
  left_join(
    intervalos_medias %>%
      select(resina, IC95_inferior, IC95_superior),
    by = "resina"
  ) %>%
  mutate(
    `Media (DE)` = sprintf("%.2f (%.2f)", media, desviacion_estandar),
    `IC 95 %` = sprintf(
      "%.2f a %.2f",
      IC95_inferior, IC95_superior
    ),
    `Mediana (Q1-Q3)` = sprintf(
      "%.2f (%.2f-%.2f)",
      mediana, Q1, Q3
    )
  ) %>%
  select(
    Resina = resina,
    n,
    `Media (DE)`,
    `IC 95 %`,
    `Mediana (Q1-Q3)`,
    Mínimo = minimo,
    Máximo = maximo
  )

knitr::kable(
  tabla_final,
  caption = "Tabla 1. Estadísticos descriptivos de la contracción por resina (%)",
  align = "lcccccc"
)
Tabla 1. Estadísticos descriptivos de la contracción por resina (%)
Resina n Media (DE) IC 95 % Mediana (Q1-Q3) Mínimo Máximo
Transcend 8 1.78 (1.58) 0.45 a 3.10 2.03 (0.45-3.02) -0.4379 3.660
EasyMatch 8 0.91 (1.21) -0.11 a 1.92 0.86 (0.31-2.05) -1.0054 2.272
SimpliShade 8 3.27 (2.94) 0.81 a 5.73 3.52 (1.07-5.33) -1.0070 7.392
Vittra 8 1.55 (3.52) -1.39 a 4.50 1.63 (-0.01-3.07) -3.8389 7.718
Filtek Z350 XT 8 2.17 (1.05) 1.29 a 3.05 1.65 (1.40-2.80) 1.2518 3.951
# TABLA 2. Resultado global de Welch
tabla_welch <- resultado_welch %>%
  transmute(
    Prueba = method,
    `Estadístico F` = statistic,
    `Grados de libertad 1` = DFn,
    `Grados de libertad 2` = DFd,
    `Valor p` = p
  )

knitr::kable(
  tabla_welch,
  digits = 4,
  caption = "Tabla 2. Comparación global de la contracción mediante ANOVA de Welch"
)
Tabla 2. Comparación global de la contracción mediante ANOVA de Welch
Prueba Estadístico F Grados de libertad 1 Grados de libertad 2 Valor p
Welch ANOVA 1.64 4 16.93 0.211
# TABLA 3. Comparaciones múltiples
tabla_posthoc <- resultado_games_howell %>%
  transmute(
    Comparación = paste(group1, "vs.", group2),
    `Diferencia de medias (%)` = estimate,
    `IC 95 % inferior` = conf.low,
    `IC 95 % superior` = conf.high,
    `p ajustado` = p.adj,
    Significación = p.adj.signif
  )

knitr::kable(
  tabla_posthoc,
  digits = 4,
  caption = "Tabla 3. Comparaciones por pares mediante Games-Howell"
)
Tabla 3. Comparaciones por pares mediante Games-Howell
Comparación Diferencia de medias (%) IC 95 % inferior IC 95 % superior p ajustado Significación
Transcend vs. EasyMatch -0.8700 -3.0857 1.346 0.7324 ns
Transcend vs. SimpliShade 1.4957 -2.3382 5.330 0.7152 ns
Transcend vs. Vittra -0.2224 -4.7437 4.299 0.9998 ns
Transcend vs. Filtek Z350 XT 0.3929 -1.7430 2.529 0.9749 ns
EasyMatch vs. SimpliShade 2.3657 -1.3880 6.120 0.2940 ns
EasyMatch vs. Vittra 0.6476 -3.8243 5.120 0.9861 ns
EasyMatch vs. Filtek Z350 XT 1.2628 -0.5091 3.035 0.2271 ns
SimpliShade vs. Vittra -1.7181 -6.7969 3.361 0.8239 ns
SimpliShade vs. Filtek Z350 XT -1.1029 -4.8372 2.631 0.8494 ns
Vittra vs. Filtek Z350 XT 0.6152 -3.8461 5.077 0.9879 ns

#Conclusión estadística #El ANOVA de Welch no encontró diferencias estadísticamente significativas en la contracción media entre las cinco resinas, \(F(4,16.93)=1.64\), \(p=0.211\). Las diez comparaciones de Games–Howell también fueron no significativas, con todos los valores de \(p\) ajustados superiores a 0.05.

#En términos descriptivos, SimpliShade presentó la media más alta (3.27 %), mientras que EasyMatch presentó la más baja (0.91 %). Sin embargo, no hay evidencia suficiente para afirmar que esas diferencias reflejen diferencias reales entre las medias poblacionales. #Ajustes recomendados a las tablas #- Tabla 1: conserva las medias, desviaciones estándar, intervalos de confianza y medianas. Puedes redondear mínimo y máximo a dos decimales para mantener uniformidad. #- Tabla 2: conserva los grados de libertad decimales del ANOVA de Welch; son esperables en esta prueba. #- Tabla 3: añade una nota al pie: ns: comparación no significativa al nivel de 0.05; valores de p ajustados mediante Games–Howell.

#Se evaluó la contracción calculada a partir de las densidades de cinco resinas dentales: Transcend, EasyMatch, SimpliShade, Vittra y Filtek Z350 XT. Se analizaron ocho parejas experimentales por resina, para un total de 40 parejas.

#En el análisis descriptivo, SimpliShade presentó la mayor media de contracción (3,27 %; DE = 2,94), seguida de Filtek Z350 XT (2,17 %; DE = 1,05), Transcend (1,78 %; DE = 1,58) y Vittra (1,55 %; DE = 3,53). EasyMatch presentó la menor media (0,91 %; DE = 1,21). Vittra mostró la mayor dispersión de los resultados, mientras que Filtek Z350 XT presentó la menor desviación estándar.

#La evaluación de los supuestos mostró que la prueba de Shapiro-Wilk aplicada a los residuos no proporcionó evidencia estadística de desviación de la normalidad (W = 0,97; p = 0,500). Por otra parte, la prueba de Levene detectó diferencias en las varianzas entre las resinas (estadístico = 4,073; p = 0,0082). En consecuencia, se utilizó el análisis de varianza de Welch para comparar las medias.

#El ANOVA de Welch no identificó diferencias estadísticamente significativas entre las medias de contracción de las cinco resinas (F = 1,64; gl₁ = 4; gl₂ = 16,93; p = 0,211). De manera concordante, ninguna de las diez comparaciones por pares mediante la prueba de Games-Howell alcanzó significación estadística después del ajuste por comparaciones múltiples (todos los valores de p ajustados fueron superiores a 0,05).

#Aunque las medias observadas variaron entre las resinas, estos resultados no proporcionan evidencia estadística suficiente para afirmar que sus medias de contracción sean diferentes. La ausencia de significación estadística no demuestra equivalencia entre los materiales, especialmente considerando el tamaño muestral y la variabilidad observada en algunos grupos.