이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
ksdensity
일변량 데이터와 이변량 데이터에 대한 커널 평활화 함수 추정값
구문
설명
[
는 위에 열거된 구문에 나와 있는 입력 인수와 함께 하나 이상의 이름-값 쌍의 인수로 지정된 추가 옵션을 사용합니다. 예를 들어, 확률 밀도, 누적 확률, 생존 함수 등과 같이 f
,xi
] = ksdensity(___,Name,Value
)ksdensity
가 계산하는 함수 유형을 정의할 수 있습니다. 또는, 평활화 윈도우의 대역폭을 지정할 수 있습니다.
예제
밀도 추정하기
두 개의 혼합된 정규분포에서 표본 데이터 세트를 생성합니다.
rng('default') % For reproducibility x = [randn(30,1); 5+randn(30,1)];
추정된 밀도를 플로팅합니다.
[f,xi] = ksdensity(x); figure plot(xi,f);
밀도 추정값은 표본의 이봉 분포를 보여줍니다.
경계 수정을 사용하여 밀도 추정하기
절반 정규분포에서 음이 아닌 표본 데이터 세트를 생성합니다.
rng('default') % For reproducibility pd = makedist('HalfNormal','mu',0,'sigma',1); x = random(pd,100,1);
'BoundaryCorrection'
이름-값 쌍의 인수를 사용하여 두 개의 서로 다른 경계 수정 방법인 로그 변환과 반사를 통해 pdf를 추정합니다.
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');
추정된 두 pdf를 플로팅합니다.
plot(xi1,f1,xi2,f2) lgd = legend('log','reflection'); title(lgd, 'Boundary Correction Method') xl = xlim; xlim([xl(1)-0.25 xl(2)])
양의 지지 범위 또는 유계 지지 범위를 지정하면 ksdensity
는 경계 수정 방법을 사용합니다. 디폴트 경계 수정 방법은 로그 변환입니다. ksdensity
가 지지 범위를 다시 변환할 경우 커널 밀도 추정량에 1/x
항이 추가됩니다. 따라서, 추정값은 x = 0
근방에서 피크를 가집니다. 반면, 반사 방법은 경계 근처에서 원치 않는 피크를 발생시키지 않습니다.
지정된 값에서 누적 분포 함수 추정하기
표본 데이터를 불러옵니다.
load hospital
지정된 값 세트에서 추정된 cdf를 계산하고 플로팅합니다.
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
가 누적 분포 함수 추정값을 너무 많이 평활화하는 것처럼 보입니다. 더 작은 대역폭을 가지는 추정값이 경험적 누적 분포 함수에 더 가까운 추정값을 생성할 가능성이 있습니다.
평활화 윈도우의 대역폭을 반환합니다.
bw
bw = 0.1070
더 작은 대역폭을 사용하여 누적 분포 함수 추정값을 플로팅합니다.
[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
더 작은 대역폭을 사용한 ksdensity
추정값이 경험적 누적 분포 함수와 더 잘 일치합니다.
주어진 개수의 점에 대해 추정된 누적 분포 함수 플로팅하기
표본 데이터를 불러옵니다.
load hospital
균일한 간격으로 배치된 50개 점에서 계산된 추정된 cdf를 플로팅합니다.
figure() ksdensity(hospital.Weight,'Support','positive','Function','cdf',... 'NumPoints',50) xlabel('Patient weights') ylabel('Estimated cdf')
중도절단된 실패 데이터에 대한 생존 및 누적 위험 추정하기
평균이 3인 지수 분포에서 표본 데이터를 생성합니다.
rng('default') % For reproducibility x = random('exp',3,100,1);
중도절단을 나타내는 논리형 벡터를 생성합니다. 여기서, 수명이 10보다 긴 관측값은 중도절단됩니다.
T = 10; cens = (x>T);
추정된 밀도 함수를 계산하고 플로팅합니다.
figure ksdensity(x,'Support','positive','Censoring',cens);
생존 함수를 계산하고 플로팅합니다.
figure ksdensity(x,'Support','positive','Censoring',cens,... 'Function','survivor');
누적 위험 함수를 계산하고 플로팅합니다.
figure ksdensity(x,'Support','positive','Censoring',cens,... 'Function','cumhazard');
지정된 확률 값에 대해 역누적 분포 함수 추정하기
두 개의 혼합된 정규분포를 생성하고 지정된 확률 값 세트에서 추정된 역누적 분포 함수를 플로팅합니다.
rng('default') % For reproducibility x = [randn(30,1); 5+randn(30,1)]; pi = linspace(.01,.99,99); figure ksdensity(x,pi,'Function','icdf');
평활화 윈도우의 대역폭 반환하기
두 개의 혼합된 정규분포를 생성합니다.
rng('default') % For reproducibility x = [randn(30,1); 5+randn(30,1)];
확률 밀도 추정값에 대한 평활화 윈도우의 대역폭을 반환합니다.
[f,xi,bw] = ksdensity(x); bw
bw = 1.5141
디폴트 대역폭은 정규 밀도에 가장 적합합니다.
추정된 밀도를 플로팅합니다.
figure plot(xi,f); xlabel('xi') ylabel('f') hold on
증가된 대역폭 값을 사용하여 밀도를 플로팅합니다.
[f,xi] = ksdensity(x,'Bandwidth',1.8); plot(xi,f,'--r','LineWidth',1.5)
대역폭이 클수록 밀도 추정값이 더 평활화되며, 이 경우 분포의 일부 특징이 가려질 수 있습니다.
이제, 감소된 대역폭 값을 사용하여 밀도를 플로팅합니다.
[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
대역폭이 작을수록 밀도 추정값이 덜 평활화되며, 이 경우 표본의 일부 특징이 과장됩니다.
이변량 데이터의 커널 밀도 추정값 플로팅하기
밀도를 계산할 점으로 구성된 2열 벡터를 생성합니다.
gridx1 = -0.25:.05:1.25; gridx2 = 0:.1:15; [x1,x2] = meshgrid(gridx1, gridx2); x1 = x1(:); x2 = x2(:); xi = [x1 x2];
혼합된 이변량 정규분포에서 난수를 포함하는 30×2 행렬을 생성합니다.
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)];
표본 데이터에 대한 추정된 밀도를 플로팅합니다.
figure ksdensity(x,xi);
입력 인수
x
— 표본 데이터
열 벡터 | 2열 행렬
ksdensity
가 f
값을 반환하는 데 사용하는 표본 데이터로, 열 벡터 또는 2열 행렬로 지정됩니다. 일변량 데이터에는 열 벡터를 사용하고, 이변량 데이터에는 2열 행렬을 사용합니다.
예: [f,xi] = ksdensity(x)
데이터형: single
| double
pts
— f
를 계산할 점
벡터 | 2열 행렬
f
를 계산할 점으로, 벡터 또는 2열 행렬로 지정됩니다. 이변량 데이터에 대해 pts
는 행 벡터 또는 열 벡터일 수 있습니다. 반환되는 출력값 f
의 길이는 pts
의 점 개수와 동일합니다.
예: pts = (0:1:25); ksdensity(x,pts);
데이터형: single
| double
ax
— axes 핸들
핸들
ksdensity
가 플로팅할 Figure에 대한 axes 핸들로, 핸들로 지정됩니다.
예를 들어, h
가 Figure에 대한 핸들이면 ksdensity
는 다음과 같이 해당 Figure에 대해 플로팅할 수 있습니다.
예: ksdensity(h,x)
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: 'Censoring',cens,'Kernel','triangle','NumPoints',20,'Function','cdf'
는 ksdensity
가 삼각 커널 평활화 함수를 사용하고 벡터 cens
에 포함된 중도절단된 데이터 정보를 고려하여 데이터의 범위를 포괄하는 균일한 간격으로 배치된 20개의 점에서 계산을 수행함으로써 cdf를 추정하는 것으로 지정합니다.
Bandwidth
— 커널 평활화 윈도우의 대역폭
정규 밀도의 최적 값 (디폴트 값) | 스칼라 값 | 요소를 2개 가진 벡터
x
에 포함된 점 개수의 함수인 커널 평활화 윈도우의 대역폭으로, 'Bandwidth'
와 함께 스칼라 값이 쉼표로 구분되어 지정됩니다. 표본 데이터가 이변량이면 Bandwidth
도 요소를 2개 가진 벡터일 수 있습니다. 디폴트 값은 정규 밀도를 추정하는 데 적합하지만[1], 더 큰 값이나 더 작은 값을 선택하여 평활화 정도를 조정할 수도 있습니다.
'BoundaryCorrection'
을 'log'
(디폴트 값)로 지정하고 'Support'
를 'positive'
또는 벡터 [L U]
로 지정할 경우, ksdensity
는 로그 변환을 사용하여 유계 데이터를 비유계 데이터로 변환합니다. 'Bandwidth'
의 값은 변환된 값의 범위에 있습니다.
예: 'Bandwidth',0.8
데이터형: single
| double
BoundaryCorrection
— 경계 수정 방법
'log' (디폴트 값) | 'reflection'
경계 수정 방법으로, 'BoundaryCorrection'
과 함께 'log'
또는 'reflection'
이 쉼표로 구분되어 지정됩니다.
값 | 설명 |
---|---|
'log' |
|
'reflection' |
|
ksdensity
는 'Support'
를 'unbounded'
가 아닌 값으로 지정하는 경우에만 경계 수정을 적용합니다.
예: 'BoundaryCorrection','reflection'
Censoring
— 논리형 벡터
0으로 구성된 벡터 (디폴트 값) | 0과 1로 구성된 벡터
중도절단된 항목을 나타내는 논리형 벡터로, 'Censoring'
과 함께 이진 값으로 구성된 벡터가 쉼표로 구분되어 지정됩니다. 0 값은 중도절단이 없음을 나타내고, 1은 관측값이 중도절단되었음을 나타냅니다. 디폴트 값은 중도절단 없음입니다. 이 이름-값 쌍은 일변량 데이터에만 유효합니다.
예: 'Censoring',censdata
데이터형: logical
Function
— 추정할 함수
'pdf'
(디폴트 값) | 'cdf'
| 'icdf'
| 'survivor'
| 'cumhazard'
추정할 함수로, 'Function'
과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.
값 | 설명 |
---|---|
'pdf' | 확률 밀도 함수. |
'cdf' | 누적 분포 함수. |
'icdf' | 역누적 분포 함수. 이 값은 일변량 데이터에만 유효합니다. |
'survivor' | 생존 함수. |
'cumhazard' | 누적 위험 함수. 이 값은 일변량 데이터에만 유효합니다. |
예: 'Function'
,'icdf'
Kernel
— 커널 평활화 유형
'normal'
(디폴트 값) | 'box'
| 'triangle'
| 'epanechnikov'
| 함수 핸들 | 문자형 벡터 | string형 스칼라
커널 평활화 유형으로, 'Kernel'
과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.
'normal'
(디폴트 값)'box'
'triangle'
'epanechnikov'
사용자 지정 함수 또는 내장 함수인 커널 함수. 함수를 함수 핸들(예:
@myfunction
또는@normpdf
) 또는 문자형 벡터나 string형 스칼라(예:'myfunction'
또는'normpdf'
)로 지정하십시오. 밀도가 계산된 위치와 데이터 값 간의 거리로 구성된 배열을 하나의 인수로 갖는 지정된 함수가 소프트웨어에 의해 호출됩니다. 함수는 커널 함수의 대응 값을 포함하는 같은 크기의 배열을 반환해야 합니다.'Function'
이'pdf'
이면 커널 함수가 밀도 값을 반환합니다. 그렇지 않은 경우 누적 확률 값을 반환합니다.'Function'
이'icdf'
인 경우 사용자 지정 커널을 지정하면 오류가 반환됩니다.
이변량 데이터에 대해 ksdensity
는 동일한 커널을 각 차원에 적용합니다.
예: 'Kernel','box'
NumPoints
— 균일한 간격으로 배치된 점의 개수
100 (디폴트 값) | 스칼라 값
xi
에 균일한 간격으로 배치된 점의 개수로, 'NumPoints'
와 함께 스칼라 값이 쉼표로 구분되어 지정됩니다. 이 이름-값 쌍은 일변량 데이터에만 유효합니다.
예를 들어, 표본 데이터 범위 내에 균일한 간격으로 배치된 80개 점에서 지정된 함수의 커널 평활화 추정값에 대해 다음을 입력합니다.
예: 'NumPoints',80
데이터형: single
| double
Support
— 밀도에 대한 지지 범위
'unbounded'
(디폴트 값) | 'positive'
| 요소를 2개 가진 벡터, [L U]
| 2×2 행렬, [L1 L2; U1 U2]
밀도에 대한 지지 범위로, 'support'
와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.
값 | 설명 |
---|---|
'unbounded' | 디폴트 값. 밀도가 실수 수직선 전체에 놓일 수 있도록 합니다. |
'positive' | 밀도를 양의 값으로 제한합니다. |
요소를 2개 가진 벡터, [L U] | 밀도 지지 범위에 대해 유한한 하한과 상한을 제공합니다. 이 옵션은 일변량 표본 데이터에만 유효합니다. |
2×2 행렬, [L1 L2; U1 U2] | 밀도 지지 범위에 대해 유한한 하한과 상한을 제공합니다. 첫 번째 행은 하한을 포함하고, 두 번째 행은 상한을 포함합니다. 이 옵션은 이변량 표본 데이터에만 유효합니다. |
이변량 데이터에 대해 'Support'
는 [0 -Inf; Inf Inf]
또는 [0 L; Inf U]
로 지정된 양의 변수, 비유계 변수 또는 유계 변수의 조합일 수 있습니다.
예: 'Support','positive'
예: 'Support',[0 10]
데이터형: single
| double
| char
| string
PlotFcn
— 커널 밀도 플롯을 생성하는 데 사용되는 함수
'surf'
(디폴트 값) | 'contour'
| 'plot3'
| 'surfc'
Weights
— 표본 데이터의 가중치
벡터
표본 데이터의 가중치로, 'Weights'
와 함께 길이가 size(x,1)
(여기서 x
는 표본 데이터임)인 벡터가 쉼표로 구분되어 지정됩니다.
예: 'Weights',xw
데이터형: single
| double
출력 인수
bw
— 평활화 윈도우의 대역폭
스칼라 값
평활화 윈도우의 대역폭으로, 스칼라 값으로 반환됩니다.
'BoundaryCorrection'
을 'log'
(디폴트 값)로 지정하고 'Support'
를 'positive'
또는 벡터 [L U]
로 지정할 경우, ksdensity
는 로그 변환을 사용하여 유계 데이터를 비유계 데이터로 변환합니다. bw
의 값은 변환된 값의 범위에 있습니다.
세부 정보
커널 분포
커널 분포는 확률 변수의 확률 밀도 함수(pdf)에 대한 비모수적 표현입니다. 모수 분포가 데이터를 올바르게 설명할 수 없거나 사용자가 데이터 분포와 관련하여 가정을 하지 않으려는 경우 커널 분포를 사용할 수 있습니다. 커널 분포는 결과로 생성되는 밀도 곡선의 매끄러운 정도를 제어하는 평활화 함수와 대역폭 값으로 정의됩니다.
커널 밀도 추정량은 확률 변수에 대한 추정된 pdf입니다. x의 실수 값에 대해 커널 밀도 추정량 공식은 다음과 같이 주어집니다.
여기서 x1, x2, …, xn은 알 수 없는 분포의 임의 표본이고, n은 표본 크기이며, 는 커널 평활화 함수이고, h는 대역폭입니다.
x의 실수 값에 대한 누적 분포 함수(cdf)의 커널 추정량은 다음과 같이 주어집니다.
여기서 입니다.
자세한 내용은 커널 분포 항목을 참조하십시오.
반사 방법
반사 방법은 확률 변수가 유계 지지 범위를 가질 때 커널 밀도 추정량을 정확히 구하는 경계 수정 방법입니다. 'BoundaryCorrection','reflection'
을 지정할 경우, ksdensity
는 반사 방법을 사용합니다. 이 방법은 경계 근처에 반사된 데이터를 추가하여 유계 데이터를 늘리고 pdf를 추정합니다. 그런 다음, ksdensity
는 원래 지지 범위에 대한 추정된 pdf의 적분이 1이 되도록, 적절한 정규화를 통해 원래 지지 범위에 대응되는 추정된 pdf를 반환합니다.
'Support',[L U]
를 추가로 지정할 경우, ksdensity
는 다음과 같이 커널 추정량을 구합니다.
'Function'
이'pdf'
일 경우 커널 밀도 추정량은 다음과 같습니다.L ≤ x ≤ U에 대해 .
여기서 , , xi는
i
번째 표본 데이터입니다.'Function'
이'cdf'
일 경우 cdf에 대한 커널 추정량은 다음과 같습니다.L ≤ x ≤ U에 대해 .
역 cdf, 생존 함수 또는 누적 위험 함수에 대한 커널 추정량을 구하기 위해(
'Function'
이'icdf'
,'survivor'
또는'cumhazrd'
인 경우),ksdensity
는 와 를 모두 사용합니다.
'Support'
를 'positive'
또는 [0 inf]
로 추가로 지정할 경우, ksdensity
는 위의 방정식에서 [L U]
를 [0 inf]
로 바꾸어 커널 추정량을 구합니다.
대체 기능
MATLAB® kde
함수도 일변량 데이터에 대한 pdf 또는 cdf를 추정하는 데 사용할 수 있습니다. ksdensity
함수와 달리, kde
는 경계 수정 방법 또는 데이터 중도절단을 지원하지 않습니다.
참고 문헌
[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.
확장 기능
tall형 배열
메모리에 담을 수 없을 정도로 많은 행을 가진 배열을 계산할 수 있습니다.
이 함수는 메모리에 담을 수 없는 데이터에 대한 tall형 배열을 지원하지만 다음과 같은 몇 가지 제한 사항이 있습니다.
입력 데이터에 대한 추가 통과 또는 정렬을 필요로 하는 일부 옵션은 지원되지 않습니다.
'BoundaryCorrection'
'Censoring'
'Support'
(지지 범위는 항상 비유계임).
(중앙값 절대 편차 대신) 표준편차를 사용하여 대역폭을 계산합니다.
자세한 내용은 메모리에 담을 수 없는 큰 데이터를 위한 tall형 배열 항목을 참조하십시오.
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
플로팅은 지원되지 않습니다.
이름-값 쌍의 인수에 지정하는 이름은 컴파일타임 상수여야 합니다.
'BoundaryCorrection'
,'Function'
,'Kernel'
이름-값 쌍의 인수의 값도 컴파일타임 상수여야 합니다. 예를 들어, 생성되는 코드에'Function','cdf'
이름-값 쌍의 인수를 사용하려면codegen
의-args
값에{coder.Constant('Function'),coder.Constant('cdf')}
를 포함시키십시오.'Kernel'
이름-값 쌍의 인수의 값은 사용자 지정 함수 핸들일 수 없습니다. 사용자 지정 커널 함수를 지정하려면 문자형 벡터 또는 string형 스칼라를 사용하십시오.'Support'
이름-값 쌍의 인수 값의 경우, 컴파일타임 데이터형과 런타임 데이터형이 일치해야 합니다.
코드 생성에 대한 자세한 내용은 Introduction to Code Generation 항목 및 General Code Generation Workflow 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
이 함수는 GPU 배열을 완전히 지원합니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
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)