판별분석(Discriminant analysis)
- 알려진 군집에 따른 다변량 자료행렬 준비
- 각 군집 별 자료의 다변량 정규성 확인
- 각 군집의 공분산행렬의 동질성 확인
- 2와 3단계의 결과에 따라
- 선형판별분석(Linear discriminant analysis, LDA): 정규성 및 공분산의 동질성 모두 성립시
- 이차판별분석(Quadratic discriminant analysis, LDA): 정규성만 성립시
- 피셔선형판별분석: 공분산의 동질성만 성립시
- 오분류율을 계산하여 판별함수의 타당성 확인
- 임의의 개체를 적합된 판별함수로 적절한 군집으로 분류
두 군집의 판별분석
- x는 두 군집 C1,C2에서 관측 가정.
- f1(x): 군집 C1에서의 확률함수
- f2(x): 군집 C2에서의 확률함수
- 오분류 평균비용(Expected cost of misclassification, ECM)
- ECM 분류규칙
f2(x)f1(x)>c(2∣1)p1c(1∣2)p2 ⇔ 군집 C1으로 판별
- 총오분류확률(Total probability of misclassification, TPM)
TPM=P(군집 C1으로 오분류)+P(군집 C2로 오분류)=p2∫Bf2(x)+p1∫Bcf1(x)
- TPM 분류규칙
f2(x)f1(x)>p1p2 ⇔ 군집 C1으로 판별
다변량 정규성을 따르는 두 집단의 판별분석
fk(x)=(2π1)p∣Σk∣−1/2exp[−21(x−μk)′Σk−1(x−μk)], k=1,2
-
군집 C1의 p차원의 확률벡터 x의 확률함수는 f1(x)이고 n1개의 표본 추출
-
군집 C2의 p차원의 확률벡터 x의 확률함수는 f2(x)이고 n2개의 표본 추출
-
공분산행렬의 동질성
- xkij: 군집 Ck에서 i번째 표본의 j번째 확률변수. k=1,2,…,g i=1,2,…,nk, j=1,2,…,p
- H0:Σ1=Σ2=⋯=Σg
- 우도비검정(likelihood ratio test)
ΛSkSp−2logΛ=k=1∏g(∣Sp∣∣Sk∣)(nk−1)/2=k=1∏g∣Sk−1Sp∣−(nk−1)/2=nk−11Yk′Yk, Y={ykij}ij, ykij=xkij−μj=∑k=1g(nk−1)1k=1∑g(nk−1)Sk≈χdf2, df=(#parameter)−(#parameter under H0)=p(p+1)(g−1)/2
- Box's M-test: nk>20, p≤5, g≤5
−2γlogΛ≈χdf2, γ=1−[k=1∑gnk−11−∑k=1g(nk−1)1][6(p+1)(g−1)2p2+3p−1]
- 공분산행렬의 동질성 확인 시: −2γlogΛ≤χα(df)
- ECM 분류규칙: x0인 대상은 군집 C1에 속한 것으로 판별하는 선형분류규칙.
21[(x0−μ2)′Σ−1(x0−μ2)−(x0−μ1)′Σ−1(x0−μ1)]=21[(μ1−μ2)′Σ−1x0−(x0−μ2)′Σ−1μ2+(x0−μ1)′Σ−1μ1]=21[(μ1−μ2)′Σ−1x0−x0′Σ−1(μ2−μ1)+μ2′Σ−1μ2−μ1′Σ−1μ1]=(μ1−μ2)′Σ−1x0+21(μ2′Σ−1μ2−μ1′Σ−1μ1)=(μ1−μ2)′Σ−1x0+21(μ2−μ1)′Σ−1(μ2+μ1)
f2(x0)f1(x0)>c(2∣1)p1c(1∣2)p2⇔ (μ1−μ2)′Σ−1x0−21(μ1−μ2)′Σ−1(μ1+μ2)>log[c(2∣1)p1c(1∣2)p2]⇔ L(x0)−β0>log[c(2∣1)p1c(1∣2)p2]L^(x0)=(μ^1−μ^2)′Σ^−1x0=(xˉk=1−xˉk=2)′Sp−1x0β^0=21(μ^1−μ^2)′Σ^−1(μ^1+μ^2)=21(xˉk=1−xˉk=2)′Sp−1(xˉk=1+xˉk=2)⇔ L^(x0)−β^0>log[c(2∣1)p1c(1∣2)p2]
- L^(x0)는 x0=[x01,x02,…,x0p]의 선형 결합.
- 공분산행렬의 이질성 확인 시: −2γlogΛ>χα(df). 이차분류규칙
여러 군집의 판별분석
- g>2
- 군집 Cl을 Ck로 오분류할 확률과 손실비용을 각각 P(k∣l),c(k∣l)인 경우
ECMl=k=1,k=l∑gP(k∣l)c(k∣l), l=1,2,…,g
- Total ECM: 표본이 군집 Ck에서 뽑힐 확률 pk
TECM=l=1∑gplECMl=l=1∑gplk=1,k=l∑gP(k∣l)c(k∣l), l=1,2,…,g
- TECM 분류규칙
- Dk(x0)가 최소값을 갖는 k확인
Dk(x0)=l=1,l=k∑gplfl(x0)c(k∣l), k=1,2,…,g
- x0는 군집 Ck소속으로 판별
finance=read.csv("finance.csv",header=TRUE)
head(finance)
dim(finance)
library(MASS)
finance.lda <- lda(y~x1+x2+x3+x4,data=finance)
print(finance.lda)
pred1 <- predict(finance.lda,finance)
library(biotools)
finance.boxM <- boxM(finance[,2:5],finance$y)
tmp=finance.lda$means
# tmp4=with(finance,x1*1.0023665+x2*3.9998578+x3*0.8450508-x4*1.0153181)
tmp4=as.matrix(finance[,2:5])%*%matrix(finance.lda[[4]],ncol=1)
tapply(tmp4,finance$y,function(xxx) round(c(mean(xxx),sd(xxx)),2))
par(mfcol=c(1,2))
boxplot(pred1$x~finance$y);abline(h=0,col='grey')
boxplot(tmp4~finance$y);abline(h=0,col='grey')
cbind(finance$y,pred1$x,tmp4,pred1$x-tmp4)
finance.pred1 <- cbind(finance,pred1$x,pred1$posterior,pred1$class)
print(finance.pred1,digits=3)
table(finance$y,pred1$class)
- 정오분류표(Missclassification table)
finance.ctbl1 <- table(finance$y,pred1$class)
# install.packages("DescTools")
library(DescTools)
Desc(finance.ctbl1,digits=2)
# install.packages("biotools")
library(biotools)
finance.boxM <- boxM(finance[,2:5],finance$y)
print(finance.boxM)
print(finance.boxM$cov)
print(finance.boxM$pooled)
library(MASS)
finance.qda <- qda(y~x1+x2+x3+x4,data=finance)
pred2 <- predict(finance.qda,finance)
finance.ctbl2 <- table(finance$y,pred2$class)
library(DescTools)
Desc(finance.ctbl2,digits=2)