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.

fitdist

Ajustar un objeto de distribución de probabilidad a datos

Descripción

ejemplo

pd = fitdist(x,distname) crea un objeto de distribución de probabilidad ajustando la distribución especificada por distname a los datos del vector columna x.

ejemplo

pd = fitdist(x,distname,Name,Value) crea el objeto de distribución de probabilidad con más opciones especificadas por uno o más argumentos de par nombre-valor. Por ejemplo, puede indicar datos censurados o especificar parámetros de control para el algoritmo iterativo de ajuste.

ejemplo

[pdca,gn,gl] = fitdist(x,distname,'By',groupvar) crea objetos de distribución de probabilidad ajustando la distribución especificada por distname a los datos de x basándose en la variable de agrupación groupvar. Devuelve un arreglo de celdas de objetos de distribución de probabilidad ajustados, pdca, un arreglo de celdas de etiquetas de grupo, gn, y un arreglo de celdas de niveles de variables de agrupación, gl.

ejemplo

[pdca,gn,gl] = fitdist(x,distname,'By',groupvar,Name,Value) devuelve los argumentos de salida anteriores utilizando más opciones especificadas por uno o más argumentos de par nombre-valor. Por ejemplo, puede indicar datos censurados o especificar parámetros de control para el algoritmo iterativo de ajuste.

Ejemplos

contraer todo

Ajuste una distribución normal a datos de muestra y examine el ajuste utilizando un histograma y una gráfica cuantil-cuantil.

Cargue los pesos de los pacientes desde el archivo de datos patients.mat.

load patients
x = Weight;

Cree un objeto de distribución normal ajustándolo a los datos.

pd = fitdist(x,'Normal')
pd = 
  NormalDistribution

  Normal distribution
       mu =     154   [148.728, 159.272]
    sigma = 26.5714   [23.3299, 30.8674]

La visualización del objeto de distribución incluye las estimaciones de los parámetros para la media (mu) y la desviación estándar (sigma), y los intervalos de confianza del 95% para los parámetros.

Puede utilizar las funciones del objeto pd para evaluar la distribución y generar números aleatorios. Muestre las funciones del objeto compatibles.

methods(pd)
Methods for class prob.NormalDistribution:

cdf        gather     icdf       iqr        mean       median     negloglik  paramci    pdf        plot       proflik    random     std        truncate   var        

Por ejemplo, obtenga los intervalos de confianza del 95% utilizando la función paramci.

ci95 = paramci(pd)
ci95 = 2×2

  148.7277   23.3299
  159.2723   30.8674

Especifique el nivel de significación (Alpha) para obtener intervalos de confianza con un nivel de confianza diferente. Calcule los intervalos de confianza del 99%.

ci99 = paramci(pd,'Alpha',.01)
ci99 = 2×2

  147.0213   22.4257
  160.9787   32.4182

Evalúe y represente los valores de la pdf de la distribución.

x_values = 50:1:250;
y = pdf(pd,x_values);
plot(x_values,y)

Figure contains an axes object. The axes object contains an object of type line.

Cree un histograma con el ajuste de distribución normal utilizando la función histfit. histfit utiliza fitdist para ajustar una distribución a los datos.

histfit(x)

Figure contains an axes object. The axes object contains 2 objects of type bar, line.

El histograma muestra que los datos tienen dos modos y que el modo del ajuste de distribución normal se encuentra entre esos dos modos.

Utilice qqplot para crear una gráfica cuantil-cuantil de los cuantiles de los datos de muestra de x frente a los valores cuantílicos teóricos de la distribución ajustada.

qqplot(x,pd)

Figure contains an axes object. The axes object with title QQ Plot of Sample Data versus Distribution, xlabel Quantiles of normal Distribution, ylabel Quantiles of Input Sample contains 3 objects of type line. One or more of the lines displays its values using only markers

La gráfica no es una línea recta, lo que sugiere que los datos no siguen una distribución normal.

Cargue los pesos de los pacientes desde el archivo de datos patients.mat.

load patients
x = Weight;

Cree un objeto de distribución de kernel ajustándolo a los datos. Utilice la función de kernel de Epanechnikov.

pd = fitdist(x,'Kernel','Kernel','epanechnikov')
pd = 
  KernelDistribution

    Kernel = epanechnikov
    Bandwidth = 14.3792
    Support = unbounded

Represente la pdf de la distribución.

x_values = 50:1:250;
y = pdf(pd,x_values);
plot(x_values,y)

Figure contains an axes object. The axes object contains an object of type line.

Cargue los pesos y los géneros de los pacientes desde el archivo de datos patients.mat.

load patients
x = Weight;

Cree objetos de distribución normal ajustándolos a los datos, agrupados por género del paciente.

[pdca,gn,gl] = fitdist(x,'Normal','By',Gender)
pdca=1×2 cell array
    {1x1 prob.NormalDistribution}    {1x1 prob.NormalDistribution}

gn = 2x1 cell
    {'Male'  }
    {'Female'}

gl = 2x1 cell
    {'Male'  }
    {'Female'}

El arreglo de celdas pdca contiene dos objetos de distribución de probabilidad, uno para cada grupo de género. El arreglo de celdas gn contiene dos etiquetas de grupo. El arreglo de celdas gl contiene dos niveles de grupo.

Visualice cada distribución en el arreglo de celdas pdca para comparar la media, mu, y la desviación estándar, sigma, agrupadas por género del paciente.

female = pdca{1}  % Distribution for females
female = 
  NormalDistribution

  Normal distribution
       mu = 180.532   [177.833, 183.231]
    sigma = 9.19322   [7.63933, 11.5466]

male = pdca{2}  % Distribution for males
male = 
  NormalDistribution

  Normal distribution
       mu = 130.472   [128.183, 132.76]
    sigma = 8.30339   [6.96947, 10.2736]

Calcule la pdf de cada distribución.

x_values = 50:1:250;
femalepdf = pdf(female,x_values);
malepdf = pdf(male,x_values);

Represente las pdf para una comparación visual de la distribución del peso por género.

figure
plot(x_values,femalepdf,'LineWidth',2)
hold on
plot(x_values,malepdf,'Color','r','LineStyle',':','LineWidth',2)
legend(gn,'Location','NorthEast')
hold off

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Male, Female.

Cargue los pesos y los géneros de los pacientes desde el archivo de datos patients.mat.

load patients
x = Weight;

Cree objetos de distribución de kernel ajustándolos a los datos, agrupados por género del paciente. Utilice una función de kernel triangular.

[pdca,gn,gl] = fitdist(x,'Kernel','By',Gender,'Kernel','triangle');

Visualice cada distribución en el arreglo de celdas pdca para ver las distribuciones de kernel para cada género.

female = pdca{1}  % Distribution for females
female = 
  KernelDistribution

    Kernel = triangle
    Bandwidth = 5.08961
    Support = unbounded

male = pdca{2}  % Distribution for males
male = 
  KernelDistribution

    Kernel = triangle
    Bandwidth = 4.25894
    Support = unbounded

Calcule la pdf de cada distribución.

x_values = 50:1:250;
femalepdf = pdf(female,x_values);
malepdf = pdf(male,x_values);

Represente las pdf para una comparación visual de la distribución del peso por género.

figure
plot(x_values,femalepdf,'LineWidth',2)
hold on
plot(x_values,malepdf,'Color','r','LineStyle',':','LineWidth',2)
legend(gn,'Location','NorthEast')
hold off

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Male, Female.

Argumentos de entrada

contraer todo

Datos de entrada, especificados como vector columna. fitdist ignora los valores NaN de x. Además, cualquier valor NaN en el vector de censura o vector de frecuencia provoca que fitdist ignore los valores correspondientes de x.

Tipos de datos: double

Nombre de distribución, especificado como uno de los siguientes vectores de caracteres o escalares de cadena. La distribución especificada por distname determina el tipo de objeto de distribución de probabilidad devuelto.

Nombre de distribuciónDescripciónObjeto de distribución
'Beta'Distribución betaBetaDistribution
'Binomial'Distribución binomialBinomialDistribution
'BirnbaumSaunders'Distribución Birnbaum-SaundersBirnbaumSaundersDistribution
'Burr'Distribución de BurrBurrDistribution
'Exponential'Distribución exponencialExponentialDistribution
'Extreme Value' o 'ev'Distribución de valores extremosExtremeValueDistribution
'Gamma'Distribución gammaGammaDistribution
'Generalized Extreme Value' o 'gev'Distribución de valores extremos generalizadaGeneralizedExtremeValueDistribution
'Generalized Pareto' o 'gp'Distribución de Pareto generalizadaGeneralizedParetoDistribution
'Half Normal' o 'hn'Distribución seminormalHalfNormalDistribution
'InverseGaussian'Distribución gaussiana inversaInverseGaussianDistribution
'Kernel'Distribución de kernelKernelDistribution
'Logistic'Distribución logísticaLogisticDistribution
'Loglogistic'Distribución loglogísticaLoglogisticDistribution
'Lognormal'Distribución lognormalLognormalDistribution
'Nakagami'Distribución de NakagamiNakagamiDistribution
'Negative Binomial' o 'nbin'Distribución binomial negativaNegativeBinomialDistribution
'Normal'Distribución normalNormalDistribution
'Poisson'Distribución de PoissonPoissonDistribution
'Rayleigh'Distribución de RayleighRayleighDistribution
'Rician'Distribución de RiceRicianDistribution
'Stable'Distribución estableStableDistribution
'tLocationScale'Distribución t de localización y escalatLocationScaleDistribution
'Weibull' o 'wbl'Distribución de WeibullWeibullDistribution

Variable de agrupación, especificada como arreglo categórico, vector lógico o numérico, arreglo de caracteres, arreglo de cadenas o arreglo de celdas de vectores de caracteres. Cada valor único en una variable de agrupación define un grupo.

Por ejemplo, si Gender es un arreglo de celdas de vectores de caracteres con valores 'Male' y 'Female', puede usar Gender como variable de agrupación para ajustar una distribución a sus datos por género.

Se puede utilizar más de una variable de agrupación especificando un arreglo de celdas de variables de agrupación. Las observaciones se colocan en el mismo grupo si tienen valores comunes en todas las variables de agrupación especificadas.

Por ejemplo, si Smoker es un vector lógico con valores 0 para no fumadores y 1 para fumadores, especificar el arreglo de celdas {Gender,Smoker} divide las observaciones en cuatro grupos: Fumador masculino, no fumador masculino, fumador femenino y no fumador femenino.

Ejemplo: {Gender,Smoker}

Tipos de datos: categorical | logical | single | double | char | string | cell

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: fitdist(x,'Kernel','Kernel','triangle') ajusta un objeto de distribución de kernel a los datos de x utilizando una función de kernel triangular.

Indicador lógico de los datos censurados, especificado como vector de valores lógicos que tiene el mismo tamaño que el vector de entrada x. El valor es 1 cuando el elemento correspondiente de x es una observación censurada a la derecha y 0 cuando el elemento correspondiente es una observación exacta. El valor predeterminado es un vector de 0, indicando que todas las observaciones son exactas.

fitdist ignora cualquier valor NaN en este vector de censura. Además, cualquier valor NaN de x o el vector de frecuencia provocan que fitdist ignore los valores correspondientes del vector de censura.

Este argumento solo es válido si distname es 'BirnbaumSaunders', 'Burr', 'Exponential', 'ExtremeValue', 'Gamma', 'InverseGaussian', 'Kernel', 'Logistic', 'Loglogistic', 'Lognormal', 'Nakagami', 'Normal', 'Rician', 'tLocationScale' o 'Weibull'.

Tipos de datos: logical

Frecuencia de observación, especificada como vector de valores enteros no negativos que tiene el mismo tamaño que el vector de entrada x. Cada elemento del vector de frecuencia especifica las frecuencias de los elementos correspondientes de x. El valor predeterminado es un vector de 1, indicando que cada valor de x aparece solo una vez.

fitdist ignora cualquier valor NaN en este vector de frecuencia. Además, cualquier valor NaN de x o el vector de censura provocan que fitdist ignore los valores correspondientes del vector de frecuencia.

Tipos de datos: single | double

Parámetros de control para el algoritmo iterativo de ajuste, especificados como estructura que se crea utilizando statset.

Tipos de datos: struct

El número de pruebas de la distribución binomial, especificado como un valor entero positivo.

Este argumento solo es válido cuando distname es 'Binomial' (distribución binomial).

Ejemplo: 'Ntrials',10

Tipos de datos: single | double

Parámetro de localización (umbral) para una distribución de Pareto generalizada, especificado como escalar.

Este argumento solo es válido cuando distname es 'Generalized Pareto' (distribución de Pareto generalizada).

El valor predeterminado es 0 cuando los datos de muestra x incluyen solo valores no negativos. Debe especificar theta si x incluye valores negativos.

Ejemplo: 'theta',1

Tipos de datos: single | double

Parámetro de localización para una distribución seminormal, especificado como escalar.

Este argumento solo es válido cuando distname es 'Half Normal' (distribución seminormal).

El valor predeterminado es 0 cuando los datos de muestra x incluyen solo valores no negativos. Debe especificar mu si x incluye valores negativos.

Ejemplo: 'mu',1

Tipos de datos: single | double

Tipo más suave de kernel para la distribución de kernel, especificado como uno de los siguientes:

  • 'normal'

  • 'box'

  • 'triangle'

  • 'epanechnikov'

Debe especificar distname como 'Kernel' para utilizar esta opción.

Soporte de la densidad del kernel para la distribución de kernel, especificado como 'unbounded', 'positive', o un vector de dos elementos.

ValorDescripción
'unbounded'La densidad puede extenderse por toda la línea real.
'positive'La densidad está restringida a los valores positivos.

De manera alternativa, puede especificar un vector de dos elementos dando límites finitos superior e inferior para el soporte de la densidad.

Debe especificar distname como 'Kernel' para utilizar esta opción.

Tipos de datos: single | double | char | string

Ancho de banda de la ventana de suavizado de kernel para una distribución de kernel, especificado como valor de escalar. El valor predeterminado utilizado por fitdist es óptimo para estimar densidades normales, pero puede que desee elegir un valor más pequeño para revelar características tales como modos múltiples. Debe especificar distname como 'Kernel' para utilizar esta opción.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Distribución de probabilidad, devuelta como objeto de distribución de probabilidad. La distribución especificada por distname determina el tipo de clase del objeto de distribución de probabilidad devuelto. Para ver la lista de valores de distname y los objetos de probabilidad correspondientes, consulte distname.

Objetos de distribución de probabilidad del tipo especificado por distname, devueltos como arreglo de celdas. Para ver la lista de valores de distname y los objetos de probabilidad correspondientes, consulte distname.

Etiquetas de grupo, devueltas como arreglo de celdas de vectores de caracteres.

Niveles de variables de agrupación, devueltos como arreglo de celdas de vectores de caracteres que contienen una columna para cada variable de agrupación.

Algoritmos

La función fitdist ajusta la mayoría de distribuciones usando la estimación de máxima verosimilitud. Las distribuciones normal y lognormal con datos no censurados son dos excepciones.

  • En el caso de la distribución normal no censurada, el valor estimado del parámetro sigma es la raíz cuadrada de la estimación no sesgada de la varianza.

  • En el caso de la distribución lognormal no censurada, el valor estimado del parámetro sigma es la raíz cuadrada de la estimación no sesgada de la varianza del logaritmo de los datos.

Funcionalidad alternativa

  • La app Distribution Fitter abre una interfaz gráfica de usuario para importar datos desde el área de trabajo y ajustar de manera interactiva una distribución de probabilidad a esos datos. A continuación, puede guardar la distribución en el área de trabajo como un objeto de distribución de probabilidad. Abra la app Distribution Fitter utilizando distributionFitter o haga clic en la pestaña Apps.

  • Para ajustar una distribución a datos censurados a la izquierda, doblemente censurados o datos censurados a intervalos, use mle. Puede encontrar las estimaciones de máxima verosimilitud usando la función mle y crear un objeto de distribución de probabilidad usando la función makedist. Para ver un ejemplo, consulte Find MLEs for Double-Censored Data.

Referencias

[1] Johnson, N. L., S. Kotz, and N. Balakrishnan. Continuous Univariate Distributions. Vol. 1, Hoboken, NJ: Wiley-Interscience, 1993.

[2] Johnson, N. L., S. Kotz, and N. Balakrishnan. Continuous Univariate Distributions. Vol. 2, Hoboken, NJ: Wiley-Interscience, 1994.

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

Capacidades ampliadas

Historial de versiones

Introducido en R2009a