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
Estimar la densidad
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.
Estimar la densidad con corrección de límites
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.
Estimar la función de distribución acumulativa en valores especificados
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.
Representar la función de distribución acumulada estimada para un número dado de puntos
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')
Estimar la función de supervivencia y la función de riesgo acumulativo para datos de fallos censurados
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');
Estimar la función de distribución acumulativa inversa para valores de probabilidad especificados
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');
Devolver el ancho de banda de la ventana de suavizado
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.
Representar una estimación de la densidad de kernel de datos bivariantes
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
x
— Datos de muestra
vector columna | matriz de dos columnas
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
pts
— Puntos en los que se evalúa f
vector | matriz de dos columnas
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
ax
— Identificador de ejes
identificador
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
.
Bandwidth
— Ancho de banda de la ventana de suavizado de kernel
valor óptimo para densidades normales (predeterminado) | valor de escalar | vector de dos elementos
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
BoundaryCorrection
— Método de corrección de límites
'log' (predeterminado) | 'reflection'
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'
Censoring
— Vector lógico
vector de ceros (predeterminado) | vector de ceros y unos
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
Function
— Función que se desea estimar
'pdf'
(predeterminado) | 'cdf'
| 'icdf'
| 'survivor'
| 'cumhazard'
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'
Kernel
— Tipo de suavizador de kernel
'normal'
(predeterminado) | 'box'
| 'triangle'
| 'epanechnikov'
| identificador de función | vector de caracteres | escalar de cadena
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'
NumPoints
— Número de puntos equidistantes
100 (predeterminado) | valor de escalar
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
Support
— Soporte para la densidad
'unbounded'
(predeterminado) | 'positive'
| vector de dos elementos, [L U]
| matriz de dos por dos, [L1 L2; U1 U2]
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
PlotFcn
— Función utilizada para crear una representación de densidad de kernel
'surf'
(predeterminado) | 'contour'
| 'plot3'
| 'surfc'
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'
Weights
— Ponderaciones de los datos de muestra
vector
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
xi
— Puntos de evaluación
100 puntos equidistantes | 900 puntos equidistantes | vector | matriz de dos columnas
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.
bw
— Ancho de banda de la ventana de suavizado
valor de escalar
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
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
, 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.
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 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'
),ksdensity
usa 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
Arreglos altos
Realice cálculos con arreglos que tienen más filas de las que caben en la memoria.
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.
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
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-args
decodegen
.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.
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
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
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)