본문 바로가기
자료처리

MATLAB 주성분 분석

by Prof. Sung-Deuk Choi 2024. 7. 1.

매트랩은 전문적인 통계 도구는 아니지만 못하는 것이 없는 만능 소프트웨어입니다. 

아래와 같은 주성분 분석 코드를 사용해서 점수그림 등이 표출되도록 했습니다. 아래 코드에서 폴더명만 수정하면 바로 PCA를 수행할 수 있습니다.

% https://kr.mathworks.com/help/stats/pca.html 매트랩 주성분 분석 사이트
% 2024-06-28 작성 with ChatGPT


% CSV 파일 읽기
filename = 'C:\Users\skill\Desktop\data.csv';   % 파일명 설정
tbl = readtable(filename);   % 데이터를 테이블 형식으로 읽기

% 시료명을 제외한 숫자 데이터만 추출
data = tbl{:, 2:end};  % 첫 번째 열(시료명)을 제외한 모든 데이터
data = zscore(data);  % 데이터 표준화
% R과 파이썬 등에서는 기본적으로 표준화를 하는데, 매트랩에서는 하지 않아서 고윳값이 1보다 작은 현상이 발생해서 추가함

% 데이터 검증 (NaN 값 확인 및 처리)
if any(isnan(data(:)))
    data = rmmissing(data);  % NaN 포함 행 제거
end

% 주성분 분석
[coeff, score, latent, tsquared, explained] = pca(data, 'Rows', 'complete');

% 결과 출력
disp('계수 (주성분 로딩):');
disp(coeff);
disp('주성분 점수:');
disp(score);
disp('설명된 분산의 비율:');
disp(explained);

% 첫 두 주성분을 사용하여 데이터 플롯
figure;
scatter(score(:,1), score(:,2), 'filled'); % 데이터 점을 채워서 표시
xlabel('First Principal Component');
ylabel('Second Principal Component');
title('PCA Result Plot');
grid on; % 그리드 추가

% 로딩 플롯
figure;
plot(coeff(:,1), coeff(:,2), 'bo');
% text(coeff(:,1), coeff(:,2), textstr, 'VerticalAlignment','bottom', 'HorizontalAlignment','right');
xlabel('First Principal Component');
ylabel('Second Principal Component');
title('Loading Plot');
grid on;

% 스크리 플롯 (고유값으로)
figure;
bar(latent);  % latent 변수는 각 주성분의 고유값을 포함
xlabel('Principal Component');
ylabel('Eigenvalue');
title('Scree Plot of Eigenvalues');

 

 

매트랩은 바로 논문에 써도 될 정도로 높은 수준의 그림을 만듭니다. 

 

댓글