library(readxl)
library(PerformanceAnalytics)
library(ggplot2)
library(grid)
library(dplyr)
library(RColorBrewer)
library(scales)
library(gridExtra)
library(ggthemes)
library(ggpubr)
library(NADA)
library(factoextra)
library(scales)
library(ggpubr)
library(tidyr)
library(cluster)
library(chemCal)
library(asbio)
library(ggridges)
library(tinytex)
library(knitr)
library(performance)
INTRODUCCIÓN SOBRE CÓMO SE GENERÓ LA REGRESIÓN
Para la validación de la linealidad se generan curvas de calibración con patrones de 0,1 a 0,5 mg/L, con las absorbancias obtenidas se realiza la gáfica permitiendo realizar las evluaciones de los datos correspondientes.
Por otro lado, la cedasticidad se determina con la prueba de igualdad de varianzas tomando los valores de la absorbancia para cada patrón generado.
La incertidumbre se calcula con el intervalo de confianza determina a partir de la regresión lineal calculada.
getwd()
## [1] "C:/Users/arcej/OneDrive/Documentos/Metdos 2024/Reporte validación"
nitlinealidad<- read_excel("datavalidacion.xlsx",sheet = "linealidad")
View(nitlinealidad)
str(nitlinealidad)
## tibble [24 × 3] (S3: tbl_df/tbl/data.frame)
## $ Patron : chr [1:24] "Blanco" "1" "2" "3" ...
## $ Concentracion: num [1:24] 0 0.101 0.202 0.303 0.404 ...
## $ Absorbancia : num [1:24] 0 0.088 0.188 0.279 0.368 0.457 0 0.095 0.188 0.282 ...
nitlinealidad$Concentracion<-as.numeric(nitlinealidad$Concentracion)
nitlinealidad$Absorbancia<-as.numeric(nitlinealidad$Absorbancia)
nitlinealidad$Patron<-as.factor(nitlinealidad$Patron)
regresion<-lm(Absorbancia~Concentracion,nitlinealidad) ### generar el modelo de regresión
summary(regresion) #ver resultados del modelo de regresión
##
## Call:
## lm(formula = Absorbancia ~ Concentracion, data = nitlinealidad)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0096548 -0.0018887 -0.0001798 0.0015702 0.0091810
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0002619 0.0015030 0.174 0.863
## Concentracion 0.9228923 0.0049117 187.898 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.004153 on 22 degrees of freedom
## Multiple R-squared: 0.9994, Adjusted R-squared: 0.9993
## F-statistic: 3.531e+04 on 1 and 22 DF, p-value: < 2.2e-16
ggplotRegression <- function (regresion) { ### función para plotear la regresi?n con los valores estad?siticos
require(ggplot2)
ggplot(regresion$model, aes_string(x = names(regresion$model)[2], y = names(regresion$model)[1])) +
geom_point() +
stat_smooth(method = "lm", col = "blue") +
scale_y_continuous(labels = scales::number_format(accuracy = 0.001,decimal.mark = '.'))+
scale_x_continuous(labels = scales::number_format(accuracy = 0.0001,decimal.mark = '.'))+
labs(title = "Regresión lineal: validación del método espectrofotométrico",
x= "Concentración (mg/L)", y="Absorbancia (UA)",
subtitle = paste(" Pendiente =",signif(regresion$coef[[2]], 4),
"Intercepto =",signif(regresion$coef[[1]],4 ),
"r2=",signif(summary(regresion)$adj.r.squared, 4),
" p valor =",signif(summary(regresion)$coef[2,4], 3)))
}
plotlinealidad<-ggplotRegression(lm(Absorbancia~Concentracion, data = nitlinealidad)) ### ploteo con la funciÓn
plotlinealidad
Aleatoriedad de residuales
plot(regresion$residuals)
#gráfico de los residuales
Sumatoria cercana a cero
sum(regresion$residuals)# valor de la sumatoria de residuales
## [1] -1.192622e-18
Comprobación de la normalidad de los residuales mediante mediante prueba Shapiro-Wilk
shapiro.test(regresion$residuals) ### comprobacion de la normalidad de residuales
##
## Shapiro-Wilk normality test
##
## data: regresion$residuals
## W = 0.9732, p-value = 0.7459
BREVE INTRODUCCIÓN SOBRE CÓMO SE GENERÓ LA PRUEBA PARA LA DETERMINACIÓN DE LA CEDASTICIDAD
La cedasticidad se determina con la prueba de igualdad de varianzas tomando los diferentes valores de la absorbancia de cada patrón generado.Se utiliza la variable patrón y se filtra aquellas que sean mayores a 0.01.
Al igual, se usa la pruebro Barlett paa analizar la homocedasiticidad de las varianzas.Al tener el p-value se observa que este no es mayor a 0.5 entonces no se acepta la hipótesis nula, por lo tanto si existe diferencia en las varianzas de los grupos.
### convierte al patrón como un factor
nitlinealidad$Patron<-as.factor(nitlinealidad$Patron)
### elimina los blancos para el análisis de cedasticidad
cedasticidad<-nitlinealidad %>% filter(Absorbancia > 0.01)
View(cedasticidad)
bartlett.test(Absorbancia~Patron,cedasticidad) ### prueba Bartlett,
##
## Bartlett test of homogeneity of variances
##
## data: Absorbancia by Patron
## Bartlett's K-squared = 3.9633, df = 4, p-value = 0.411
plotcedasticidad<- ggplot(data = cedasticidad, aes(x = Patron, y = Absorbancia, colour = Patron)) + ### gr?fico de cajas para observar la distribuci?n de los valores de absorbancia
geom_jitter(width=0.20, size=3)+theme(legend.position = "none")+
stat_summary(fun.data="mean_sdl", fun.args = list(mult=1),
geom="errorbar", width = 0.2,color="black",
position = position_dodge(0.8))+
stat_summary(fun.data="mean_sdl", fun.args = list(mult=1),
geom="pointrange", width = 0.6,color="black",
position = position_dodge(0.8))+
scale_y_continuous(labels = scales::number_format(accuracy = 0.001,decimal.mark = '.'))+
labs(title = "Dispersión de los datos de absorbancia en los niveles calibración",
x= "Nivel de concentración para la calibración", y="Absorbancia (UA)")
## Warning in stat_summary(fun.data = "mean_sdl", fun.args = list(mult = 1), :
## Ignoring unknown parameters: `width`
plotcedasticidad
BREVE INTRODUCCIÓN DE CÓMO SE GENERÓ LA DETERMINACIÓN DE LA INCERTIDUMBRE
La incertidumbre se calcula con el intervalo de confianza determinada a partir de la regresión lineal calculada.
muestra<-c(0.345,0.348,0.351, 0.356, 0.349, 0.342, 0.342) ##asigna las absorbancias de una muestra
U<-inverse.predict(regresion,muestra,alpha = 0.05) ### determina la concentración, error
#estándar, IC y los límites de la predicción
U
## $Prediction
## [1] 0.3763272
##
## $`Standard Error`
## [1] 0.002042165
##
## $Confidence
## [1] 0.00423519
##
## $`Confidence Limits`
## [1] 0.3720921 0.3805624
Ucal<-round(U$`Confidence`,digits=3)
Ucal #incertidumbre al 95% de confianza
## [1] 0.004
ESCRIBA AQUÍ UNA BREVE INTRODUCCIÓN SOBRE CÓMO SE DETERMINARON LOS LÍMITES
Se utiliza el método miller-miller el cual utiliza la desviación estándar del intercepto entre la pendiente
LoD<- round(((summary(regresion)$coef[[3]])*3.3)/(signif(regresion$coef[[2]], 4)), digits=3)
LoQ <- round(((summary(regresion)$coef[[3]])*10)/(signif(regresion$coef[[2]], 4)), digits=3)
LoD
## [1] 0.005
LoQ
## [1] 0.016
ESCRIBA AQUÍ UNA BREVE INTRODUCCIÓN SOBRE CÓMO SE GENERÓ LA DETERMINACIÓN DE LA REPETIBILIDAD
Para evaluar la repetibilidad de los resultados entre las dos estudiantes se realizó una comparación entre el promedio, la desviación estándar, los cuartiles, y los mínimos y máximos.
Después, para evaluar la repetibilidad individualmente de las estudiante se realizó una división
#Preparación de los datos
nitpres<- read_excel("datavalidacion.xlsx",sheet = "presicion")
View(nitpres)
#Convirtiendo las variables en factores
nitpres$Estudiante<-as.factor(nitpres$Estudiante)
library(RcmdrMisc)
## Warning: package 'RcmdrMisc' was built under R version 4.3.3
## Loading required package: car
## Warning: package 'car' was built under R version 4.3.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.3.3
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
## Loading required package: sandwich
## Warning: package 'sandwich' was built under R version 4.3.3
descriptiva<-numSummary(nitpres[, c("Concentracion"), drop = FALSE],
groups = nitpres$Estudiante, statistics = c("mean", "sd", "IQR", "quantiles"),
quantiles = c(0, 0.25, 0.5, 0.75, 1)) ### la funci?n numSummary corresponde al paquete RcmdrMisc
descriptiva
## mean sd IQR 0% 25% 50% 75%
## T 0.3474813 0.005191098 0.007043017 0.3415992 0.3432245 0.3481004 0.3502675
## V 0.3318473 0.004723046 0.003250623 0.3253461 0.3296802 0.3318473 0.3329309
## 100% Concentracion:n
## T 0.3556852 7
## V 0.3405157 7
Determinación del coeficiente de variación
CV_E1<-(descriptiva$table[1,2]/descriptiva$table[1,1])*100
CV_E1
## [1] 1.493922
CV_E2<-(descriptiva$table[2,2]/descriptiva$table[2,1])*100
CV_E2
## [1] 1.423259
Determinación de igualdad de varianzas por parte de ambos estudiantes
1.Análisis visual
plotpresi<-ggplot(data = nitpres, aes(x = Estudiante, y = Concentracion, colour = Estudiante)) +
geom_boxplot(aes(),width=0.3) +geom_jitter(aes(shape=Estudiante),width=0.1,size=2) +
scale_y_continuous(labels = scales::number_format(accuracy = 0.001,decimal.mark = '.'))+
labs(title = "Dispersión de los datos de concentración",
subtitle= "Factor de evaluación de la presición intermedia: Estudiante", y="Concentración (mg/L)")+
theme(legend.position = "none")
plotpresi ## grÁfico de cajas para visulaizar la dispersiÓn de los datos de cada estudiante
2.Prueba de Homogeneidad de varianzas
La prueba F es muy potente para discriminar varianzas significativamente distintas, sin embargo posee la limitante que se supone que los datos deben de proveenir de una población normal.
Alternativamente, puede utilizarse la prueba de Levene la cuál presenta varias ventajas permite comparar 2 o más poblaciones,permite eligir entre diversos estadísticos (mediana, media o media truncada) y además no requiere que los datos sean normales como si lo es para el caso de la prueba F de Fisher.
est1<-nitpres %>% filter(Estudiante == "T")#filtrado de los datos por estudiante
est2<-nitpres %>% filter(Estudiante == "V")
shapiro.test(est1$Concentracion)### prueba de normalidad para los valores de concnetraci?n
##
## Shapiro-Wilk normality test
##
## data: est1$Concentracion
## W = 0.94238, p-value = 0.6603
shapiro.test(est2$Concentracion)
##
## Shapiro-Wilk normality test
##
## data: est2$Concentracion
## W = 0.94508, p-value = 0.6848
var.test(x = est1$Concentracion,y = est2$Concentracion)## prueba F para probar varianzas
##
## F test to compare two variances
##
## data: est1$Concentracion and est2$Concentracion
## F = 1.208, num df = 6, denom df = 6, p-value = 0.8244
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.2075723 7.0303826
## sample estimates:
## ratio of variances
## 1.20802
###
leveneTest(y = nitpres$Concentracion, group = nitpres$Estudiante, center = "mean")
## Levene's Test for Homogeneity of Variance (center = "mean")
## Df F value Pr(>F)
## group 1 0.395 0.5415
## 12
### esta función corresponde al paquete car
Según los resultados de cualesquiera de las dos pruebas, se observa que no existe diferencia estadísticamente significativa en las varianzas de ambos estudiantes, con esto sevalida la presición intermedia.
El análisis puede complementarse con una prueba t student para analizar si hay diferencia significativa en el valor medio obtenido por ambos estudiantes
### Diferencia de medias
t.test(est1$Concentracion,est2$Concentracion,mu=0,paired=TRUE,var.equal=TRUE)
##
## Paired t-test
##
## data: est1$Concentracion and est2$Concentracion
## t = 5.6111, df = 6, p-value = 0.001367
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## 0.008816245 0.022451653
## sample estimates:
## mean difference
## 0.01563395
ESCRIBA AQUÍ UNA BREVE INTRODUCCIÓN SOBRE CÓMO SE GENERÓ LA DETERMINACIÓN
t.test(est1$Concentracion,mu=0.3505,alternative = "less")
##
## One Sample t-test
##
## data: est1$Concentracion
## t = -1.5386, df = 6, p-value = 0.08742
## alternative hypothesis: true mean is less than 0.3505
## 95 percent confidence interval:
## -Inf 0.3512939
## sample estimates:
## mean of x
## 0.3474813
#Se realiza una prueba de una cola, el estudiante 1 obtuvo una media de 0.369.
#Hipótesis nula: la media del estudiantes 1 es igual a 0.3505(valor del MRC)
#hipótesis alterna: La media del estudiante 1 es menor a 0.370
t.test(est2$Concentracion,mu=0.3505,alternative = "less")
##
## One Sample t-test
##
## data: est2$Concentracion
## t = -10.449, df = 6, p-value = 2.253e-05
## alternative hypothesis: true mean is less than 0.3505
## 95 percent confidence interval:
## -Inf 0.3353162
## sample estimates:
## mean of x
## 0.3318473
#Se realiza una prueba de una cola, el estudiante 2 tuvo una media igual a 0.378
#Hipótesis nula: la media del estudiantes 1 es igual a 0.370 (valor del MRC)
#Hipótesis alterna: La media del estudiante 1 es MAYOR a 0.370.
## NOTA: probar que la media no difiere del MRC es solo una parte de la prueba de veracidad