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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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"
)
| 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 (%)"
)
| 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
#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"
)
| 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"
)
| .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"
)
| .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"
)
| 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"
)
| 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"
)
| 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"
)
| 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.