Main Content

fitdist

확률 분포 객체를 데이터에 피팅하기

설명

예제

pd = fitdist(x,distname)distname으로 지정된 분포를 열 벡터 x의 데이터에 피팅하여 확률 분포 객체를 생성합니다.

예제

pd = fitdist(x,distname,Name,Value)는 하나 이상의 이름-값 쌍의 인수로 지정된 추가 옵션을 사용하여 확률 분포 객체를 생성합니다. 예를 들어, 반복 피팅 알고리즘에 사용할 제어 모수를 지정하거나 중도절단된 데이터를 나타낼 수 있습니다.

예제

[pdca,gn,gl] = fitdist(x,distname,'By',groupvar)distname으로 지정된 분포를 그룹화 변수 groupvar을 기반으로 x의 데이터에 피팅하여 확률 분포 객체를 생성합니다. 그런 다음 피팅된 확률 분포 객체로 구성된 셀형 배열 pdca, 그룹 레이블로 구성된 셀형 배열 gn, 그리고 그룹화 변수 레벨로 구성된 셀형 배열 gl을 반환합니다.

예제

[pdca,gn,gl] = fitdist(x,distname,'By',groupvar,Name,Value)는 하나 이상의 이름-값 쌍의 인수로 지정된 추가 옵션을 사용하여 위에 나와 있는 출력 인수를 반환합니다. 예를 들어, 반복 피팅 알고리즘에 사용할 제어 모수를 지정하거나 중도절단된 데이터를 나타낼 수 있습니다.

예제

모두 축소

정규분포를 표본 데이터에 피팅하고 히스토그램 및 q-q(분위수-분위수) 플롯을 사용하여 피팅을 검토합니다.

데이터 파일 patients.mat에서 환자의 체중을 불러옵니다.

load patients
x = Weight;

이를 데이터에 피팅하여 정규분포 객체를 생성합니다.

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

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

분포 객체 표시에는 평균(mu) 및 표준편차(sigma)에 대한 모수 추정값과 모수에 대한 95% 신뢰구간이 포함됩니다.

pd의 객체 함수를 사용하여 분포를 실행하고 난수를 생성할 수 있습니다. 지원되는 객체 함수를 표시합니다.

methods(pd)
Methods for class prob.NormalDistribution:

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

예를 들어, paramci 함수를 사용하여 95% 신뢰구간을 구합니다.

ci95 = paramci(pd)
ci95 = 2×2

  148.7277   23.3299
  159.2723   30.8674

유의수준(Alpha)을 지정하여 다른 신뢰수준을 갖는 신뢰구간을 구합니다. 99% 신뢰구간을 계산합니다.

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

  147.0213   22.4257
  160.9787   32.4182

분포의 pdf 값을 계산하고 플로팅합니다.

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.

histfit 함수를 사용하여 정규분포가 피팅된 히스토그램을 만듭니다. histfitfitdist를 사용하여 분포를 데이터에 피팅합니다.

histfit(x)

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

히스토그램에서 데이터가 두 개의 최빈값을 가지며 정규분포 피팅의 최빈값이 이 두 최빈값 사이에 있는 것을 볼 수 있습니다.

qqplot을 사용하여 표본 데이터 x의 분위수와 피팅된 분포의 이론적 분위수 값에 대한 q-q(분위수-분위수) 플롯을 생성합니다.

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

이 플롯은 직선이 아닙니다. 이는 데이터가 정규분포를 따르지 않음을 나타냅니다.

데이터 파일 patients.mat에서 환자의 체중을 불러옵니다.

load patients
x = Weight;

이를 데이터에 피팅하여 커널 분포 객체를 생성합니다. Epanechnikov 커널 함수를 사용합니다.

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

    Kernel = epanechnikov
    Bandwidth = 14.3792
    Support = unbounded

분포의 pdf를 플로팅합니다.

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.

데이터 파일 patients.mat에서 환자의 체중과 성별을 불러옵니다.

load patients
x = Weight;

환자 성별로 그룹화된 데이터에 피팅하여 정규분포 객체를 생성합니다.

[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'}

셀형 배열 pdca는 각 성별 그룹에 대해 하나씩, 총 두 개의 확률 분포 객체를 포함합니다. 셀형 배열 gn은 두 개의 그룹 레이블을 포함합니다. 셀형 배열 gl은 두 개의 그룹 수준을 포함합니다.

셀형 배열 pdca에 포함된 각 분포를 확인하여 환자 성별로 그룹화된 평균 mu와 표준편차 sigma를 비교합니다.

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]

각 분포의 pdf를 계산합니다.

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

성별을 기준으로 체중 분포를 시각적으로 비교할 수 있도록 pdf를 플로팅합니다.

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.

데이터 파일 patients.mat에서 환자의 체중과 성별을 불러옵니다.

load patients
x = Weight;

환자 성별로 그룹화된 데이터에 피팅하여 커널 분포 객체를 생성합니다. 삼각 커널 함수를 사용합니다.

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

셀형 배열 pdca에 포함된 각 분포를 검토하여 각 성별에 대한 커널 분포를 확인합니다.

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

각 분포의 pdf를 계산합니다.

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

성별을 기준으로 체중 분포를 시각적으로 비교할 수 있도록 pdf를 플로팅합니다.

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.

입력 인수

모두 축소

입력 데이터로, 열 벡터로 지정됩니다. fitdistxNaN 값을 무시합니다. 또한, 중도절단 벡터나 도수 벡터에 NaN 값이 포함되어 있을 경우 fitdistx에서 이에 대응하는 값을 무시합니다.

데이터형: double

분포 이름으로, 다음 문자형 벡터 또는 string형 스칼라 중 하나로 지정됩니다. distname으로 지정된 분포에 따라 반환되는 확률 분포 객체의 유형이 결정됩니다.

분포 이름설명분포 객체
'Beta'베타 분포BetaDistribution
'Binomial'이항분포BinomialDistribution
'BirnbaumSaunders'번바움-손더스(Birnbaum-Saunders) 분포BirnbaumSaundersDistribution
'Burr'버(Burr) 분포BurrDistribution
'Exponential'지수 분포ExponentialDistribution
'Extreme Value' 또는 'ev'극값 분포ExtremeValueDistribution
'Gamma'감마 분포GammaDistribution
'Generalized Extreme Value' 또는 'gev'일반화 극값 분포GeneralizedExtremeValueDistribution
'Generalized Pareto' 또는 'gp'일반화 파레토 분포GeneralizedParetoDistribution
'Half Normal' 또는 'hn'절반 정규분포HalfNormalDistribution
'InverseGaussian'역가우스 분포InverseGaussianDistribution
'Kernel'커널 분포KernelDistribution
'Logistic'로지스틱 분포LogisticDistribution
'Loglogistic'로그-로지스틱 분포LoglogisticDistribution
'Lognormal'로그정규분포LognormalDistribution
'Nakagami'나카가미(Nakagami) 분포NakagamiDistribution
'Negative Binomial' 또는 'nbin'음이항분포NegativeBinomialDistribution
'Normal'정규분포NormalDistribution
'Poisson'푸아송 분포PoissonDistribution
'Rayleigh'레일리(Rayleigh) 분포RayleighDistribution
'Rician'라이시안(Rician) 분포RicianDistribution
'Stable'안정분포StableDistribution
'tLocationScale't 위치-척도 분포tLocationScaleDistribution
'Weibull' 또는 'wbl'베이불(Weibull) 분포WeibullDistribution

그룹화 변수로, categorical형 배열, 논리형 벡터 또는 숫자형 벡터, 문자형 배열, string형 배열, 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 그룹화 변수 내 각각의 고유한 값은 그룹을 정의합니다.

예를 들어, Gender가 값 'Male''Female'을 갖는 문자형 벡터로 구성된 셀형 배열이면 Gender를 그룹화 변수로 사용하여 성별을 기준으로 분포를 데이터에 피팅할 수 있습니다.

그룹화 변수로 구성된 셀형 배열을 지정하여 둘 이상의 그룹화 변수를 사용할 수 있습니다. 지정된 모든 그룹화 변수에 대해 공통된 값을 갖는 관측값은 동일한 그룹에 배치됩니다.

예를 들어, Smoker가 금연자에 대해 값 0을 갖고 흡연자에 대해 값 1을 갖는 논리형 벡터이면 셀형 배열 {Gender,Smoker}를 지정하여 관측값을 네 개 그룹, 즉 남성 흡연자, 남성 비흡연자, 여성 흡연자, 여성 비흡연자 그룹으로 분할할 수 있습니다.

예: {Gender,Smoker}

데이터형: categorical | logical | single | double | char | string | cell

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: fitdist(x,'Kernel','Kernel','triangle')은 삼각 커널 함수를 사용하여 커널 분포 객체를 x의 데이터에 피팅합니다.

중도절단된 데이터를 나타내는 논리형 플래그로, 입력 벡터 x와 크기가 같은 논리값으로 구성된 벡터로 지정됩니다. 값은 x에서 대응하는 요소가 우측 중도절단된 관측값인 경우 1이고, 대응하는 요소가 정확한 관측값인 경우 0입니다. 디폴트 값은 0으로 구성된 벡터로, 모든 관측값이 정확한 값임을 나타냅니다.

fitdist는 이러한 중도절단 벡터에 포함된 NaN 값을 모두 무시합니다. 또한, x 또는 도수 벡터에 NaN 값이 하나라도 포함되어 있으면 fitdist가 중도절단 벡터에서 이에 대응되는 값을 무시합니다.

이 인수는 distname'BirnbaumSaunders', 'Burr', 'Exponential', 'ExtremeValue', 'Gamma', 'InverseGaussian', 'Kernel', 'Logistic', 'Loglogistic', 'Lognormal', 'Nakagami', 'Normal', 'Rician', 'tLocationScale' 또는 'Weibull'인 경우에만 유효합니다.

데이터형: logical

관측값 도수로, 입력 벡터 x와 크기가 같은 음이 아닌 정수 값으로 구성된 벡터로 지정됩니다. 도수 벡터의 각 요소는 x에서 대응되는 요소에 대한 도수를 지정합니다. 디폴트 값은 1로 구성된 벡터로, x에서 각 값이 한 번만 나타난다는 것을 나타냅니다.

fitdist는 이러한 도수 벡터에 포함된 NaN 값을 모두 무시합니다. 또한, x 또는 중도절단 벡터에 NaN 값이 하나라도 포함되어 있으면 fitdist가 도수 벡터에서 이에 대응되는 값을 무시합니다.

데이터형: single | double

반복 피팅 알고리즘에 사용할 제어 모수로, statset을 사용하여 생성하는 구조체로 지정됩니다.

데이터형: struct

이항분포에 사용할 시행 횟수로, 양의 정수 값으로 지정됩니다.

이 인수는 distname'Binomial'(이항분포)인 경우에만 유효합니다.

예: 'Ntrials',10

데이터형: single | double

일반화 파레토 분포에 사용할 위치(분계점) 모수로, 스칼라로 지정됩니다.

이 인수는 distname'Generalized Pareto'(일반화 파레토 분포)인 경우에만 유효합니다.

표본 데이터 x에 음이 아닌 값만 포함된 경우 디폴트 값은 0입니다. x에 음수 값이 포함된 경우에는 theta를 지정해야 합니다.

예: 'theta',1

데이터형: single | double

절반 정규분포에 사용할 위치 모수로, 스칼라로 지정됩니다.

이 인수는 distname'Half Normal'(절반 정규분포)인 경우에만 유효합니다.

표본 데이터 x에 음이 아닌 값만 포함된 경우 디폴트 값은 0입니다. x에 음수 값이 포함된 경우에는 mu를 지정해야 합니다.

예: 'mu',1

데이터형: single | double

커널 분포에 사용할 커널 평활화 방법의 유형으로, 다음 중 하나로 지정됩니다.

  • 'normal'

  • 'box'

  • 'triangle'

  • 'epanechnikov'

이 옵션을 사용하려면 distname'Kernel'로 지정해야 합니다.

커널 분포에 사용할 커널 밀도 지지 범위로, 'unbounded', 'positive' 또는 요소를 2개 가진 벡터로 지정됩니다.

설명
'unbounded'밀도가 실수 전체 범위로 연장될 수 있습니다.
'positive'밀도가 양의 값으로 제한됩니다.

또는, 밀도 지지 범위에 대해 유한한 하한 및 상한을 제공하는 요소를 2개 가진 벡터를 지정할 수 있습니다.

이 옵션을 사용하려면 distname'Kernel'로 지정해야 합니다.

데이터형: single | double | char | string

커널 분포에 사용할 커널 평활화 윈도우의 대역폭으로, 스칼라 값으로 지정됩니다. fitdist에서 사용하는 디폴트 값은 정규 밀도를 추정하는 데 적합하지만, 여러 개의 최빈값과 같은 특징을 나타내기 위해 더 작은 값을 선택하려는 경우도 있을 수 있습니다. 이 옵션을 사용하려면 distname'Kernel'로 지정해야 합니다.

데이터형: single | double

출력 인수

모두 축소

확률 분포로, 확률 분포 객체로 반환됩니다. distname으로 지정된 분포에 따라 반환되는 확률 분포 객체의 클래스 유형이 결정됩니다. distname 값과 이에 대응하는 확률 분포 객체 목록은 distname을 참조하십시오.

distname으로 지정된 유형의 확률 분포 객체로, 셀형 배열로 반환됩니다. distname 값과 이에 대응하는 확률 분포 객체 목록은 distname을 참조하십시오.

그룹 레이블로, 문자형 벡터로 구성된 셀형 배열로 반환됩니다.

그룹화 변수 수준으로, 각 그룹화 변수에 대해 하나의 열을 포함하는 문자형 벡터로 구성된 셀형 배열로 반환됩니다.

알고리즘

fitdist 함수는 최대가능도 추정값을 사용하여 대부분의 분포를 피팅합니다. 이에 두 가지 예외가 있는데 중도절단되지 않은 데이터를 포함하는 정규분포 및 로그정규분포에 대한 경우입니다.

  • 중도절단되지 않은 정규분포의 경우, 시그마 모수에 대해 추정된 값은 분산의 무편향 추정값에 대한 제곱근입니다.

  • 중도절단되지 않은 로그정규분포의 경우, 시그마 모수에 대해 추정된 값은 데이터의 로그 분산의 무편향 추정값에 대한 제곱근입니다.

대체 기능

  • 분포 피팅기 앱은 작업 공간에서 데이터를 가져오고 확률 분포를 이 데이터에 대화형 방식으로 피팅할 수 있는 그래픽 사용자 인터페이스(GUI)를 제공합니다. 그러면 분포를 확률 분포 객체로 작업 공간에 저장할 수 있습니다. distributionFitter를 사용하여 분포 피팅기 앱을 열거나 앱 탭에서 분포 피팅기를 클릭합니다.

  • 분포를 좌측 중도절단된 데이터, 양측 중도절단된 데이터 또는 구간 중도절단된 데이터에 피팅하려면 mle를 사용하십시오. mle 함수를 사용하여 최대가능도 추정값을 구하거나 makedist 함수를 사용하여 확률 분포 객체를 생성할 수 있습니다. 예제는 양측 중도절단된 데이터에 대한 MLE 구하기 항목을 참조하십시오.

참고 문헌

[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.

확장 기능

버전 내역

R2009a에 개발됨