Está en la página 1de 21

jueves, 11 de mayo de 2023

9:19

ISO 13528 evalúa estadísticamente. El único software que tiene todos los análisis de esta norma
es R. El único que permite analizar con menos de 12 es el software R. Esta norma promueve el
criterio experto.
Ir a rstudio
File
New proyect
Nuevo directorio
Nuevo proyecto
Nombre proyecto
Crear
Debo crear un archivo excel en el directorio que cree (en escritorio)
Para asignar un valor a una variable, basta <-
X<-5 significa que x vale 5
# es para escribir comentarios
Hay que crear un script, para crear la rutina, si dejo todo en R, al cerrar R se pierden los datos, por
eso hay que crear Rscript que será un archivo recuperable.
Ir a file, new file, rscript y luego guardar (debe quedar un archivo con extensión R)
Una función quedaría nombre_función(argumento 1, argumento 2)
Por ejemplo:
Round (x, digits)
Donde x es vector de datos y digits es el número de decimales que se redondea el vector
En el script debo seleccionar la linea que ejecutaré y luego presionar RUN, sólo así se ejecutará
Si quiero guardar el valor obtenido en una variable, debo asignarle valor, por ejemplo:
Y<-round(x,digits=2)

Concatenación c()
concentracion <-(0,10,20,30,40,50)
Concentracion (al escribir esto la muestra)
El resultado es 0 10 20 30 40 50 (coloca los valores cada uno en una columna
También puedo guardar texto con ""
Para calcular la media y la desviación estandar de un vector, basta:
X<-c(1,2,3,4) a x le asigné todos los datos 1, 2, 3, 4
Luego mean(x)
Sd(x)
Ahora instalaremos paquetes de aplicaciones, por ejemplo, instalaremos un paquete para detectar
valores anómalos; outliers
Install.packages('outliers') con esto se instalará el paquete outliers.

La herramienta de outliers que usaremos es dixon.test y en nuestro caso, para EA, basta
dixon.test(x)
Para cargar la herramienta outliers, debo escribir:
library(outliers)
Como es valor p-value es mucho menor que 0,05, implica que debería ser un valor anómalo. No se
debería eliminar el dato supuestamente errado, no debo eliminarlo de la evaluación, porque estoy
usando estadístico robusto, no promedio; si usara promedio, me hace pedazos el resultado,
porque lo corre. Este es un valor aberrante (blunder), 28,95 no debe usarse para el análisis
estadístico, pero sí debe evaluarse.

Ahora, importaré datos desde un archivo excel, usaré


library(readxl)
datos.ronda<-read_excel('datos.xlsx', sheet = 'ronda')
datos.ronda
Todo lo anterior permitirá extraer de la pestaña ronda, del archivo excel datos.xlsx, importaré los
valores a la variable datos.ronda.
Sólo por espacio de la consola no se muestra la última columna, pero si la extiendo, se verá:
Ojo; el <dbl> significa que el programa asume que son números. Notar también que en excel los
títulos de las columnas que son textos, NO pueden tener espacios y van con guión bajo. OJO: sólo
puedo importar de a una hoja, no todas al mismo tiempo. En la matriz anterior, cada una de las
columnas es un vector conformado por 8 valores.
Al anotar el nombre del archivo con signo peso puede seleccionar que ver:
Datos.ronda$

Y selecciono absorción de agua y presiono enter


Si quiero calcular la mediana de ese vector, basta con:
x<-datos.ronda$ABSORCION_DE_AGUA
median(x)

El comando for es un loop que recorre todas las variables.


Cada vez que guardo con signo $, por ejemplo datos.ronda$x lo que estoy guardando es un vector.

El promedio es el que tiene menor varianza, con el se comparan todos los estimadores.
Rnorm trabaja considerando que todos los datos son correctos. Si el resultado es NO (que no son
normales), no puedo usar promedio porque los datos no son normales y debo recurrir a
algoritmos robustos. De hecho, no existen datos normales en la realidad, por lo que basta que
sean simétricos.
La estadística robusta no elimina los datos, salvo los blunders, sino que los acomoda y da menos
pesos a los más alejados.
El promedio es el valor que minimiza la expresión

minμ∑(xi−μ)2
Boxplot marcará los datos anómalos como círculos, no deberían eliminarse a primera vista.
Plot(density(X)) dibujará los datos simulando una distribución normal.
Para usar promedio, en boxplot la linea negra debe estar al centro y los bigotes deben ser
simétricos, por lo que no puedo usar promedio:

Luego, el gráfico plot density, muestra claramente que no hay una distribución normal, por lo que
tampoco puedo usar el promedio.
En plot está la opción de save as image
Actualmente se estan realizando las presentación en formato de página web, no como ppt.
Otro gráfico util es
stripchart(x, method = 'stack')

Que apila los datos cuando son iguales (con stack)


El pch=19 cambia los cuadrados por puntos y offset los separa:
En este caso, resulta en un problema estadistico que tres labs tengan el mismo valor, porque
pierde sentido el análisis, ya que todos los resultados son absorbidos por esta concentración. Lo
anómalo es que es muuuuy poco probable que los tres labs hubiesen llegado al mismo resultado.
Si solicitáramos ser lab designado, debemos ser primero 17025. (hablar primero con Ibarra, jefe
del área metrológica).
qqnorm(x) y qqline(x) y shapiro.test(x) son test de normalidad.
Cuando en el gráfico los datos están muy dispersos, no hay normalidad:

El p-value me da 0,6671 que es mayor a 0.5, lo que supondría normalidad, pero hay que analizar
junto al qqplot, que no muestra normalidad. También hay tres datos que concentran y definen la
tendencia, todo lo anterior me obliga a aplicar estadística robusta.

Ahora, como el outliers no muestra círculos, no debería haber outliers


No tengo evidencia que 2,69 sea un outliers, porque el test de dixon es pvalue = 0,492, que es
mucho mayor que 0,05. Si me resultara que fuera outlier, no lo elimino, me lleva a usar estadística
robusta para considerarlo pero con un peso proporcional menor.
El problema de outliers es que va analizando uno a uno, y para continuar hay que ir sacando del
análisis cada outlier hasta determinar que no quedan outliers. Mejor que este es el test de rosner,
que está en el package envstats y la función se llama rosnertest, que entrega inmediatamente
todos los outliers.
En nuestro caso queda:
Este test encontró dos posibles outliers y los analizó, como el resultado final es FALSE, ninguno
resultó ser finalmente outlier.

Vamos a la estadística robusta:


Mediana (p>=18), pero se puede usar para menos datos, lo malo es que aumenta la
incertidumbre, aumenta el error. El problema es que la norma tiene un criterio de aceptación,
debe cumplirse que u(xpt)<0,3 Pt. Sino se cumple esto, la ronda completa no cumple desde la
perspectiva metrológica y estadística. Estamos evaluando en el fondo si el valor de la mediana
influye o no en el zscore. Con pocos laboratorios es más probable que no se cumple el criterio de
u, lo que obliga a aumentar Pt y eso es malo porque disminuye la exigencia y al final todos los
labs pasan, lo que cuestiona la necesidad de hacer la ronda de ensayos entonces.
Para saber cuantos labs deben participar para cumplir, debo despejar el n de la ecuación.
La mediana es el que tiene más error de todos los estadísticos, es el más conservador, pero si se
cumple el criterio de u, vale usarla.
Otro estimador es el MAD, mad(x), es un estimador de la desviación estandar.

Si el 50% o más de los datos son iguales, entonces elMADe=0MAD =0. En ese
caso, use nIQR, calcule la s sin outliers o use estimadores Q/Qn

Eso no puede ser, significa que todos los datos se concentraron. Si el MADe es cero, no es bueno,
no hay dispersión.

El rango intercuartilo normalizado.


El algoritmo A, que no siempre es el mejor, sólo permite un 25% de outliers, con mayor porcentaje
NO sirve el algoritmo A. (ojo que la mediana acepta el 50% de outliers). Es muy eficiente con
respecto al promedio.
El Package metRology calcula el algoritmo A., está desarrollado para metrología y hace muchas
cosas.

algA(Pb$x)

$mu
[1] 2.99
$s
[1] 0.113122

Entrega el valor de referencia y la desviación estandar de todos los labs. En el peor de los casos, la
puedo usar como sigma.
Si tengo muchos mensurando puedo hacer un análisis de precisión de todos los labs.

Si quiero comparar entre labs, uso gráfico. Si color es blanco, son compatibles:
Los labs que están en el centro del primer círculo tienen buena precisión y buena dispersión:
Otro gráfico que compara muestra 1 con muestra 2; los buenos labs permanecen dentro de la
elipsoide:

Corramos el algoritmo A:
El preferido por la Norma 13528 es:
Método Q/Hampel
Ventajas:
Alta eficiencia (96 % bajo normalidad)
Alto punto de quiebre (breakpoint 50 %)
Desventaja:
El algoritmo propuesto en ISO 13528 puede que no tenga solución única. Como criterio de
solución óptima se compara con la mediana

Pero no tiene una librería, pero alguien hizo su script. Para cargarlo se escribe
Source('Qhampel.r')

Para justificar su uso en el informe, basta decir que se realizó según el punto x de la norma 13528.

Luego, para usarlo:


source('QHampel.r')
n<- length(x)
QHampel(x, 1:n) donde n es el número de laboratorios
X.star de Qhampel es mu y s.star es s.

La norma ISO 13528 dice que cuando son pocos datos, lo ideal es asignar el valor de referencia,
pero cuando sólo se necesita analizar la dispersión, se puede ir a la referencia (27) asociada al
análisis de muestras muy pequeñas. Donde se usa el algoritmo B. (Para 3, 4 datos sólo para la
dispersión, no para estimar el valor asignado). El package se llama revss.
Instalarlo:
Calculo Robloc y RobScale (desviación), pero el que sirve realmente es RobScale. Sólo ocuparé
algoritmo B para muestras muy pequeñas, menores a 12, ideal para casos de 3 y 4 datos, pero
donde calcularé sólo desviación estandar.

Para el criterio experto, no tiene mucho sentido analizar estadísticamente con pocos datos,
porque matemáticamente cumplirá, pero los pocos datos aumentarán la incertidumbre
estadística, disminuyendo zscore, permitiendo que todos cumplan.
La ISO 13528 demuestra que no existe un método estadístico ideal para todos los casos.

Revisar tablas D.1 y D.2 para escoger el mejor método estadístico, con más de 12 datos, voy
seguro con Hampel.
En este ejemplo cada columna es un laboratorio y cada fila es un ensayo. Si aplico Hampel, debo
aplicarlo a cada fila, para poder comparar.

Library(metRology)
x.A <- numeric(m)
for(i in1:m){x.A[i] <- algA(sim[i, ])$mu}
ARE <- var.promedio/var(x.A)*100
ARE

[1] 3050.593

Para cada laboratorio de mil ensayos cada uno, calcula el algoritmo A

Comencemos el análisis:
El test de shapiro dice que puede haber normalidad, pero el gráfico muestra colusión:
La norma me sugiere calcular:
Evaluación del valor asignado y su incertidumbre
Valor asignado por consenso:
promedio <- mean(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO)
mediana <- median(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO)
algA.mu <- algA(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO)$mu
QHampel.mu <- QHampel(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO,
1:length(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO))$x.star

s <- sd(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO)
s.mad <- mad(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO)
algA.s <- algA(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO)$s
nIQR <- 0.7413*IQR(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO)
QHampel.s <- QHampel(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO,
1:length(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO))$s.star
Qn.s <- Qn(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO)
algB.s <- robScale(datos.ronda$DENSIDAD_REAL_ARIDO_SATURADO)

estimadores <- data.frame(estimador = c('Promedio - DS', 'Mediana -


MAD', 'Algoritmo A',
'Q/Hampel', 'Qn', 'Algoritmo B', 'nIQR'),
centralidad = c(promedio,
mediana,
algA.mu,
QHampel.mu,
NA,
NA,
NA),
dispersion = c(s,
s.mad,
algA.s,
QHampel.s,
Qn.s,
algB.s,
nIQR))

Desde <https://usach-taller-2023.netlify.app/#171>

La reproducibilidad entre laboratorios será el doble de la repetibilidad (por criterio experto y


experiencia). Tiene tanto de criterio experto como de criterio de norma. pt =2 r = 21,4 kg/m3
Lty es tipo de linea, 1 continua, 2 segmentada

Trabajar en qmd
Html cambia el formato del informe, por ejemplo, docx y lo entregará en word.
Luego guardar.
Render, se presiona al final.
En la página quarto.org están todas las opciones para automatizar el informe.

También podría gustarte