R: 독립 성분 분석(ICA)

독립성분분석을 지원하는 패키지에는 fastICA와 mlica가 있다. 보통 fastICA가 널리 쓰인다.

예제 자료 만들기

간단한 예제를 하나 따라가면서 해보자. 먼저 2개의 값을 가지는 500개의 자료를 만들자.

S = matrix(runif(1000), 500, 2)

다음엔 혼합 행렬(mixing matrix)를 만든다.

A = matrix(c(1, 1, -1, 3), 2, 2, byrow = TRUE)

원자료와 혼합행렬을 곱하면 관찰자료가 만들어진다.

X <- S%*%A

fastICA

fastICA는 간단히 패키지를 불러들인 다음 관찰자료와 성분의 개수만 넣어주면 된다.

require(fastICA)
a <- fastICA(X, 2)

mlica

mlica는 PriorNormPCA으로 주성분분석을 실시한 후에, proposeNCP으로 성분 수를 결정하고 mlica 함수에 넘겨주면 된다.

require(mlica)
prPCA <- PriorNormPCA(S)
prNCP <- proposeNCP(prPCA,0.01)
b = mlica(prNCP,nruns=5)

그래프

맨 위의 그림을 그래프로 그리려면 아래와 같다.

par(mfrow = c(1, 5))
plot(S, main="original")
plot(a$X, main = "Pre-processed",col="red")
plot(a$X%*%a$K, main = "PCA",col="green")
plot(a$S, main = "fastICA",col="blue")
plot(b$S, main = "mlICA",col="purple")