SCM Muestreo y Calidad
Introducción:
Base metodológica: ISO TC69/SC5: Muestreo de aceptación
Hay cuatro grupos en ISO Internacional que trabajan en el muestreo de aceptación SCM:
- ISO/TC 69/SC 5/WG 2: Procedimientos de muestreo para inspección por atributos (Revisión de ISO 2859);
- ISO/TC 69/SC 5/WG 3: Procedimientos de muestreo y gráficos para inspección por variables para porcentaje de no conformidad (Revisión de ISO 3951);
- ISO/TC 69/SC 5/WG 8: Muestreo por atributos;
- ISO/TC 69/SC 5/WG 10: Muestreo de auditoría.
El muestreo de aceptación es un tema popular, como muestra la cantidad de estándares publicados por ISO TC69/SC5. Se puede encontrar una breve descripción de cada documento en la página web estándar dentro del sitio web de ISO
R-Cran como software que cumple con los requisitos de calidad para la inspección bajo normas ISO 9.000 responde y está certificado para todos los procedimientos de aceptación por muestreo.
En esta parte nos centraremos en el repaso de algunos conceptos de estadística y en explicar porqué es importante el dominio de estas técnicas en la gestión de la cadena de suministros.
Hoy en día, no podemos pensar en aplicar técnicas estadísticas sin utilizar un software estadístico. Aunque los estándares internacionales tienden a ser independientes del software, a veces aparecen herramientas y paquetes de software dentro de ellos. Los líderes del mercado como Minitab y JMP (por SAS) suelen ser los más referidos. Por ejemplo, si nos fijamos en los TR ISO TC69/SC7, se utilizan en todos ellos: ISO/TR 29901 [71], ISO/TR 12888 [77], ISO/TR 29901 [71] e ISO/TR 12845 [73].
En ISO/TR 12845 también se hace referencia a R, lo que es una señal del creciente interés en la industria por el software estadístico y el lenguaje de programación R. De hecho, en los comentarios presentados por los miembros de ISO durante el desarrollo de procesos estándares, ver Secc. 4.3 ISO 12888, R es cada vez más mencionado por los expertos. Por otro lado, R se ha convertido en una especie de estándar de facto para el análisis de datos, véase, por ejemplo [Emilio Cano et al. 2018]. Al ser R de código abierto, es de sentido común usarlo dentro estándares para permitir que todos los usuarios prueben métodos y reproduzcan ejemplos.
Además, R no es solo un software estadístico. R es un lenguaje de programación que se puede utilizar para ilustrar nuevos métodos o algoritmos. Por ejemplo, ISO 28640 [91] es para métodos de generación de variables aleatorias. El anexo B de esa norma enumera el código C para varios algoritmos, incluido el algoritmo Mersenne-Twister [99], el predeterminado para generar números aleatorios en R, consulte la documentación para el tema RNG (Números Aleatorios No Regenerativos).
R podría usarse también para este propósito, es decir, ilustrar algoritmos y código de programación. Sin embargo, R todavía no es un lenguaje estandarizado por ISO como C. Quizás algún día R y otros lenguajes de programación emergentes para el análisis de datos como Python se unan al club en ISO/IEC JTC 1/SC 22: de lenguajes de programación, sus entornos e interfaces de software de sistema. . Además de ISO/IEC 9899 para C [96] e ISO/IEC 14882 para C++ [97], este Comité Técnico Conjunto ha publicado un total de 96 estándares ISO para varios lenguajes de programación, incluidos Prolog, Pascal, Ruby, Fortran y Ada, entre otros. Consulte la página web de ISO-JTC9 para obtener más información sobre ellos.
Descripción de la Variabilidad
Introducción.
Los datos que queremos analizar son mediciones u observaciones de una característica en un conjunto de elementos. Estos elementos pueden ser personas, productos, partes o alguna unidad individual en un conjunto donde podemos observar la característica en estudio. La característica que estamos observando es una variable ya que se espera que no sea constante entre los ítems. En términos de la teoría de la probabilidad, una característica es una variable aleatoria con una distribución de probabilidad dada. Es importante tener en cuenta que los análisis estadísticos se basan en la distribución de probabilidad subyacente de los datos. Hay dos tipos principales de variables: variables cuantitativas y variables cualitativas. Cuando la característica observada se puede medir usando alguna escala, tenemos una variable cuantitativa. Cuando la característica observada es una descripción o una categorización de un ítem, tenemos una variable cualitativa. Además, las variables cuantitativas se pueden clasificar en variables continuas y discretas. Las variables continuas pueden tomar cualquier valor dentro de un intervalo, por ejemplo, temperatura o longitud. Las variables discretas pueden tomar un número contable de valores (finito o infinito); por ejemplo, el número de unidades defectuosas dentro de un lote de productos terminados solo puede tener los valores 1, 2, 3, . . . , n donde “n” es el número total de unidades en el lote. Es bastante complejo describir la variabilidad. Los científicos han desarrollado dos enfoques generales que ayudan mucho en este trabajo: representaciones gráficas (una serie de tablas diferentes) y descripciones numéricas (números que condensan la información obtenida de las mediciones). Desde el punto de vista del control de calidad, la descripción de la variabilidad es vital ya que un cambio en el comportamiento de la variabilidad es la bandera que indica que algo ha cambiado en el proceso bajo estudio.
Hay una gran cantidad de literatura sobre estadística descriptiva, probabilidad e inferencia, los temas de este capítulo. Solo por mencionar algunos recomendables, [13] es fácil de leer, mientras que [12] y [3] contienen explicaciones más profundas y antecedentes teóricos.
Este capítulo proporciona los antecedentes necesarios para comprender las ideas fundamentales de la estadística descriptiva e inferencial. Sección 5 de este documento y desarrolla las ideas y herramientas básicas utilizadas en la descripción, tanto gráfica como numérica, de la variabilidad inherente siempre presente en el mundo real. Secc.2. Introduce algunas de las distribuciones estadísticas más habituales utilizadas en el control de calidad, tanto para el dominio discreto como para el continuo. Sec. 3. y desarrolla el tema muy importante de la inferencia estadística. Secc. 1 a 3. contienen muchos ejemplos de aplicaciones específicas de R para resolver estos problemas.
Finalmente, la Secc. 4 proporciona una selección de las normas ISO disponibles para ayudar a los usuarios en la práctica de problemas de estadística descriptiva e inferencial.
Descripción gráfica de la variación
Hay una gran cantidad de gráficos que se pueden usar para describir la variabilidad/variación. A veces simplemente queremos condensar la información independientemente de su comportamiento con respecto al tiempo (visión estática); en otras ocasiones, el factor tiempo es fundamental para comprensión de la variabilidad (visión dinámica). Es muy común que para un determinado análisis se debe utilizar más de un único gráfico; cada uno de ellos nos ayudará a comprender un aspecto específico de la variación.
Histograma
El histograma, presentado brevemente en el Capítulo 3, es uno de los gráficos más populares utilizado en estadísticas; es simple de construir y simple de entender.
Un histograma es un gráfico de barras que se utiliza para describir variables continuas. Este gráfico de barras muestra la distribución de las medidas de las variables.
En el eje x, el ancho de cada barra representa un intervalo de los posibles valores de una variable. La altura de las barras (es decir, el eje y) representa la frecuencia (relativa o absoluta) de las mediciones dentro de cada intervalo. La regla es que el área de las barras debe ser proporcional a las frecuencias.
El histograma no nos da información sobre el comportamiento de las medidas con respecto al tiempo; se utiliza para encontrar la distribución de una variable, es decir:
- ¿La variable está centrada o es asimétrica?
- ¿Cómo es la variación?
- ¿Están las observaciones cerca de los valores centrales o se trata de una distribución dispersa?
- ¿Hay algún patrón que provoque un análisis más detallado?
- ¿Es una distribución normal?
Para hacer un histograma de nuestros datos, primero determinamos el número de bins (barras) que vamos a graficar. Luego, decidimos el ancho de los intervalos (generalmente el mismo para todos los intervalos) y contamos el número de mediciones dentro de cada intervalo.
Caso de estudio
Espesor de placas de metal.
Histograma. La tabla contiene dos conjuntos de 12 medidas, cada una correspondiente al espesor de una cierta placa de acero producida para cubierta de techos de almacenes con propiedades anti condensación en 2 días sucesivos.
El espesor nominal de este producto es de 0,75 mm. El equipo de producción se reajustó después del día 1 porque el ingeniero a cargo de la línea de producción concluyó que el producto era más grueso de lo requerido. El siguiente código crea un marco de datos en el espacio de trabajo R1:
Finalmente, trazamos las barras. Para intervalos con anchos iguales, la altura de las barras será igual a las frecuencias.
La forma más sencilla de crear un histograma con R es por medio de las capacidades gráficas estándar, es decir, usando la función \(hist()\).
Una simple llamada a esta función con el vector de datos como argumento traza el histograma.
Se pueden hacer gráficos más elaborados utilizando los paquetes lattice y ggplot2. Son especialmente útiles si necesitamos visualizar varios histogramas en un mismo gráfico como veremos en el siguiente ejemplo.
Recuerda que los histogramas son una de las siete herramientas básicas de control de calidad, ahí puedes ver más ejemplos.
day1 <- c(0.821, 0.846, 0.892, 0.750, 0.773, 0.786,
0.956, 0.840, 0.913, 0.737, 0.793, 0.872)
day2 <- c(0.678, 0.742, 0.684, 0.766, 0.721, 0.785,
0.759, 0.708, 0.789, 0.732, 0.804, 0.758)
plates <- data.frame(thickness = c(day1, day2),
day = rep(c("Day1", "Day2"), each = 12))
plates## thickness day
## 1 0.821 Day1
## 2 0.846 Day1
## 3 0.892 Day1
## 4 0.750 Day1
## 5 0.773 Day1
## 6 0.786 Day1
## 7 0.956 Day1
## 8 0.840 Day1
## 9 0.913 Day1
## 10 0.737 Day1
## 11 0.793 Day1
## 12 0.872 Day1
## 13 0.678 Day2
## 14 0.742 Day2
## 15 0.684 Day2
## 16 0.766 Day2
## 17 0.721 Day2
## 18 0.785 Day2
## 19 0.759 Day2
## 20 0.708 Day2
## 21 0.789 Day2
## 22 0.732 Day2
## 23 0.804 Day2
## 24 0.758 Day2
Aunque en el caso de los datos correspondientes al Día 1 pueda parecer claro que los números son mayores de 0,75 mm (solo dos puntos de datos de doce no superan ese valor) un histograma pondrá la situación aún más clara. La Fig. muestra el histograma generado con el siguiente código:
hist(plates$thickness,
main = "Histograma de espesores",
xlab = "Espesor (mm)",
las = 1,
col = gray(0.5),
border = "white")Como se mostró, aunque R puede producir gráficos con muy poco información (por ejemplo, en el código anterior solo se necesitaría el primer argumento), podemos agregar opciones para obtener el resultado deseado. Pruebe la función con y sin las opciones añadidas y vea las diferencias. Al hacerlo, explicamos los argumentos utilizados en el código. En este caso:
- main Establece el título de la trama
- xlab Establece la etiqueta para el eje x
- las Establece la orientación de las etiquetas de los ejes
- col Establece el color de relleno de las barras del histograma
- borde Establece el color del borde de las barras del histograma
Hay más opciones gráficas, siempre puedes consultar la documentación de la función de trazado (en este caso, hist) y las opciones de parámetros gráficos (par). Tener este gráfico le dará al ingeniero un buen argumento para respaldar su opinión sobre los datos del Día 1. Una buena idea sería representar datos antes y después del ajuste del equipo, en la búsqueda de una evidencia de la mejora.
Una forma sencilla de mostrar gráficos para diferentes grupos en R es usar funciones del paquete de celosía. El siguiente código produce el gráfico de la Fig. 2.
library(lattice)
trellis.par.set(canonical.theme(color = FALSE))
trellis.par.set("background", list(col = gray(0.85)))
trellis.par.set("panel.background", list(col = "white"))
histogram(~ thickness | day, data = plates,
main = "Histograma de Espesores",
xlab = "Espesor (mm)",
ylab = "Frecuencia",
type = "count")- Cargar el paquete de lattice;
- Establecer parámetros gráficos:
- Tema en blanco y negro para impresión monocromática;
- Fondo gris para todo el lienzo;
- Fondo blanco para los paneles (donde se dibujan los gráficos);
- Trazar un histograma de espesor para cada nivel del factor día, variables que están en el marco de datos de las placas.
- El título y las etiquetas se agregan de manera similar al estándar histograma de gráficos,
- y el argumento de tipo es para indicar que el eje y es para cuenta en lugar del valor predeterminado (porcentaje).
Tenga en cuenta que lattice usa una fórmula expresión para decidir cómo mostrar gráficos en paneles.
El histograma nos dice de forma muy directa que el proceso se ha ajustado con éxito en el Día 2 en torno a un valor cercano a la meta de 0,75 mm.
Tabla de corridas
Un gráfico de corridas o ejecución es un gráfico bidimensional donde el eje \(x\) representa una línea de tiempo y en el eje \(y\) se grafica la variable que queremos monitorear. Este tipo de gráficos también se denominan gráficos de series de tiempo cuando tenemos una escala de tiempo en el eje \(x\). Es posible que la escala del eje x no se desplace necesariamente en la misma medida en el tiempo (por ejemplo, el volumen de algunos destinatarios cuya producción es secuencial). Por lo tanto, tendremos una serie de subgrupos donde se mide una característica y tenemos el orden de los subgrupos (observe que un subgrupo puede contener solo un elemento). Por lo general, se traza una línea centrada en un gráfico de ejecución. Puede representar un objetivo, la media de los datos o cualquier otro valor. Los gráficos de ejecución nos permiten detectar patrones que pueden ser indicativos de cambios en un proceso. Los cambios implican variabilidad y, por tanto, menor calidad. En particular, si detectamos ciclos, tendencias o cambios, debemos revisar nuestro proceso. Si usamos la mediana como línea central, entonces la mitad de los puntos están debajo de la línea central y la mayoría de los puntos están arriba de la línea central. Si un proceso está bajo control, la posición de cada punto con respecto a la línea central es aleatoria. Sin embargo, si el proceso no está bajo control, aparece una variación no aleatoria en el gráfico de ejecución.
Además de los patrones aparentes detectados al visualizar el gráfico, se pueden ejecutar pruebas numéricas adicionales para detectar dicha variación no aleatoria.
Los gráficos de ejecución simples se pueden trazar usando gráficos estándar R simplemente trazando un vector de datos con la función de trazado y luego agregando una línea central usando la función abline. El paquete \(qichart()\) proporciona una interfaz simple para trazar gráficos de ejecución y obtener pruebas de ejecución.
Espesor de placas de metal (cont.)
Tabla de corrida.
El gráfico de ejecución correspondiente a nuestro ejemplo de espesor de placa en la Fig. es el La versión más simple de un gráfico de ejecución que podemos obtener con solo las siguientes dos expresiones:
plot(plates$thickness,
type = "b",
main = "Gráfica de Corridas de Espesor",
las = 1,
ylab = "Espesor (mm)",
xlab = "Número de placa",
pch = 20)
abline(h = median(plates$thickness),
lwd = 2)type Elige el tipo de símbolo gráfico (línea puntos, ambos)
h Elige la altura del eje x con el valor objetivo del espesor
lwd Selecciona el espesor de la línea
El gráfico de ejecución producido por el paquete qcharts en la figura proporciona más información. En particular, el número de observaciones, el recorrido más largo y los cruces.
library(qicharts)## qicharts will no longer be maintained. Please consider moving to qicharts2: https://anhoej.github.io/qicharts2/.
qic(thickness,
data = plates,
freeze = 12,
pre.text = "Day 1",
post.text = "Day 2",
runvals = TRUE)- freez Punto en el eje x que divide el conjunto de datos en dos subconjuntos
- pre.text Texto para anotar el período de precongelación
- post.text Texto para anotar el período posterior a la congelación
- runvals (lógico) si imprimir las estadísticas del análisis de ejecuciones
Tenga en cuenta que la mediana se calculó solo con los datos del día 1, ya que hemos congelado esos datos como datos bajo control. Los números entre paréntesis para la corrida más larga y los cruces son los límites para considerar que el proceso está bajo control. En este caso, ambos criterios indican que la distribución alrededor de la mediana no puede considerarse aleatoria. La representación secuencial de los mismos datos proporciona una visión sustancialmente diferente a lo que hace el histograma. Ahora parece ser evidente que ocurrió un cambio real después de la observación número 12 (correspondiente al ajuste del proceso después del Día 1)
Si analizamos en detalle la información proporcionada por el histograma y el gráfico de ejecución, podemos concluir que ninguno es mejor, ambos son complementarios y necesarios para comprender el panorama completo de la situación.
Otros gráficos importantes en el control de calidad
Gráfico de niveles
Un gráfico de niveles es similar a un gráfico de ejecución. Usamos gráficos de niveles cuando tenemos más de una observación en cada ejecución (por ejemplo, lotes, días, etc.). Con el gráfico de niveles podemos ver la variación a corto plazo y la variación a largo plazo juntas en un solo gráfico. La variación a corto plazo es la variación dentro de cada subgrupo, mientras que la variación a largo plazo es la variación entre todos los grupos.
Para crear un gráfico de niveles, trazamos líneas verticales en la posición de cada ejecución desde el valor más alto al más bajo. Luego, los valores individuales se trazan como un punto o como un segmento vertical. No existe una función específica para trazar gráficos de niveles en R (ni en todos los software estadísticos). Sin embargo, podemos ajustar un gráfico de puntos para obtener el gráfico de niveles típico. La función dotplot en el paquete de \(lattice()\) hace el truco usando las funciones de panel apropiadas.
Espesor de placas de metal (cont.)
Tabla de niveles.
Ahora supongamos que nuestros datos de espesor de placa para cada día se pueden dividir en dos grupos de igual tamaño, cada uno correspondiente a un turno de trabajo diferente. El siguiente código agrega esta información al dataframe:
plates$shift <- factor(paste0("Turno",
(rep(1:2, each = 6))))
plates$dayshift <- factor(paste(plates$day,
plates$shift, sep = "."))Podemos trazar un diagrama de puntos usando la función \(dotplot()\) en el paquete \(lattice()\), y luego agregue líneas para obtener un gráfico de niveles típico. El siguiente código traza el gráfico de niveles en la Fig.
dotplot(thickness ~ dayshift,
data = plates,
pch = "-",
cex = 4,
panel = function(x, y, ...){
panel.dotplot(x, y, ...)
panel.superpose(x, y,
subscripts = 1:length(x), x,
panel.groups = "llines",
col = "black",
type = "l",
lty = 1)
})- cex Factor de magnificación (zoom) de símbolos
- lty Tipo de línea (1=sólido)
- panel.superpose Función para plotear diferentes grupos en el mismo panel
- subscripts índice de los tados en los datos fuente utilizados – panel.groups nombre de la función a utilizar cuando hay superposición
Tenga en cuenta que el argumento del panel en los diagramas de lattice permite agregar una gran cantidad de sofisticación a gráficos multivariados. El valor de este argumento es una función anónima en la que los elementos del panel se dibujan llamando a function.panel(). Por lo general, el primer elemento es la contraparte de la función contenedora, en nuestro ejemplo, panel.dotplot. Consulte en la ayuda de lattice para obtener detalles sobre los gráficos.
Diagrama de caja y bigotes
El diagrama de caja y bigotes también se conoce como diagrama de caja. Resume gráficamente la distribución de una variable continua. Los lados de la caja son el primer y tercer cuartil (percentil 25 y 75, respectivamente).2 Así, dentro de la caja tenemos el 50 % central de los datos. La mediana se traza como una línea que cruza la caja. Los valores de bigotes extremos pueden ser el máximo y el mínimo de los datos u otros límites más allá de los cuales los datos se consideran valores atípicos. Los límites se suelen tomar como:
\[ [Q_1 - 1.5 * IQR ; Q_3 + 1,5 * IQR];\]
donde \(Q1\) y \(Q3\) son el primer y tercer cuartil, respectivamente, e \(IQR\) es el rango intercuartílico (\(Q3 \le Q1\)). Los cuantiles y el IQR se explicarán en detalle más adelante y en la ayuda. Podemos reemplazar 1.5 con cualquier valor en la función de diagrama de caja de R. Los valores atípicos se trazan más allá de los bigotes como puntos aislados y se pueden etiquetar para identificar el índice de los valores atípicos. El diagrama de caja nos dice si la distribución está centrada o sesgada (la posición de la mediana con respecto al resto de los datos), si hay valores atípicos (puntos fuera de los bigotes) o si los datos están cerca de los valores centrales (pequeños bigotes o cajas). Este gráfico es especialmente útil cuando queremos comparar grupos y comprobar si hay diferencias entre ellos. Para crear un diagrama de caja con R, podemos usar la función estándar de diagrama de caja u otras funciones de paquetes como bxplot en el paquete de lattice.
Espesor de placas de metal (cont.)
Diagrama de caja.
Para el ejemplo de las placas de metal, obtenemos el diagrama de caja de la Fig. para todo el conjunto de datos usando el siguiente código:
boxplot(plates$thickness)
Para comparar por grupos agregamos la formula o función
boxplot(thickness ~ day, data = plates)Incluso podemos hacer comparaciones utilizando más de una variable de agrupación. El paquete de lattice es más apropiado para esta tarea. En la Fig. siguiente, creamos un panel para cada día usando la siguiente expresión:
library(lattice)
bwplot(thickness ~ shift | day , data = plates)Descrición numerica de la variacion
Tendencia central
Los valores centrales de un conjunto de datos son la forma más sencilla de resumir los datos. Un valor de medida central es un número alrededor del cual varían los datos. Tres importantes medidas de tendencia central se utilizan principalmente en cualquier análisis estadístico:
Media muestral
- La media muestral es el valor promedio. Esta es la medida más utilizada debido a sus propiedades matemáticas. El principal inconveniente es que es sensible a outliers (valores alejados de los valores centrales):
\[ \bar x = \frac{\sum x_i}{n}\]
pero para calcular la media con R sólo basta usar el comando \(mean()\).
mean(plates$thickness)## [1] 0.7877083
Para hacer cualquier cálculo por grupos en R, podemos usar la función tapply, en nuestro ejemplo:
tapply(plates$thickness, plates$day, mean)## Day1 Day2
## 0.8315833 0.7438333
Mediana
La mediana es el valor que divide los datos en dos mitades: una que contiene los valores más altos y la otra que contiene los valores más bajos. No está influenciado por valores atípicos. Si tenemos un número par de datos, se toma el valor medio de los dos valores centrales. La función \(median()\) calcula la mediana de un vector numérico en R.
Espesor de placas de metal (cont.)
Mediana del espesor de las placas metálicas.
tapply(plates$thickness, plates$dayshift, median)## Day1.Turno1 Day1.Turno2 Day2.Turno1 Day2.Turno2
## 0.8035 0.8560 0.7315 0.7585
Moda
Es el valor más frecuente (o rango de valores en una variable continua). En una tabla de frecuencias, es el valor que tiene la máxima frecuencia. Aunque la media y la mediana son valores únicos, un conjunto de datos puede tener más de una moda. Muchas veces esto significa que los datos de la muestra provienen de poblaciones fusionadas, y debemos medir variables categóricas para hacer una estratificación adecuada. No hay una función para calcular la moda con R. En cambio, necesitamos verificar el valor o rango de valores que tiene la frecuencia máxima.
Espesor de placas de metal (cont.).
Moda del espesor de las placas metálicas.
Para el ejemplo de las placas de metal no se repite ninguno de los valores, por lo que no hay ningún valor que pueda ser considerado como la moda. Sin embargo, podemos comprobar qué intervalo tiene la frecuencia más alta. Este es el intervalo modal. Podemos seguir dos enfoques.
Una es dividir el rango en varios intervalos y verificar qué intervalo es el modal, por ejemplo:
thickness.freq <- table(cut(plates$thickness,
round(sqrt(length(plates$thickness)))))
thickness.freq##
## (0.678,0.734] (0.734,0.789] (0.789,0.845] (0.845,0.9] (0.9,0.956]
## 5 10 4 3 2
Moda
thickness.mode.int <- names(
thickness.freq)[
thickness.freq == max(thickness.freq)]
thickness.mode.int## [1] "(0.734,0.789]"
En el código anterior, primero dividimos el rango de la variable en n intervalos (redondeados) con la función de corte, donde n es el número de observaciones. Esta es una regla bastante común para comenzar, pero hay otras, por ejemplo para construir un histograma se usa la fórmula de Sturges [https://www.probabilidadyestadistica.net/regla-de-sturges/], escriba &?nclass.Sturges$ para ver otra ayuda.
Luego creamos un objeto con la tabla de frecuencias, y finalmente se muestra el nombre de la clase cuya frecuencia es máxima.
El segundo enfoque es usar los intervalos producidos para construir un histograma, que se toman con un ancho de intervalo redondeado. Para hacer eso, simplemente guardamos el resultado de la función hist en lugar de graficarlo, y luego accedemos al objeto en el que se guardó esa información. También podríamos tomar el valor medio del intervalo para proporcionar un valor único para la moda.
thickness.hist <- hist(plates$thickness, plot = FALSE)
names(thickness.hist)## [1] "breaks" "counts" "density" "mids" "xname" "equidist"
thickness.mode.mid <- thickness.hist$mids[
thickness.hist$counts == max(thickness.hist$counts)]
thickness.mode.mid## [1] 0.775
En el objeto guardado, el elemento mid contiene los puntos medios de cada intervalo, y el elemento counts contiene las frecuencias. Tenga en cuenta que ambos enfoques proporcionan un resultado similar, que definitivamente es suficiente para un análisis descriptivo. Poniendo todo junto, si comparamos la tendencia central medidas y las herramientas gráficas (histograma y diagrama de caja), podemos ver cómo el asimetría mostrada por el histograma, con un ligero sesgo positivo (cola derecha más larga) da como resultado una media mayor que la mediana y la moda. La Fig. siguiente muestra las medidas en el propio histograma, producido con el siguiente código.
thickness.central <- list(mean = mean(plates$thickness),
median = median(plates$thickness),
mode = thickness.mode.mid)
plot(thickness.hist)
abline(v = thickness.central,
col = c("red4", "green4", "steelblue"),
lwd = 2)
legend(x = 0.85, y = 8,
legend = names(thickness.central),
lwd = 2,
col = c("red4", "green4", "steelblue"))En el código anterior, tenemos: 1. guardó las tres medidas de tendencia central en una lista; 2. trazó un histograma de los datos de espesor; 3. trace una línea vertical para cada medida de tendencia central; 4. agregó una leyenda a la trama.
Variabilidad
La variabilidad es la razón de ser de las estadísticas [1]. En esta sección veremos cómo medir dicha variabilidad. La varianza es la medida de variabilidad más importante debido a sus propiedades matemáticas. Es la distancia media al cuadrado de la media, y la representaremos por \(\sigma^2\) :
\[\sigma²= \frac{\displaystyle\sum_{i=1}^{n} (x_i- \bar x)²}{n}\] Otro estimador de la varianza de una población con mejores propiedades matemáticas que \(\sigma2\) es la varianza muestral, calculada de una manera ligeramente diferente y representado por \(s^2\) :
\[s²= \frac{\displaystyle\sum_{i=1}^{n} (x_i- \bar x)²}{n-1}\]
Espesor de placas de metal (cont.) Varianza.
var(plates$thickness)## [1] 0.004987955
tapply(plates$thickness, plates$day, var)## Day1 Day2
## 0.004580265 0.001649061
La varianza está en unidades cuadradas en comparación con la media. Por lo tanto, la desviación estándar es la medida de variabilidad más utilizada:
\[s=\sqrt{ \frac{\displaystyle\sum_{i=1}^{n} (x_i- \bar x)²}{n-1}}\]
Para calcular la desviación estándar con R usamos la función sd. La desviación estándar de la muestra no es un estimador imparcial de la desviación estándar de la población. Esta es la razón por la que en algunas gráficas de control descritas en la norma ISO se utiliza una de las siguientes estimaciones de la desviación estándar:
\[\hat \sigma =\frac{s}{c_4}\ ;\ \hat \sigma = \frac{R}{d_2}\]
donde c4 y d2 son constantes tabuladas para un tamaño de muestra n dado, y R es la muestra rango (ver más abajo).
Espesor de placas de metal (cont.)
Desviación estándar.
## Sample standard deviation
sd(plates$thickness)## [1] 0.07062545
## Unbiased estimators
## ss.cc.get deprecated , run only if you have a registeres ISO username and password
# sd(plates$thickness)/ss.cc.getc4(length(plates$thickness))
c4<- 0.07139706
sd(plates$thickness)/c4## [1] 0.9891927
#diff(range((plates$thickness)))/ss.cc.getd2(length(plates$thickness))
##run only if you have a registeres ISO username and password
d2 <- 0.07136718
diff(range((plates$thickness))/d2/length(plates$thickness))## [1] 0.1623062
El rango (R) es la diferencia entre el valor máximo y el valor mínimo, pero está fuertemente influenciado por valores extremos. Sin embargo, cuando tenemos pocos datos, se utiliza como un método robusto para estimar la variabilidad como se describe anteriormente.
\[R=max x_i - min x_i\]
diff(range(plates$thickness))## [1] 0.278
## [1] 0.278
tapply(plates$thickness, plates$day, function(x){
diff(range(x))})## Day1 Day2
## 0.219 0.126
## Day1 Day2
## 0.219 0.126Observe cómo podemos agregar cualquier función personalizada sobre la marcha para realizar cualquier cálculo por grupos. El tercer argumento de la función tapply en el código anterior es una llamada función anónima, siempre con una x como argumento que luego se usa dentro del cuerpo de la función. Esta estrategia también se puede utilizar en funciones vectorizadas como lapply y sapply, escriba ?lapply en la consola y consulte la documentación y ejemplos sobre el tema.
Si queremos medir la variabilidad alrededor de la mediana, la medida adecuada es la desviación absoluta de la mediana (MAD), es decir:
\[MAD(x) = Median(|x_i - median(X) |)\]
De manera similar a la mediana, podemos calcular los cuartiles. Estos son los valores que dividen los datos en cuatro partes. Así, la mediana es el segundo cuartil (Q2). El primer cuartil (Q1) es el valor que tiene el 25 % de los datos por debajo, y el tercer cuartil (Q3) es el valor por encima del cual queda el 25 % de los datos. El rango intercuartílico (RIC) es una medida de variabilidad que evita la influencia de valores atípicos. Este rango contiene el 50 % medio de los datos:
\[IQR = Q_3 - Q_1 :\] Para calcular los cuartiles con R podemos usar la función cuantil. El La función de resumen sobre un vector numérico devuelve el resumen de cinco números (máximo, mínimo, mediana, Q1 y Q3) y la media. La función \(IQR()\) calcula el rango intercuartílico. La función loca devuelve la desviación absoluta mediana.
Espesor de placas de metal (cont.)
Cuartiles y Rango Intercuartil
## [1] 0.0622692
summary(plates$thickness)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.6780 0.7408 0.7790 0.7877 0.8257 0.9560
##
quantile(plates$thickness, 0.25)## 25%
## 0.74075
##
IQR(plates$thickness)## [1] 0.085
## [1] 0.085
tapply(plates$thickness, plates$day, IQR)## Day1 Day2
## 0.09425 0.05300
Tablas de frecuencia
Por lo general, los datos sin procesar se vuelven tan difíciles de interpretar a medida que aumenta el número de observaciones. Así, muchas veces la primera operación que hacemos con los datos es construir una tabla de frecuencias. Para una variable discreta, la frecuencia de un valor de la variable es el número de veces que aparece este valor en particular. Para una variable discreta, la frecuencia relativa es la fracción de veces que aparece el valor.
Para variables continuas necesitamos organizar los datos en clases. Por ejemplo, si en nuestro ejemplo de espesor de placa queremos contar el número de valores por encima y por debajo del valor nominal de 0,75 mm, primero creamos una nueva variable de factor. Usamos la tabla de funciones R para obtener tablas de frecuencia. Para discretizar una variable numérica podemos usar la función de corte o simplemente combinar expresiones lógicas y asignaciones.
plates$position <- cut(x = plates$thickness, breaks = c(min(plates$thickness), 0.75, max(plates$thickness)), labels = c("debajo", "por encima"),include.lowest = TRUE)
table(plates$position, plates$day)##
## Day1 Day2
## debajo 2 6
## por encima 10 6
- bracks Puntos de quiebre de datos
- labels Etiquetas usadas como variables tipo factor
- include.lowest dónde incluir el primer intervalo cerrado