Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Análisis de datos

Introducción

Cada análisis de datos tiene algunos componentes estándar:

  • Preprocesamiento: consideración de valores atípicos y valores faltantes, así como suavizado de datos para identificar posibles modelos.

  • Resumen: cálculo de estadísticas básicas para describir la ubicación, escala y forma generales de los datos.

  • Visualización: representación gráfica de datos para identificar patrones y tendencias.

  • Modelado: descripción más detallada de las tendencias presentes en los datos, útil para predecir valores nuevos.

El análisis de datos se mueve entre estos componentes teniendo en cuenta dos objetivos básicos:

  1. Describir los patrones de los datos con modelos simples que den origen a predicciones fiables.

  2. Comprender las relaciones entre variables que conducen al modelo.

En esta sección, se explica cómo llevar a cabo un análisis de datos básico en el entorno de MATLAB®.

Preprocesamiento de datos

En este ejemplo se muestra cómo preprocesar datos con fines de análisis.

Descripción general

Comience un análisis de datos cargando los datos en variables adecuadas de MATLAB® y separando los datos "buenos" de los "malos". Este es un paso preliminar que ayuda a asegurar que se llegue a conclusiones significativas en partes posteriores del análisis.

Carga de los datos

Comience cargando los datos en count.dat:

load count.dat

El arreglo count de 24 por 3 contiene recuentos de tráfico por hora (las filas) en tres intersecciones (las columnas) en el curso de un solo día.

Datos faltantes

El valor NaN (No es Número) de MATLAB normalmente se usa para representar datos faltantes. Los valores NaN permiten que las variables con datos faltantes mantengan su estructura (en este caso, vectores de 24 por 1 con indexación consistente entre las tres intersecciones).

Verifique si los datos de la tercera intersección tienen valores NaN usando la función isnan:

c3 = count(:,3); % Data at intersection 3
c3NaNCount = sum(isnan(c3))
c3NaNCount = 0

isnan devuelve un vector lógico del mismo tamaño que c3, con entradas que indican la presencia (1) o ausencia (0) de valores NaN para cada uno de los 24 elementos de los datos. En este caso, la suma de los valores lógicos es 0, de modo que no hay valores NaN en los datos.

En la sección sobre valores atípicos se introducen valores NaN en los datos.

Valores atípicos

Los valores atípicos son valores de datos que son notablemente diferentes de los patrones presentes en el resto de los datos. Estos valores pueden deberse a errores de medición, o también pueden representar características importantes de los datos. La identificación de valores atípicos, y la decisión sobre qué hacer con ellos, depende de la comprensión de los datos y su origen.

Un método común para identificar valores atípicos es buscar valores que difieran de la media σ por más de cierto número de desviaciones estándar μ. El siguiente código representa un histograma de los datos de la tercera intersección, junto con líneas en μ y μ+ησ, para η=1,2:

h = histogram(c3,10); % Histogram
N = max(h.Values); % Maximum bin count
mu3 = mean(c3); % Data mean
sigma3 = std(c3); % Data standard deviation

hold on
plot([mu3 mu3],[0 N],'r','LineWidth',2) % Mean
X = repmat(mu3+(1:2)*sigma3,2,1);
Y = repmat([0;N],1,2);
plot(X,Y,'Color',[255 153 51]./255,'LineWidth',2) % Standard deviations
legend('Data','Mean','Stds')
hold off

El diagrama muestra que algunos de los datos difieren de la media por más de dos desviaciones estándar. Si identifica estos datos como errores (y no como características), reemplácelos con valores NaN de la siguiente manera:

outliers = (c3 - mu3) > 2*sigma3;
c3m = c3; % Copy c3 to c3m
c3m(outliers) = NaN; % Add NaN values

Suavizado y filtrado

El diagrama de serie de tiempo de los datos de la tercera intersección (después de eliminar el valor atípico) da como resultado la siguiente gráfica:

plot(c3m,'o-')
hold on

El valor NaN de la hora 20 aparece como una brecha en el diagrama. Este manejo de valores NaN es común en las funciones gráficas de MATLAB.

Los datos ruidosos muestran variaciones aleatorias alrededor de los valores esperados. Antes de crear un modelo, tal vez sea deseable suavizar los datos para que muestren sus características principales. Hay dos supuestos básicos que subyacen al suavizado:

- La relación entre el predictor (tiempo) y la respuesta (volumen de tráfico) es suave.

- El algoritmo de suavizado deriva en valores que son mejores estimaciones de los valores esperados, ya que se ha reducido el ruido.

Aplique un suavizador simple de promedio móvil a los datos mediante el uso de la función convn de MATLAB:

span = 3; % Size of the averaging window
window = ones(span,1)/span; 
smoothed_c3m = convn(c3m,window,'same');

h = plot(smoothed_c3m,'ro-');
legend('Data','Smoothed Data')

La extensión de la suavización se controla con la variable span. El cálculo del promedio devuelve valores NaN cada vez que la ventana de suavizado incluye el valor NaN en los datos. De esta manera, se aumenta el tamaño de la brecha en los datos suavizados.

La función filter también se usa para suavizar datos:

smoothed2_c3m = filter(window,1,c3m);

delete(h)
plot(smoothed2_c3m,'ro-','DisplayName','Smoothed Data');

Los datos suavizados se desplazan con respecto al diagrama anterior. convn con el parámetro 'same' devuelve la parte central de la convolución, con la misma longitud que los datos. filter devuelve la parte inicial de la convolución, con la misma longitud que los datos. En todo lo demás, los algoritmos son idénticos.

El suavizado estima el centro de la distribución de valores de respuesta en cada valor del predictor. Esto invalida una suposición básica de muchos algoritmos de ajuste, a saber: que los errores de cada valor del predictor son independientes. En consecuencia, es posible usar datos suavizados para identificar un modelo, pero evite usar datos suavizados para ajustarse a un modelo.

Resumen de datos

En este ejemplo se muestra cómo resumir datos.

Descripción general

Muchas funciones de MATLAB® permiten resumir la ubicación, escala y forma generales de una muestra de datos.

Una de las ventajas de trabajar con MATLAB® es que las funciones operan en arreglos de datos completos, no solo en valores escalares individuales. Se dice que las funciones están vectorizadas. La vectorización permite tanto una formulación de problemas eficiente, mediante el uso de datos basados en arreglos, como un cálculo eficiente, usando funciones estadísticas vectorizadas.

Medidas de ubicación

Resuma la ubicación de una muestra de datos mediante la búsqueda de un valor "típico". Las medidas comunes de ubicación o medidas de "tendencia central" se calculan por medio de las funciones mean (media), median (mediana) y mode (modo):

load count.dat
x1 = mean(count)
x1 = 1×3

   32.0000   46.5417   65.5833

x2 = median(count)
x2 = 1×3

   23.5000   36.0000   39.0000

x3 = mode(count)
x3 = 1×3

    11     9     9

Al igual que todas sus funciones estadísticas, las funciones de MATLAB® mencionadas más arriba resumen los datos sobre las observaciones (filas), a la vez que mantienen las variables (columnas). Las funciones calculan simultáneamente la ubicación de los datos en cada una de las tres intersecciones.

Medidas de escala

Existen muchas formas de medir la escala o "dispersión" de una muestra de datos. Las funciones de MATLAB® max (máximo), min (mínimo), std (desviación estándar) y var (varianza) calculan algunas medidas comunes:

dx1 = max(count)-min(count)
dx1 = 1×3

   107   136   250

dx2 = std(count)
dx2 = 1×3

   25.3703   41.4057   68.0281

dx3 = var(count)
dx3 = 1×3
103 ×

    0.6437    1.7144    4.6278

Al igual que todas sus funciones estadísticas, las funciones de MATLAB® mencionadas más arriba resumen los datos sobre las observaciones (filas), a la vez que mantienen las variables (columnas). Las funciones calculan simultáneamente la escala de los datos en cada una de las tres intersecciones.

Forma de una distribución

La forma de una distribución es más difícil de resumir que su ubicación o escala. La función hist de MATLAB® representa un histograma que proporciona un resumen visual:

figure
hist(count)
legend('Intersection 1',...
       'Intersection 2',...
       'Intersection 3')

Los modelos paramétricos ofrecen resúmenes analíticos de formas de distribución. Las distribuciones exponenciales, con el parámetro mu dado por la media de los datos, son una buena opción para los datos de tráfico:

c1 = count(:,1); % Data at intersection 1
[bin_counts,bin_locations] = hist(c1);
bin_width = bin_locations(2) - bin_locations(1);
hist_area = (bin_width)*(sum(bin_counts));

figure
hist(c1)
hold on

mu1 = mean(c1);
exp_pdf = @(t)(1/mu1)*exp(-t/mu1); % Integrates
                                   % to 1
t = 0:150;
y = exp_pdf(t);
plot(t,(hist_area)*y,'r','LineWidth',2)
legend('Distribution','Exponential Fit')

Los métodos para ajustar modelos paramétricos generales a distribuciones de datos exceden el alcance de esta sección. El software Statistics and Machine Learning Toolbox™ ofrece funciones para calcular estimaciones de máxima verosimilitud de parámetros de distribución.

Visualización de datos

Descripción general

Es posible utilizar muchos tipos de gráficas de MATLAB para visualizar patrones y tendencias de datos. Los diagramas de dispersión, que se describen en esta sección, ayudan a visualizar relaciones entre los datos de tráfico en diferentes intersecciones. Las herramientas de exploración de datos permiten consultar e interactuar con puntos individuales en las gráficas.

Nota

Esta sección continúa el análisis de datos de Resumen de datos.

Diagramas de dispersión 2D

Un diagrama de dispersión bidimensional, creado con la función scatter, muestra la relación entre el volumen de tráfico en las primeras dos intersecciones:

load count.dat
c1 = count(:,1); % Data at intersection 1
c2 = count(:,2); % Data at intersection 2

figure
scatter(c1,c2,'filled')
xlabel('Intersection 1')
ylabel('Intersection 2')

La covarianza, que se calcula por medio de la función cov, mide la solidez de la relación lineal entre las dos variables (el nivel de ajuste que registran los datos a lo largo de una línea de mínimos cuadrados a través de la dispersión):

C12 = cov([c1 c2])
C12 = 2×2
103 ×

    0.6437    0.9802
    0.9802    1.7144

Los resultados se muestran en una matriz cuadrada simétrica, con la covarianza de la i-ésima y j-ésima variables en la (i, j)-ésima posición. El i-ésimo elemento diagonal es la varianza de la i-ésima variable.

Las covarianzas tienen la desventaja de que dependen de las unidades que se usan para medir las variables individuales. Es posible dividir una covarianza por las desviaciones estándar de las variables para normalizar los valores entre +1 y –1. La función corrcoef calcula los coeficientes de correlación:

R12 = corrcoef([c1 c2])
R12 = 2×2

    1.0000    0.9331
    0.9331    1.0000

r12 = R12(1,2) % Correlation coefficient
r12 = 0.9331
r12sq = r12^2 % Coefficient of determination
r12sq = 0.8707

Debido a que está normalizado, el valor del coeficiente de correlación se puede comparar fácilmente con los valores de otros pares de intersecciones. Su cuadrado, el coeficiente de determinación, es la varianza sobre la línea de mínimos cuadrados dividida por la varianza sobre la media. De esta manera, es la proporción de la variación en la respuesta (en este caso, el volumen de tráfico en la intersección 2) que se elimina o se explica de forma estadística mediante una línea de mínimos cuadrados a través de la dispersión.

Diagramas de dispersión tridimensionales

Un diagrama de dispersión tridimensional, que se crea con la función scatter3, muestra la relación entre el volumen de tráfico en las tres intersecciones. Use las variables c1, c2 y c3 que creó en el paso anterior:

figure
c3 = count(:,3); % Data at intersection 3
scatter3(c1,c2,c3,'filled')
xlabel('Intersection 1')
ylabel('Intersection 2')
zlabel('Intersection 3')

Mida la solidez de la relación lineal entre las variables calculando los valores propios de la matriz de covarianza con la función eig:

vars = eig(cov([c1 c2 c3]))
vars = 3×1
103 ×

    0.0442
    0.1118
    6.8300

explained = max(vars)/sum(vars)
explained = 0.9777

Los valores propios son las varianzas a lo largo de los componentes principales de los datos. La variable explained mide la proporción de la variación explicada por el primer componente principal, a lo largo del eje de los datos. A diferencia del coeficiente de determinación para las dispersiones bidimensionales, esta medida distingue las variables predictoras y de respuesta.

Arreglos de diagramas de dispersión

Use la función plotmatrix para hacer comparaciones de las relaciones entre varios pares de intersecciones:

figure
plotmatrix(count)

La gráfica en la (i, j)-ésima posición del arreglo es una dispersión con la i-ésima variable en el eje vertical y la j-ésima variable en el eje horizontal. La gráfica en la i-ésima posición de la diagonal es un histograma de la i-ésima variable.

Exploración de datos en gráficas

Use el ratón para seleccionar observaciones en casi cualquier gráfica de MATLAB con dos herramientas de la barra de herramientas de la figura:

  • Data Cursor (Cursor de datos)

  • Data Brushing (Resaltado de datos)

Estas herramientas inician modos exploratorios en los cuales se pueden seleccionar puntos de las gráficas con el fin de identificar sus valores y crear variables en el área de trabajo que contengan observaciones específicas. El resaltado de datos permite también copiar, eliminar o reemplazar las observaciones seleccionadas.

Por ejemplo, haga un diagrama de dispersión de la primera columna y la tercera columna de count:

load count.dat
scatter(count(:,1),count(:,3))
Seleccione la herramienta Data Cursor (Cursor de datos) y haga clic en el punto de datos del extremo derecho. Allí, encontrará un mensaje contextual con el valor de x e y del punto.

Los mensajes contextuales muestran por defecto las coordenadas x, y y z (para gráficas tridimensionales). Arrastre el mensaje contextual de un punto a otro para ver valores nuevos. Para agregar mensajes contextuales, haga clic con el botón secundario en uno de estos mensajes y use el menú que aparece. También puede personalizar el texto que muestran los mensajes usando código de MATLAB.

El resaltado de datos es una función relacionada que le permite resaltar una o más observaciones en una gráfica haciendo clic o arrastrando elementos. Para iniciar el modo de resaltado de datos, haga clic en el lado izquierdo de la herramienta Data Brushing (Resaltado de datos) en la barra de herramientas de la figura. Si hace clic en la flecha ubicada en el lado derecho del icono de la herramienta, se despliega una paleta de colores para que escoja el color con el que desea resaltar las observaciones. En esta figura se muestra el mismo diagrama de dispersión que en la figura anterior, pero con todas las observaciones más allá de una desviación estándar de la media resaltadas en rojo (según se identifica a través de la interfaz gráfica Tools > Data Statistics [Herramientas > Estadísticas de datos]).

scatter(count(:,1),count(:,3))

Después de resaltar observaciones de datos, puede realizar las siguientes operaciones con estos elementos:

  • Borrarlos.

  • Reemplazarlos con valores constantes.

  • Reemplazarlos con valores NaN.

  • Arrastrarlos o copiarlos y pegarlos en la ventana de comandos.

  • Guardarlos como variables del área de trabajo.

Por ejemplo, use el menú contextual de resaltado de datos o la opción Tools > Brushing > Create new variable (Herramientas > Resaltado > Crear nueva variable) para crear una nueva variable llamada count13high.

La nueva variable aparece en el área de trabajo:

count13high

count13high =
    61   186
    75   180
   114   257

El enlace de gráficas, o enlace de datos, es una característica estrechamente relacionada con el resaltado de datos. Se dice que una gráfica está enlazada cuando tiene una conexión directa con los datos del área de trabajo que representa. Las copias de las variables almacenadas en los XData, YData y (cuando corresponda) ZData de un objeto se actualizan de forma automática cada vez que cambian o se eliminan las variables del área de trabajo a las que están enlazadas. Esto hace que las gráficas en las que aparecen se actualicen automáticamente.

El enlace de gráficas con variables le permite rastrear observaciones específicas a través de distintas presentaciones. Cuando se resaltan puntos de datos en diagramas enlazados, al resaltar una gráfica se resaltan también las mismas observaciones en todas las gráficas enlazadas a las mismas variables.

El enlace de datos establece una comunicación bidireccional inmediata entre las figuras y las variables del área de trabajo, del mismo modo en que el editor de variables se comunica con las variables del área de trabajo. Para crear enlaces, active la herramienta Data Linking (Enlace de datos) en la barra de herramientas de una figura. Activar esta herramienta hace que aparezca la barra de información de la gráfica enlazada en la parte superior de la gráfica, quizá ocultando su título. Es posible cerrar la barra (mostrada en la siguiente figura) sin desenlazar la gráfica. La barra no se imprime ni se guarda con la figura.

Los siguientes dos gráficos representan diagramas de dispersión de datos enlazados después de resaltar algunas observaciones del gráfico de la izquierda. La variable común, count, traslada las marcas de resaltado a la figura de la derecha. Aunque la gráfica de la derecha no está en modo de resaltado de datos, muestra marcas de resaltado porque está enlazada a sus variables.

figure
scatter(count(:,1),count(:,2))
xlabel ('count(:,1)')
ylabel ('count(:,2)')
figure
scatter(count(:,3),count(:,2))
xlabel ('count(:,3)')
ylabel ('count(:,2)')

El diagrama de la derecha muestra que las observaciones resaltadas tienen una relación lineal más clara que en el diagrama de la izquierda.

Cuando visualiza esas variables en el editor de variables, las observaciones de datos aparecen resaltadas en el mismo color, tal como se puede ver aquí:

openvar count

En el editor de variables se puede modificar cualquier valor de los datos de la gráfica enlazada, y los diagramas reflejarán tales modificaciones. Para resaltar una observación de datos desde el editor de variables, haga clic en el botón de la herramienta de resaltado . Si la variable que resalta está representada en una gráfica enlazada, las observaciones se resaltarán tanto en el diagrama como en el editor de variables. Cuando se resalta una variable que es una columna de una matriz, las otras columnas en esa fila también se resaltan. En otras palabras, es posible resaltar observaciones individuales de un vector fila o columna, pero en el caso de una matriz se resaltan todas las columnas de una fila resaltada, no solo las observaciones en las que se hace clic.

Modelado de datos

Descripción general

Los modelos paramétricos traducen la comprensión de relaciones entre datos en herramientas de análisis con poder predictivo. Los modelos polinómicos y sinusoidales son maneras simples de ver tendencias a la alta y a la baja de los datos de tráfico.

Regresión polinómica

Use la función polyfit para estimar coeficientes de modelos polinómicos, y luego use la función polyval para evaluar el modelo para valores arbitrarios del predictor.

El siguiente código ajusta los datos de tráfico de la tercera intersección con un modelo polinómico de grado seis:

load count.dat
c3 = count(:,3); % Data at intersection 3 
tdata = (1:24)'; 
p_coeffs = polyfit(tdata,c3,6);

figure 
plot(c3,'o-') 
hold on 
tfit = (1:0.01:24)'; 
yfit = polyval(p_coeffs,tfit); 
plot(tfit,yfit,'r-','LineWidth',2)
legend('Data','Polynomial Fit','Location','NW')

El modelo tiene la ventaja de ser simple, al tiempo que sigue la tendencia a la alta y a la baja. Sin embargo, la precisión de su poder predictivo es cuestionable, en especial en los extremos de los datos.

Regresión lineal general

Suponiendo que los datos son periódicos con un período de 12 horas y un pico máximo en la hora 7, es razonable ajustar un modelo sinusoidal de la forma:

y=a+bcos((2π/12)(t7))

Los coeficientes a y b aparecen de forma lineal. Use el operador mldivide (barra invertida) de MATLAB® para ajustar modelos lineales generales:

load count.dat
c3 = count(:,3); % Data at intersection 3 
tdata = (1:24)'; 
X = [ones(size(tdata)) cos((2*pi/12)*(tdata-7))];
s_coeffs = X\c3;

figure
plot(c3,'o-')
hold on
tfit = (1:0.01:24)';
yfit = [ones(size(tfit)) cos((2*pi/12)*(tfit-7))]*s_coeffs; 
plot(tfit,yfit,'r-','LineWidth',2)
legend('Data','Sinusoidal Fit','Location','NW')

Use la función lscov para calcular estadísticas del ajuste, como errores estándar estimados de los coeficientes y el error cuadrático medio:

[s_coeffs,stdx,mse] = lscov(X,c3)
s_coeffs = 2×1

   65.5833
   73.2819

stdx = 2×1

    8.9185
   12.6127

mse = 1.9090e+03

Verifique la suposición de un período de 12 horas de los datos usando un periodograma, que se calcula con la función fft:

Fs = 1; % Sample frequency (per hour)
n = length(c3); % Window length
Y = fft(c3); % DFT of data
f = (0:n-1)*(Fs/n); % Frequency range
P = Y.*conj(Y)/n; % Power of the DFT

figure
plot(f,P)
xlabel('Frequency')
ylabel('Power')

predicted_f = 1/12
predicted_f = 0.0833

El pico máximo cercano a 0.0833 respalda la suposición, aunque se produce a una frecuencia ligeramente mayor. El modelo se puede ajustar en consecuencia.

Consulte también

| | | | | | | | | | | | | | | | | | | | |