Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

ksdensity

Estimación de la función de suavizado de kernel para datos univariantes y bivariantes

Descripción

[f,xi] = ksdensity(x) devuelve una estimación de la densidad de probabilidad, f, para los datos de muestra en el vector o la matriz de dos columnas x. La estimación se basa en una función de kernel normal y se evalúa en puntos equidistantes, xi, que cubren el rango de los datos de x. ksdensity estima la densidad en 100 puntos para datos univariantes o en 900 puntos para datos bivariantes.

ksdensity es adecuada para muestras distribuidas de forma continua.

ejemplo

[f,xi] = ksdensity(x,pts) especifica puntos (pts) para evaluar f. Aquí, xi y pts contienen valores idénticos.

ejemplo

[f,xi] = ksdensity(___,Name,Value) usa opciones adicionales especificadas por uno o varios argumentos de par nombre-valor además de los argumentos de entrada de las sintaxis anteriores. Por ejemplo, puede definir el tipo de función que ksdensity evalúa, como la densidad de probabilidad, la probabilidad acumulada, la función de supervivencia, etc. O bien puede especificar el ancho de banda de la ventana de suavizado.

ejemplo

[f,xi,bw] = ksdensity(___) también devuelve el ancho de banda de la ventana de suavizado de kernel, bw. El ancho de banda predeterminado es óptimo para densidades normales.

ejemplo

ksdensity(___) representa la estimación de la función de suavizado de kernel.

ejemplo

ksdensity(ax,___) representa los resultados utilizando los ejes especificados con el identificador, ax, en lugar de los ejes actuales devueltos por gca.

Ejemplos

contraer todo

Genere un conjunto de datos de muestra a partir de una combinación de dos distribuciones normales.

rng('default')  % For reproducibility
x = [randn(30,1); 5+randn(30,1)];

Represente la densidad estimada.

[f,xi] = ksdensity(x); 
figure
plot(xi,f);

La estimación de la densidad muestra la bimodalidad de la muestra.

Genere un conjunto de datos de muestra no negativos a partir de la distribución seminormal.

rng('default') % For reproducibility
pd = makedist('HalfNormal','mu',0,'sigma',1);
x = random(pd,100,1);

Estime las pdf con dos métodos diferentes de corrección de límites, reflejo y transformación logarítmica, utilizando el argumento de par nombre-valor 'BoundaryCorrection'.

pts = linspace(0,5,1000); % points to evaluate the estimator
[f1,xi1] = ksdensity(x,pts,'Support','positive');
[f2,xi2] = ksdensity(x,pts,'Support','positive','BoundaryCorrection','reflection');

Represente las dos pdf estimadas.

plot(xi1,f1,xi2,f2)
lgd = legend('log','reflection');
title(lgd, 'Boundary Correction Method')
xl = xlim;
xlim([xl(1)-0.25 xl(2)])

ksdensity usa un método de corrección de límites cuando se especifica el soporte positivo o acotado. El método de corrección de límites predeterminado es la transformación logarítmica. Cuando ksdensity transforma de nuevo el soporte, introduce el término 1/x en el estimador de densidad de kernel. Por consiguiente, la estimación presenta un pico cerca de x = 0. Por otro lado, el método de reflejo no causa picos no deseados cerca del límite.

Cargue los datos de muestra.

load hospital

Calcule y represente la cdf estimada evaluada en un conjunto de valores especificado.

pts = (min(hospital.Weight):2:max(hospital.Weight));
figure()
ecdf(hospital.Weight)
hold on
[f,xi,bw] = ksdensity(hospital.Weight,pts,'Support','positive',...
	'Function','cdf');
plot(xi,f,'-g','LineWidth',2)
legend('empirical cdf','kernel-bw:default','Location','northwest')
xlabel('Patient weights')
ylabel('Estimated cdf')

ksdensity parece que suaviza demasiado la estimación de la función de distribución acumulada. Una estimación con un ancho de banda más pequeño podría generar una estimación más cercana a la función de distribución acumulada empírica.

Devuelva el ancho de banda de la ventana de suavizado.

bw
bw = 0.1070

Represente la estimación de la función de distribución acumulada con un ancho de banda más pequeño.

[f,xi] = ksdensity(hospital.Weight,pts,'Support','positive',...
	'Function','cdf','Bandwidth',0.05); 
plot(xi,f,'--r','LineWidth',2)
legend('empirical cdf','kernel-bw:default','kernel-bw:0.05',...
	'Location','northwest')
hold off

La estimación ksdensity con un ancho de banda más pequeño combina mejor con la función de distribución acumulada empírica.

Cargue los datos de muestra.

load hospital

Represente la cdf estimada evaluada en 50 puntos equidistantes.

figure()
ksdensity(hospital.Weight,'Support','positive','Function','cdf',...
'NumPoints',50)
xlabel('Patient weights')
ylabel('Estimated cdf')

Genere datos de muestra a partir de una distribución exponencial con una media de 3.

rng('default')  % For reproducibility
x = random('exp',3,100,1);

Cree un vector lógico que indique censura. Aquí, se censuran las observaciones con una duración superior a 10.

T = 10;
cens = (x>T);

Calcule y represente la función de densidad estimada.

figure
ksdensity(x,'Support','positive','Censoring',cens);

Calcule y represente la función de supervivencia.

figure
ksdensity(x,'Support','positive','Censoring',cens,...
'Function','survivor');

Calcule y represente la función de riesgo acumulativo.

figure
ksdensity(x,'Support','positive','Censoring',cens,...
'Function','cumhazard');

Genere una combinación de dos distribuciones normales y represente la función de distribución acumulativa inversa estimada en un conjunto especificado de valores de probabilidad.

rng('default')  % For reproducibility
x = [randn(30,1); 5+randn(30,1)];
pi = linspace(.01,.99,99);
figure
ksdensity(x,pi,'Function','icdf');

Genere una combinación de dos distribuciones normales.

rng('default')  % For reproducibility
x = [randn(30,1); 5+randn(30,1)];

Devuelva el ancho de banda de la ventana de suavizado para la estimación de la densidad de probabilidad.

[f,xi,bw] = ksdensity(x); 
bw
bw = 1.5141

El ancho de banda predeterminado es óptimo para densidades normales.

Represente la densidad estimada.

figure
plot(xi,f);
xlabel('xi')
ylabel('f')
hold on

Represente la densidad con un valor de ancho de banda aumentado.

[f,xi] = ksdensity(x,'Bandwidth',1.8);
plot(xi,f,'--r','LineWidth',1.5)

Un ancho de banda más alto suaviza aún más la estimación de la densidad, lo que podría ocultar algunas características de la distribución.

Ahora, represente la densidad con un valor de ancho de banda reducido.

[f,xi] = ksdensity(x,'Bandwidth',0.8);
plot(xi,f,'-.k','LineWidth',1.5)
legend('bw = default','bw = 1.8','bw = 0.8')
hold off

Un ancho de banda más bajo suaviza menos la estimación de la densidad, lo que exagera algunas características de la muestra.

Cree un vector de puntos de dos columnas en los que se evalúe la densidad.

gridx1 = -0.25:.05:1.25;
gridx2 = 0:.1:15;
[x1,x2] = meshgrid(gridx1, gridx2);
x1 = x1(:);
x2 = x2(:);
xi = [x1 x2];

Genere una matriz de 30 por 2 que contenga números aleatorios de una combinación de distribuciones normales bivariantes.

rng('default')  % For reproducibility
x = [0+.5*rand(20,1) 5+2.5*rand(20,1);
            .75+.25*rand(10,1) 8.75+1.25*rand(10,1)];

Represente la densidad estimada de los datos de muestra.

figure
ksdensity(x,xi);

Argumentos de entrada

contraer todo

Datos de muestra para los que ksdensity devuelve valores de f, especificados como un vector columna o una matriz de dos columnas. Use un vector columna para datos univariabntes y una matriz de dos columnas para datos bivariantes.

Ejemplo: [f,xi] = ksdensity(x)

Tipos de datos: single | double

Puntos en los que se evalúa f, especificados como un vector o una matriz de dos columnas. Para datos univariantes, pts puede ser una fila o un vector columna. La longitud de la salida devuelta f es igual al número de puntos de pts.

Ejemplo: pts = (0:1:25); ksdensity(x,pts);

Tipos de datos: single | double

Identificador de ejes en los que la figura ksdensity se representa, especificado como un identificador.

Por ejemplo, si h es el identificador de una figura, ksdensity puede representar dicha figura como se muestra a continuación.

Ejemplo: ksdensity(h,x)

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de otros argumentos, pero el orden de los pares no importa.

En versiones anteriores a R2021a, use comas para separar cada nombre y valor y encierre Name entre comillas.

Ejemplo: 'Censoring',cens,'Kernel','triangle','NumPoints',20,'Function','cdf' especifica que ksdensity estima la cdf mediante la evaluación en 20 puntos equidistantes que cubren el rango de los datos, utilizando la función de suavizado de kernel triangular y teniendo en cuenta la información de datos censurados del vector cens.

Ancho de banda de la ventana de suavizado de kernel, que es una función del número de puntos de x, especificado como el par separado por comas que consta de 'Bandwidth' y un valor de escalar. Si los datos de muestra son bivariantes, Bandwidth también puede ser un vector de dos elementos. El valor predeterminado es óptimo para estimar densidades normales [1], pero se recomienda elegir un valor más grande o más pequeño para suavizar más o menos.

Si especifica 'BoundaryCorrection' como 'log' (valor predeterminado) y 'Support' como 'positive' o un vector [L U], ksdensity convierte los datos acotados en desacotados mediante la transformación logarítmica. El valor de 'Bandwidth' se encuentra en la escala de los valores transformados.

Ejemplo: 'Bandwidth',0.8

Tipos de datos: single | double

Método de corrección de límites, especificado como el par separado por comas que consta de 'BoundaryCorrection' y 'log' o 'reflection'.

ValorDescripción
'log'

ksdensity convierte los datos acotados x en desacotados mediante una de las transformaciones siguientes. A continuación, vuelve a transformar en la escala acotada original tras la estimación de la densidad.

  • Para datos univariantes, si especifica 'Support','positive', ksdensity aplica log(x).

  • Para datos univariantes, si especifica 'Support',[L U], donde L y U son escalares numéricos y L < U, ksdensity aplica log((x-L)/(U–x)).

  • Para datos bivariantes, ksdensity transforma cada columna de x de la misma forma que con los datos univariantes.

El valor de 'Bandwidth' y la salida de bw se encuentran en la escala de los valores transformados.

'reflection'

ksdensity aumenta los datos acotados añadiendo datos reflejados cerca de los límites y, a continuación, devuelve estimaciones correspondientes al soporte original. Para obtener más detalles, consulte Método de reflejo.

ksdensity aplica corrección de límites solo cuando se especifica 'Support' como un valor distinto de 'unbounded'.

Ejemplo: 'BoundaryCorrection','reflection'

Vector lógico que indica las entradas que están censuradas, especificado como el par separado por comas que consta de 'Censoring' y un vector de valores binarios. Un valor de 0 indica que no hay censura, mientras que 1 indica que la observación está censurada. El valor predeterminado es sin censura. Este par nombre-valor solo es válido para los datos univariantes.

Ejemplo: 'Censoring',censdata

Tipos de datos: logical

Función que se desea estimar, especificada como el par separado por comas que consta de 'Function' y uno de los siguientes.

ValorDescripción
'pdf'Función de densidad de probabilidad.
'cdf'Función de distribución acumulativa.
'icdf'

Función de distribución acumulativa inversa. ksdensity calcula la cdf inversa estimada de los valores de x y la evalúa con los valores de probabilidad especificados en pi.

Este valor solo es válido para los datos univariantes.

'survivor'Función de supervivencia.
'cumhazard'

Función de riesgo acumulativo.

Este valor solo es válido para los datos univariantes.

Ejemplo: 'Function','icdf'

Tipo de suavizador de kernel, especificado como el par separado por comas que consta de 'Kernel' y uno de los siguientes:

  • 'normal' (valor predeterminado)

  • 'box'

  • 'triangle'

  • 'epanechnikov'

  • Una función de kernel que es una función personalizada o integrada. Especifique la función como un identificador de función (por ejemplo, @myfunction o @normpdf) o como un vector de caracteres o un escalar de cadena (por ejemplo, 'myfunction' o 'normpdf'). El software llama a la función especificada con un argumento que es un arreglo de distancias entre los valores de los datos y las ubicaciones donde se evalúa la densidad. La función debe devolver un arreglo del mismo tamaño que contenga los valores correspondientes de la función de kernel.

    Cuando 'Function' es 'pdf', la función de kernel devuelve valores de densidad. De lo contrario, devuelve valores de probabilidad acumulada.

    Especificar un kernel personalizado cuando 'Function' es 'icdf' devuelve un error.

En el caso de los datos bivariantes, ksdensity aplica el mismo kernel a cada dimensión.

Ejemplo: 'Kernel','box'

Número de puntos equidistantes en xi, especificado como el par separado por comas que consta de 'NumPoints' y un valor de escalar. Este par nombre-valor solo es válido para los datos univariantes.

Por ejemplo, para una estimación de suavizado de kernel de una función especificada en 80 puntos equidistantes dentro del rango de los datos de muestra, introduzca:

Ejemplo: 'NumPoints',80

Tipos de datos: single | double

Soporte para la densidad, especificado como el par separado por comas que consta de 'support' y uno de los siguientes:

ValorDescripción
'unbounded'Valor predeterminado. Permite que la densidad se extienda por toda la línea real.
'positive'Restringe la densidad en valores positivos.
Vector de dos elementos, [L U]Ofrece los límites superior e inferior para el soporte de la densidad. Esta opción solo es válida para datos de muestra univariantes.
Matriz de dos por dos, [L1 L2; U1 U2]Ofrece los límites superior e inferior para el soporte de la densidad. La primera fila contiene los límites inferiores y la segunda, los límites superiores. Esta opción solo es válida para los datos de muestra bivariantes.

En el caso de los datos bivariantes, 'Support' puede ser una combinación de variables positivas, desacotadas o acotadas especificadas como [0 -Inf; Inf Inf] o [0 L; Inf U].

Ejemplo: 'Support','positive'

Ejemplo: 'Support',[0 10]

Tipos de datos: single | double | char | string

Función utilizada para crear una representación de densidad de kernel, especificada como el par separado por comas que consta de 'PlotFcn' y uno de los siguientes:

ValorDescripción
'surf'Gráfica de superficie sombreada 3D, creada usando surf
'contour'Gráfica de contorno, creada usando contour
'plot3'Gráfica de líneas 3D, creada usando plot3
'surfc'Gráfica de contorno bajo una gráfica de superficie sombreada 3D, creada usando surfc

Este par nombre-valor solo es válido para datos de muestra bivariantes.

Ejemplo: 'PlotFcn','contour'

Ponderaciones de los datos de muestra, especificadas como el par separado por comas que consta de 'Weights' y un vector de longitud size(x,1), donde x son los datos de muestra.

Ejemplo: 'Weights',xw

Tipos de datos: single | double

Argumentos de salida

contraer todo

Valores de función estimados, devueltos como un vector cuya longitud es igual al número de puntos de xi o pts.

Puntos de evaluación en los que ksdensity calcula f, devueltos como un vector o una matriz de dos columnas. Para datos univariantes, el valor predeterminado es de 100 puntos equidistantes que cubren el rango de datos de x. Para datos bivariantes, el valor predeterminado es de 900 puntos equidistantes creados usando meshgrid a partir de 30 puntos equidistantes en cada dimensión.

Ancho de banda de la ventana de suavizado, devuelto como un valor de escalar.

Si especifica 'BoundaryCorrection' como 'log' (valor predeterminado) y 'Support' como 'positive' o un vector [L U], ksdensity convierte los datos acotados en desacotados mediante la transformación logarítmica. El valor de bw se encuentra en la escala de los valores transformados.

Más acerca de

contraer todo

Distribución de kernel

Una distribución de kernel es una representación no paramétrica de la función de densidad de probabilidad (pdf) de una variable aleatoria. Puede utilizar una distribución de kernel cuando una distribución paramétrica no puede describir adecuadamente los datos o cuando desea evitar hacer suposiciones sobre la distribución de los datos. Una distribución de kernel se define mediante una función de suavizado y un valor de ancho de banda, que controlan la suavidad de la curva de densidad resultante.

El estimador de densidad de kernel es la pdf estimada de una variable aleatoria. Para los valores reales de x, la fórmula del estimador de densidad de kernel viene dada por

f^h(x)=1nhi=1nK(xxih),

, donde x1, x2, …, xn son muestras aleatorias de una distribución desconocida, n es el tamaño de muestra, K(·) es la función de suavizado de kernel y h es el ancho de banda.

El estimador de kernel para la función de distribución acumulativa (cdf), para cualquier valor real de x, viene dado por

F^h(x)=xf^h(t)dt=1ni=1nG(xxih),

donde G(x)=xK(t)dt.

Para obtener más información, consulte Kernel Distribution.

Método de reflejo

El método de reflejo es un método de corrección de límites que encuentra de manera precisa los estimadores de densidad de kernel cuando una variable aleatoria tiene un soporte acotado. Si especifica 'BoundaryCorrection','reflection', ksdensity usa el método de reflejo. Este método aumenta los datos acotados añadiendo datos reflejados cerca de los límites y estima la pdf. A continuación, ksdensity devuelve la pdf estimada correspondiente al soporte original con una normalización adecuada, de modo que el valor integral de la pdf estimada sobre el soporte original sea igual a uno.

Si además especifica 'Support',[L U], entonces ksdensity encuentra el estimador de kernel del modo siguiente:

  • Si 'Function' es 'pdf', el estimador de la densidad de kernel es

    f^h(x)=1nhi=1n[K(xxih)+K(xxih)+K(xxi+h)] para LxU,

    donde xi=2Lxi, xi+=2Uxi y xi son los i-ésimos datos de muestra.

  • Si 'Function' es 'cdf', el estimador de kernel para la cdf es

    F^h(x)=1ni=1n[G(xxih)+G(xxih)+G(xxi+h)]1ni=1n[G(Lxih)+G(Lxih)+G(Lxi+h)] para LxU.

  • Para obtener un estimador de kernel para una función de distribución acumulativa inversa, una función de supervivencia o una función de riesgo acumulativo (cuando 'Function' es 'icdf', 'survivor' o 'cumhazrd'), ksdensity usa f^h(x) y F^h(x).

Si además especifica 'Support' como 'positive' o [0 inf], entonces ksdensity encuentra el estimador de kernel sustituyendo [L U] por [0 inf] en las ecuaciones anteriores.

Funcionalidad alternativa

También puede estimar la pdf o cdf para datos univariantes mediante la función kde de MATLAB®. A diferencia de ksdensity, kde no admite métodos de corrección de límites ni censura de datos.

Referencias

[1] Bowman, A. W., and A. Azzalini. Applied Smoothing Techniques for Data Analysis. New York: Oxford University Press Inc., 1997.

[2] Hill, P. D. “Kernel estimation of a distribution function.” Communications in Statistics - Theory and Methods. Vol 14, Issue. 3, 1985, pp. 605-620.

[3] Jones, M. C. “Simple boundary correction for kernel density estimation.” Statistics and Computing. Vol. 3, Issue 3, 1993, pp. 135-146.

[4] Silverman, B. W. Density Estimation for Statistics and Data Analysis. Chapman & Hall/CRC, 1986.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a