fitdist
확률 분포 객체를 데이터에 피팅하기
구문
설명
는 하나 이상의 이름-값 쌍의 인수로 지정된 추가 옵션을 사용하여 확률 분포 객체를 생성합니다. 예를 들어, 반복 피팅 알고리즘에 사용할 제어 모수를 지정하거나 중도절단된 데이터를 나타낼 수 있습니다.pd
= fitdist(x
,distname
,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)
histfit
함수를 사용하여 정규분포가 피팅된 히스토그램을 만듭니다. histfit
은 fitdist
를 사용하여 분포를 데이터에 피팅합니다.
histfit(x)
히스토그램에서 데이터가 두 개의 최빈값을 가지며 정규분포 피팅의 최빈값이 이 두 최빈값 사이에 있는 것을 볼 수 있습니다.
qqplot
을 사용하여 표본 데이터 x
의 분위수와 피팅된 분포의 이론적 분위수 값에 대한 q-q(분위수-분위수) 플롯을 생성합니다.
qqplot(x,pd)
이 플롯은 직선이 아닙니다. 이는 데이터가 정규분포를 따르지 않음을 나타냅니다.
커널 분포를 데이터에 피팅하기
데이터 파일 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)
정규분포를 그룹화된 데이터에 피팅하기
데이터 파일 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
커널 분포를 그룹화된 데이터에 피팅하기
데이터 파일 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
입력 인수
x
— 입력 데이터
열 벡터
입력 데이터로, 열 벡터로 지정됩니다. fitdist
는 x
의 NaN
값을 무시합니다. 또한, 중도절단 벡터나 도수 벡터에 NaN
값이 포함되어 있을 경우 fitdist
가 x
에서 이에 대응하는 값을 무시합니다.
데이터형: double
distname
— 분포 이름
문자형 벡터 | string형 스칼라
분포 이름으로, 다음 문자형 벡터 또는 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 |
groupvar
— 그룹화 변수
categorical형 배열 | 논리형 또는 숫자형 벡터 | 문자형 배열 | string형 배열 | 문자형 벡터로 구성된 셀형 배열
그룹화 변수로, 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
의 데이터에 피팅합니다.
Censoring
— 중도절단된 데이터를 나타내는 논리형 플래그
0
(디폴트 값) | 논리값으로 구성된 벡터
중도절단된 데이터를 나타내는 논리형 플래그로, 입력 벡터 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
Frequency
— 관측값 도수
1
(디폴트 값) | 음이 아닌 정수 값으로 이루어진 벡터
관측값 도수로, 입력 벡터 x
와 크기가 같은 음이 아닌 정수 값으로 구성된 벡터로 지정됩니다. 도수 벡터의 각 요소는 x
에서 대응되는 요소에 대한 도수를 지정합니다. 디폴트 값은 1
로 구성된 벡터로, x
에서 각 값이 한 번만 나타난다는 것을 나타냅니다.
fitdist
는 이러한 도수 벡터에 포함된 NaN
값을 모두 무시합니다. 또한, x
또는 중도절단 벡터에 NaN
값이 하나라도 포함되어 있으면 fitdist
가 도수 벡터에서 이에 대응되는 값을 무시합니다.
데이터형: single
| double
Options
— 제어 모수
구조체
반복 피팅 알고리즘에 사용할 제어 모수로, statset
을 사용하여 생성하는 구조체로 지정됩니다.
데이터형: struct
NTrials
— 이항분포에 사용할 시행 횟수
1 (디폴트 값) | 양의 정수 값
이항분포에 사용할 시행 횟수로, 양의 정수 값으로 지정됩니다.
이 인수는 distname
이 'Binomial'
(이항분포)인 경우에만 유효합니다.
예: 'Ntrials',10
데이터형: single
| double
Kernel
— 커널 분포에 사용할 커널 평활화 방법의 유형
'normal'
(디폴트 값) | 'box'
| 'triangle'
| 'epanechnikov'
커널 분포에 사용할 커널 평활화 방법의 유형으로, 다음 중 하나로 지정됩니다.
'normal'
'box'
'triangle'
'epanechnikov'
이 옵션을 사용하려면 distname
을 'Kernel'
로 지정해야 합니다.
Support
— 커널 분포에 사용할 커널 밀도 지지 범위
'unbounded'
(디폴트 값) | 'positive'
| 요소를 2개 가진 벡터
커널 분포에 사용할 커널 밀도 지지 범위로, 'unbounded'
, 'positive'
또는 요소를 2개 가진 벡터로 지정됩니다.
값 | 설명 |
---|---|
'unbounded' | 밀도가 실수 전체 범위로 연장될 수 있습니다. |
'positive' | 밀도가 양의 값으로 제한됩니다. |
또는, 밀도 지지 범위에 대해 유한한 하한 및 상한을 제공하는 요소를 2개 가진 벡터를 지정할 수 있습니다.
이 옵션을 사용하려면 distname
을 'Kernel'
로 지정해야 합니다.
데이터형: single
| double
| char
| string
Width
— 커널 분포에 사용할 커널 평활화 윈도우의 대역폭
스칼라 값
커널 분포에 사용할 커널 평활화 윈도우의 대역폭으로, 스칼라 값으로 지정됩니다. fitdist
에서 사용하는 디폴트 값은 정규 밀도를 추정하는 데 적합하지만, 여러 개의 최빈값과 같은 특징을 나타내기 위해 더 작은 값을 선택하려는 경우도 있을 수 있습니다. 이 옵션을 사용하려면 distname
을 'Kernel'
로 지정해야 합니다.
데이터형: single
| double
출력 인수
pd
— 확률 분포
확률 분포 객체
확률 분포로, 확률 분포 객체로 반환됩니다. distname
으로 지정된 분포에 따라 반환되는 확률 분포 객체의 클래스 유형이 결정됩니다. distname
값과 이에 대응하는 확률 분포 객체 목록은 distname
을 참조하십시오.
pdca
— 확률 분포 객체
셀형 배열
distname
으로 지정된 유형의 확률 분포 객체로, 셀형 배열로 반환됩니다. distname
값과 이에 대응하는 확률 분포 객체 목록은 distname
을 참조하십시오.
gn
— 그룹 레이블
문자형 벡터로 구성된 셀형 배열
그룹 레이블로, 문자형 벡터로 구성된 셀형 배열로 반환됩니다.
gl
— 그룹화 변수 수준
문자형 벡터로 구성된 셀형 배열
그룹화 변수 수준으로, 각 그룹화 변수에 대해 하나의 열을 포함하는 문자형 벡터로 구성된 셀형 배열로 반환됩니다.
알고리즘
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.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
지원되는 구문은 다음과 같습니다.
그룹화 변수pd
= fitdist(x
,distname
)pd
= fitdist(x
,distname
,Name,Value
)'By',groupvar
과 관련 출력 인수pdca
,gn
,gl
을 포함한 구문은 코드 생성에서 지원되지 않습니다.fitdist
함수는 베타 분포, 지수 분포, 극값 분포, 로그정규분포, 정규분포 및 베이불 분포를 위한 코드 생성을 지원합니다.distname
의 값은'Beta'
,'Exponential'
,'ExtremeValue'
,'Lognormal'
,'Normal'
또는'Weibull'
일 수 있습니다.distname
의 값은 컴파일타임 상수여야 합니다.
x
,'Censoring'
,'Frequency'
의 값은NaN
값을 포함해서는 안 됩니다.코드 생성 시 베타 분포의
'Frequency'
값은 무시됩니다.'Frequency'
값을 지정하는 대신,x
에 중복 값을 직접 추가하십시오. 그러면x
가 원하는 도수를 가집니다.코드 생성 시 입력 인수
groupvar
,NTrials
,Theta
,mu
,Kernel
,Support
,Width
는 지원되지 않습니다.이름-값 쌍의 인수에 지정하는 이름은 컴파일타임 상수여야 합니다.
pd
의 객체 함수cdf
,icdf
,iqr
,mean
,median
,pdf
,std
,truncate
,var
은 코드 생성을 지원합니다.
코드 생성에 대한 자세한 내용은 Introduction to Code Generation 항목 및 Code Generation for Probability Distribution Objects 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
입력 인수
distname
을'Rician'
또는'Stable'
로 지정할 수 없습니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2009a에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 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)