ksdensity
Estimación de la función de suavizado de kernel para datos univariantes y bivariantes
Sintaxis
Descripción
[ devuelve una estimación de la densidad de probabilidad, f,xi] = ksdensity(x)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.
[ 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 f,xi] = ksdensity(___,Name,Value)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.
Ejemplos
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 hospitalCalcule 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 hospitalRepresente 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
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'.
| Valor | Descripción |
|---|---|
'log' |
El valor de |
'reflection' |
|
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.
| Valor | Descripción |
|---|---|
'pdf' | Función de densidad de probabilidad. |
'cdf' | Función de distribución acumulativa. |
'icdf' | Función de distribución acumulativa inversa. 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,
@myfunctiono@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:
| Valor | Descripció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:
| Valor | Descripció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
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
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
, donde x1, x2, …, xn son muestras aleatorias de una distribución desconocida, n es el tamaño de muestra, 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
donde .
Para obtener más información, consulte Kernel Distribution.
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 espara L ≤ x ≤ U,
donde , y xi son los
i-ésimos datos de muestra.Si
'Function'es'cdf', el estimador de kernel para la cdf espara L ≤ x ≤ U.
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'),ksdensityusa y .
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
Esta función es compatible con los arreglos altos para datos con memoria insuficiente con algunas limitaciones.
Algunas opciones que requieren pases adicionales o la ordenación de los datos de entrada no se admiten:
'BoundaryCorrection''Censoring''Support'(el soporte siempre está desacotado).
Usa la desviación estándar (en lugar de la desviación absoluta media) para calcular el ancho de banda.
Para obtener más información, consulte Arreglos altos para datos con memoria insuficiente.
Notas y limitaciones de uso:
Las gráficas no son compatibles.
Los nombres de los argumentos de par nombre-valor deben ser constantes de tiempo de compilación.
Los valores de los nombres en los argumentos de par nombre-valor también deben ser constantes de tiempo de compilación:
'BoundaryCorrection','Function'y'Kernel'. Por ejemplo, para utilizar el argumento de par nombre-valor'Function','cdf'en el código generado, incluya{coder.Constant('Function'),coder.Constant('cdf')}en el valor-argsdecodegen.El valor del argumento de par nombre-valor
'Kernel'no puede ser un identificador de función personalizado. Para especificar una función de kernel personalizada, use un vector de caracteres o un escalar de cadena.Para el valor del argumento de par nombre-valor
'Support', el tipo de datos en tiempo de compilación debe coincidir con el tipo de datos en tiempo de ejecución.
Para obtener más información sobre la generación de código, consulte Introduction to Code Generation y General Code Generation Workflow.
Esta función es totalmente compatible con los arreglos de GPU. Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Historial de versiones
Introducido antes de R2006a
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)