통계데이터분석 - 차원분석 - 주성분분석(PCA) 🔑 principal component analysis | 차원축소 | 성분 | 주성분은 변수들의 선형결합으로 표현

  Рет қаралды 10,674

곽기영

곽기영

Күн бұрын

[R을 이용한 통계데이터분석]
주성분분석(principal component analysis, PCA)은 서로 상관관계를 갖는 많은 변수를 상관관계가 없는 소수의 변수로 변환하는 차원축소 기법입니다. 예를 들어, 주성분분석을 이용하여 서로 간 연관성이 큰(그래서 중복의 가능성이 높은) 20개의 변수를 중복 없는(하지만 원래 변수가 갖고 있는 정보를 가능한 많이 유지하는) 다섯 개의 변수로 축소할 수 있습니다. 이렇게 변환에 사용하는 소수의 변수를 주성분(principal component) 또는 성분(component)이라고 합니다. 다음과 같은 함수에 대한 설명이 포함되어 있습니다: prcomp(), summary(), plot(), scale(), cor(), biplot().
📢 R과 RStudio 설치는 'R 프로그래밍 / R 기초 - 설치' 강좌를 참고하세요( • R 프로그래밍 / R 기초 - 설치 🔑 ... ).
📢 15:00 이후 내용을 다음과 같이 바로잡습니다. 아래쪽과 왼쪽의 축이 성분점수이고, 위쪽과 오른쪽의 축이 성분적재값입니다.
"주성분분석 행렬도의 아래쪽과 왼쪽의 축은 각각 첫 번째 성분(PC1)과 두 번째 성분(PC2)의 성분점수를 나타내며, 위쪽과 오른쪽의 축은 각각 첫 번째 성분과 두 번째 성분의 성분적재값을 가리킵니다."
📚 『곽기영』 채널의 동영상 강의는 다음 도서를 바탕으로 하고 있습니다. 책의 목차를 포함한 책자에 대한 소개는 도서명 옆의 링크를 참고해주세요. 💕
『R 기초와 활용』 (product.kyobob...)
『R을 이용한 통계데이터분석』 (product.kyobob...)
『R을 이용한 머신러닝과 텍스트마이닝』 (product.kyobob...)
『R을 이용한 웹스크레이핑과 데이터분석』 (product.kyobob...)
『SPSS를 이용한 통계데이터분석』 (product.kyobob...)
『소셜네트워크분석』 (product.kyobob...)
#R프로그래밍 #데이터분석 #통계 #머신러닝 #데이터애널리틱스 #데이터사이언스

Пікірлер: 37
@joojuju
@joojuju 2 жыл бұрын
딱 제가 궁금하던 부분 명확히 설명해주셔서 감사합니다!
@kykwahk
@kykwahk 2 жыл бұрын
도움이 되셨다니 저도 기쁩니다^^
@legato8465
@legato8465 3 жыл бұрын
혼자 공부하면서 헤매고 있었는데 교수님 덕분에 이해가 잘됐습니다 감사해요!!
@wkruwk
@wkruwk 3 жыл бұрын
자세히 설명해주셔서 감사합니다.
@yubong86
@yubong86 3 жыл бұрын
도움이 많이 되었습니다! 감사합니다.
@kykwahk
@kykwahk 3 жыл бұрын
도움이 되셨다니 저도 기쁩니다.
@johnzhang8968
@johnzhang8968 3 жыл бұрын
Thanks
@_guboda
@_guboda Жыл бұрын
안녕하세요! 궁금한것이 있어 댓글 달았습니다! 주성분분석을 사용해서 차원 축소했을때 잃게 되는 정보량을 구하는 방법 있을까요?
@kykwahk
@kykwahk 11 ай бұрын
예를 들어, 첫 번째 주성분 PC1이 전체 분산의 45.0%를 설명하고 두 번째 주성분 PC2가 전체 분산의 20.4%를 설명하면 2개의 주성분이 전체 분산의 65.4%를 설명하는 것이 됩니다. 따라서 2개의 주성분으로 차원을 축소하면 전체 변수를 모두 사용했을 경우 대비 34.6%의 정보 손실이 발생합니다. 이런 내용은 여기 강의에도 포함되어 있으니 혹시 강의에서 놓치셨으면 다시 들어보시길 추천드립니다.
@유신남학생생명과학부
@유신남학생생명과학부 3 жыл бұрын
제가 본 강의 중 가장 명확한 설명이었습니다. 감사합니다!
@noearee
@noearee Жыл бұрын
좋은 강의 감사합니다 교수님. Panel 데이터를 주성분 분석하려고합니다. 이 경우 어떤 형식으로 주성분 분석을 해야할까요? 1. 연도별(열)로 주성분 분석 2. 관측치별(행)로 주성분 분석 3. 패널 전체 한번에 주성분 분석 주성분 분석에 어떤 가정이 있는지 궁금합니다. 1번이나 2번으로 주성분 분석을 하게되면 1번의 경우 연도마다 주성분의 적재값이나, 주성분의 수까지도 변하게 되어 연도간 비교가 불가능해지며 2번의 경우 관측치마다 주성분의 적재값이 달라져 관측치간 비교가 불가능해집니다. 이러한 경우 3번의 방법이 적합할까요?
@kykwahk
@kykwahk Жыл бұрын
주성분분석은 고차원(즉 다수의 변수)의 데이터를 저차원(즉 소수의 변수 - 주성분)으로 축약하는 기법입니다. 주성분분석은 변수에 대해서 수행하는 것이지 관측값(케이스)에 대해 수행하는 것은 아닙니다. 분석하시고자 하는 목적과 갖고 계신 데이터가 주성분분석의 용도에 부합하는지 먼저 살펴보시는 것이 좋을 것 같습니다. 주성분분석을 수행하기 위한 특별한 가정은 없습니다만 주성분분석은 변수 간의 관련성을 바탕으로 주성분을 추출하기 때문에 효과적인 주성분분석을 수행하기 위해서는 서로 유의미한 상관관계를 갖는 변수 집합이 존재하는 것이 바람직합니다.
@wonyt1995
@wonyt1995 3 жыл бұрын
너무 자세한 설명 잘 들었습니다. 다만, 궁금한 것이 성분 적재값, 즉, x절편과 y절편에 대해서 값의 의미는 무엇인지, 예로 pca plot에 점이 (0.5, 0.3)이라고 표시되어있을 때, 이 의미를 어떻게 해석해야 하는지 궁금합니다.
@kykwahk
@kykwahk 3 жыл бұрын
주성분분석(PCA)을 통해 도출한 주성분(principal component)은 기존 변수들의 선형결합으로 나타낼 수 있습니다. 이때 선형결합에 사용되는 가중치를 성분적재값(component loading)이라고 합니다. 이 성분적재값은 성분과 변수 간의 관련성의 정도를 나타냅니다. PC1과 PC2를 각각 X축과 Y축으로 하는 성분도표에서 각 축에 있는 숫자는 이러한 관련성의 정도를 보여줍니다. 예를 들어, 여기 강의에서 Illiteracy 변수의 PC1과 PC2의 성분적재값은 각각 0.468과 0.053입니다. 이는 Illiteracy 변수는 PC2보다는 PC1에 보다 밀접한 관련을 갖는다는 의미입니다. 그 비율은 0.11(=0.053/0.468)로서 PC2와의 관련성은 PC1에 비해 9분의 1정도에 불과합니다. 이는 성분도표상에서 확인할 수 있습니다. Illiteracy 변수의 빨간색 화살표가 PC1축에 거의 수평으로 그려져 있는 것을 볼 수 있습니다. PC1축(X축)으로 1단위 증가할 때 PC2축(Y축)으로 0.11만큼 증가하기 때문에 거의 수평에 가깝게 표현되어 있습니다. 반면에 Population 변수의 경우 PC1축보다는 PC2축에 보다 가까이(평행하게) 화살표가 표현되어 있는 것을 볼 수 있습니다. 이는 PC1과 PC2의 성분적재값이 각각 0.126과 0.411로서 이번에는 PC2와의 관련성이 더 크기 때문입니다. PC1축(X축)으로 1단위 증가할 때 PC2축(Y축)으로 3.26만큼 증가합니다. 이처럼 변수와 성분의 관련성이 크면 성분도표상에 해당 성분에 보다 가까이(평행하게) 변수의 직선이 그려집니다.
@sjlee5004
@sjlee5004 2 жыл бұрын
좋은 영상 감사합니다. 혹시 주성분끼리 결합하여 하나의 값으로 만드는 방법이 있을까요?
@kykwahk
@kykwahk 2 жыл бұрын
하나의 주성분을 추출하는 것은 어떠세요...
@rudah96
@rudah96 3 жыл бұрын
오늘도 좋은 영상 감사합니다! RStudio로 한줄 한줄 따라가면서 하는데 궁금한 점이 있습니다. 강의에선 각 주성분끼리 상관관계를 보실때 round(cor(pca$x))로 반올림을 해주셨더라구요! 그래서 round함수를 쓰지 않고 그냥 cor(pca$x)을 실행해 보았는데, diagonal은 정확히 1이 나왔지만 나머지 성분들이 3.44e-16처럼 엄청 작은 값이 나오더라구요! 이게 엄청나게 작은 값들인것은 알지만 원래 수학적으로 주성분끼리의 상관관계는 0이 나와야 하는게 아닌가 해서 질문드립니다. 이렇게 주성분끼리의 상관관계가 정확히 0이 아니라 엄청 작은값이 나오는 이유가 무엇인지 궁금합니다.
@kykwahk
@kykwahk 3 жыл бұрын
다음과 같은 예를 한번 보겠습니다. > sqrt(2)^2 == 2 [1] FALSE > sqrt(2)^2 - 2 [1] 4.440892e-16 루트 2(square root 2)를 제곱하면 수학적으로 2가 나와야 하지만 실행해보면 그렇지가 않습니다. 루트 2의 제곱은 2가 아니고, 루트 2의 제곱에서 2를 빼면 0이 아닙니다(거의 0에 가까운 매우 작은 숫자이지요). 컴퓨터에서 숫자는 내부적으로 부동소수점수(floating point number)로 저장되고, 따라서 무시해도 될 정도로 매우 작은 값이긴 하지만 이처럼 계산 과정에서 반올림을 함으로써 오차가 발생할 수 있습니다. 이와 같은 이슈와 관련하여 참고로 한 가지 더 말씀드리면요, 수치가 같은지 비교할 때 이러한 문제를 피하기 위해서는 다음과 같이 all.equal() 함수를 이용합니다. all.equal() 함수는 매우 작은 반올림 오차는 무시합니다. > all.equal(sqrt(2)^2, 2) [1] TRUE 이제는 루트 2의 제곱과 2가 같다고 나오네요. 우리가 수학적으로 알고 있는 것처럼요.
@rudah96
@rudah96 3 жыл бұрын
@@kykwahk 아...! 부동소수점 문제이군요!! 부동소수점 관련해서 구글링해서 좀더 정확히 이해하엿습니다. 감사합니다 :)
@이끼-t9o
@이끼-t9o 3 жыл бұрын
안녕하세요 교수님 강의를 통해 R 기초를 다지고 있는 학생입니다! 항상 감사드립니다. 다름이 아니라 R을 이용해 PCA 분석을 해보려고 하는데 어려움을 겪고 있어 질문을 드립니다. PCA 그림으로는 PC1, PC2 밖에 나타나지 않으나 데이터에서 PC3도해 R 기초를 다지고 있는 학생입니다! 항상 감사드립니다. 다름이 아니라 R을 이용해 PCA 분석을 해보려고 하는데 어려움을 겪고 있어 질문을 드립니다. PCA 그림으로는 PC1, PC2 밖에 나타나지 않으나 PC3도 기준에 충족되어 PC들을 표와 그림으로 나타낸 후 해석을 하려고 하는데, 혹시 표와 그림을 해석하는데 차이는 없을까요? 혹시 그림은 PC1, PC2만 나타나기 때문에 주성분을 2개로 줄인 후 해석을 해야 할까요?
@kykwahk
@kykwahk 3 жыл бұрын
주성분의 개수는 분석 목적에 따라 해석 가능성을 고려하여 판단하시면 됩니다. 2차원을 초과할 경우 그래프로 표현하는 것이 어렵기 때문에 시각화 목적을 위해서는 두 개의 주성분을 사용하지만 이것이 항상 두 개의 주성분을 사용하라는 의미는 아닙니다.
@이끼-t9o
@이끼-t9o 3 жыл бұрын
@@kykwahk 답변 해주셔서 정말 감사드립니다!
@왓더헬스
@왓더헬스 3 жыл бұрын
교수님 강의 덕분에 r과 통계에 관해 정말 많이 배우고있는 학생입니다 제가 ggplot으로 PCA 분석 그래프를 그리기 위해 아래와 같은 코드로 사용하여 그래프를 그렸습니다. 하지만 loading 하려는 값들이 biplot과는 다르게 너무 짧게 나타났는데 이를 해결하기 위해 geom_segment() 함수 내부에 xend 및 yend 부분에 일정 비율을 곱하거나 혹은 다른 비율을 구할수 있는 방법이 있을까요? library(ggplot2) str(state.x77) pca
@kykwahk
@kykwahk 3 жыл бұрын
네~ 지금 하신 것처럼 직접 코딩하는 것도 좋은 시도인 것 같습니다. 이 상태에서는 PC값을 표준화시킨 후 일정 값을 곱해서 화살표 길이를 조절할 수 있을 것 같습니다. 하지만 ggbiplot 패키지라고 ggplot2를 사용하여 biplot를 그려주는 라이브러리가 있습니다. 그래서 저라면 다음과 같이 그냥 잘 만들어진 ggbiplot 패키지를 사용하겠습니다. > library(devtools) > install_github("vqv/ggbiplot") > library(ggbiplot) > pca ggbiplot(pca, labels=rownames(state.x77))
@왓더헬스
@왓더헬스 3 жыл бұрын
@@kykwahk 감사합니다 말씀해주신 패키지도 활용해보도록 하겠습니다!! PC값을 표준화 시킨다고 하셨는데 고유값을통해 표준화시키면 될까요?? 예를들어 pca$rotation/sqrt() 이런방법으로 ㅎㅎ
@왓더헬스
@왓더헬스 3 жыл бұрын
기초부터 차근차근듣고있습니다 감사드려요!! 하나 질문이 있는데 r의 prcomp함수를 이용해 biplot을 그린것과 spss의 주성분분석에서 varimax회전시킨 것이 차이가 있더라구요 r에서도 varimax로 회전시킨다음 loading값을 plot할수있는 방법이있을까요?? (축을 회전시켰다는건 알겠는데..)
@kykwahk
@kykwahk 3 жыл бұрын
요인분석과 주성분분석은 기본적으로 다른 통계모델입니다. 주성분분석(PCA)에서의 주성분은 변수들의 선형결합으로 표현됩니다(여기에서 주성분은 변수들의 축소된 차원을 나타냅니다). 반면에 요인분석에서 변수는 요인들의 선형결합으로 표현됩니다(여기에서 요인은 변수들 사이에 내재되어 있는 잠재된 개념입니다). 요인분석에서 요인을 추출하는 방법은 다양합니다. SPSS는 요인추출 방법으로서 기본적으로 PCA를 사용하고 있기 때문에 요인분석과 주성분분석이 혼동되는 경우가 많습니다. SPSS에서 기본적으로 사용하는 PCA 말고도 요인추출 방법으로 Maximum Likelihood, minres 등이 있습니다. R에서는 factanal() 함수를 이용하여 요인분석을 수행할 수 있습니다만 SPSS와 다른 결과를 가져옵니다. factanal() 함수는 Maximum Likelihood 방식으로 요인을 추출합니다.
@왓더헬스
@왓더헬스 3 жыл бұрын
@@kykwahk 교수님 감사합니다 많은 도움이됐습니다!
@wkruwk
@wkruwk 3 жыл бұрын
리커트척도로 응답받은 데이터로 실습을 해 보다가 질문 두 가지를 드려봅니다. 1. prcomp 명령어를 쓸 때 스케일이 모두 같아서, scale 부분을 생략하고 procomp(데이터명)만 쓰니 실행이 되지 않았습니다. (에러메시지 : Error in svd(x, nu = 0, nv = k) : infinite or missing values in 'x') 스케일이 동일할 때는 어떻게 명령문을 쓰는지 알고 싶습니다. 2.그리고 데이터 내의 결측치를 모두 공백으로 처리했는데, 이 결측치에 대한 정보를 주는 방법은 무엇인지도 궁금합니다. :)
@kykwahk
@kykwahk 3 жыл бұрын
1. prcomp() 함수는 scale 인수를 지정하지 않아도 scale=FALSE가 기본값으로 사용되기 때문에 문제없이 작동해야 합니다. 코드를 재현할 수 없어서 정확히 말씀 드리기는 어렵지만 공백으로 처리된 결측값으로 인하여 에러가 발생했을 수도 있습니다. 2. 공백을 모두 결측값 NA로 대체해주세요.
@wkruwk
@wkruwk 3 жыл бұрын
@@kykwahk 결측값에 NA 또는 공백 또는 쉼표를 넣었을 때 계속 같은 오류 구문이 뜨는데( Error in svd(x, nu = 0, nv = k) : infinite or missing values in 'x'), 숫자인 0으로 값을 바꾸어보았더니 프로그램이 작동했습니다. prcomp는 결측값을 가진 데이터를 분석하지 못하나요? 결측값을 가진 데이터의 PCA분석은 어떻게 값들을 처리하는지 궁금합니다.
@kykwahk
@kykwahk 3 жыл бұрын
prcomp() 함수에는 두 가지 방식으로 데이터를 지정할 수 있습니다. 행렬/데이터프레임으로 분석 대상 데이터를 지정하는 방식과 포뮬러(formula) 형식으로 분석 대상 변수와 그것을 포함하고 있는 데이터셋을 지정하는 방식입니다. 강의에서 주로 소개한 방식은 행렬/데이터프레임을 지정하는 방식인데요, 이 방식에서는 결측값을 처리하는 na.action 인수가 동작하지 않습니다. 반면에 포뮬러 형식으로 변수와 데이터를 지정하는 방식은 na.action 인수의 기본값으로 na.action=na.omit이 적용되어 있어서 결측값을 제거하고 분석을 수행합니다. 따라서 다음과 같이 (1) 행렬/데이터프레임을 지정하는 방식을 사용할 경우에는 na.omit() 함수를 이용하여 결측값을 명시적으로 제거한 후 분석을 수행합니다. 또는 (2) 포뮬러 형식으로 변수와 데이터를 지정하여 분석을 수행할 수도 있습니다. 이때는 ~ 뒤에 분석 대상 변수를 지정하고 data 인수에 사용할 데이터셋을 지정합니다. # 결측값이 포함된 데이터셋 > str(airquality) 'data.frame': 153 obs. of 6 variables: $ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ... $ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ... $ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ... $ Temp : int 67 72 74 62 56 66 65 59 61 69 ... $ Month : int 5 5 5 5 5 5 5 5 5 5 ... $ Day : int 1 2 3 4 5 6 7 8 9 10 ... # (1) > pca.na pca.na summary(pca.na) Importance of components: PC1 PC2 PC3 PC4 Standard deviation 1.536 0.9459 0.6897 0.51930 Proportion of Variance 0.590 0.2237 0.1189 0.06742 Cumulative Proportion 0.590 0.8136 0.9326 1.00000
@wkruwk
@wkruwk 3 жыл бұрын
@@kykwahk 감사드립니다! 알려주신 방법을 참고하여 분석을 할 수 있었습니다. :) 그런데 R과 SPSS로 주성분 분석을 하였을 때 전혀 다른 결과가 나왔는데, 일반적인 현상인지 궁금합니다. (R) PC1 PC2 PC3 A -1.25 1.54 -.42 B .56 -.57 .87 ... (SPSS) PC1 PC2 PC3 A -0.28 -0.85 2.46 B 0.93 -0.42 -1.35 ... 부모태도에 관한 14문항의 응답을 변수로 넣었고, R과 SPSS 두 분석 모두 3개 요인으로 65% 정도를 설명하는 결과는 같았습니다. (요인들이 낮은 설명력을 가지는 경우에도 이 세개의 요인은 활용 가능한 것인가요?)
@kykwahk
@kykwahk 3 жыл бұрын
SPSS는 요인분석을 수행합니다. 요인분석과 주성분분석은 서로 다른 통계모델입니다. SPSS는 요인추출 방법으로서 기본적으로 PCA를 사용하고 있기 때문에 요인분석과 주성분분석이 혼동되는 경우가 많습니다. 요인분석 또한 요인(성분)을 추출하는 방법에서 있어서 R과 SPSS에는 차이가 있을 수 있습니다. SPSS에서 기본적으로 사용하는 PCA 말고도 요인추출 방법으로 Maximum Likelihood, minres 등이 있습니다. R에서는 factanal() 함수를 이용하여 요인분석을 수행할 수 있습니다만 SPSS와 다른 결과를 가져옵니다. factanal() 함수는 Maximum Likelihood 방식으로 요인을 추출합니다. 그리고 아래는 제 책에서 발췌한 내용입니다('SPSS를 이용한 통계데이터분석', p.351). 참고하세요. "요인분석과 주성분분석은 기본적으로 다른 통계모델이다. 요인분석은 변수들 간의 공유된 분산을 분석하는 데 관심이 있는 반면(즉 변수는 요인들의 선형결합으로 표현된다), 주성분분석은 변수들의 선형결합을 통해 총분산의 구조를 재조정한다(즉 주성분은 변수들의 선형결합으로 표현된다). 이처럼 두 분석 방법이 서로 다른 기법임에도 불구하고 많은 사람들은 두 방법에 대해 혼동하는 경향이 있다. 그 혼동의 이면에는 ‘Little Jiffy’라는 통계 프로그램이 있다. Little Jiffy는 인기 있는 요인분석 프로그램의 하나였으며, 기본 수행 방식으로 주성분분석을 이용하여 고유값 1을 초과하는 요인을 추출하고 베리맥스(varimax) 방식으로 요인을 회전한다. 이후에 많은 연구자가 이러한 Little Jiffy의 기본 수행 방식을 요인분석과 동일시하였고, SPSS를 비롯한 다수의 통계패키지가 요인분석 모듈에서 이를 따라함으로써 두 기법 간의 혼동이 가중되었다."
@제제-i6p
@제제-i6p 2 жыл бұрын
안녕하세요. 이번강의를 몇번이고 반복하며 들을정도로 매우 쉽고 자세해서 좋았습니다.교수님의 강의를 듣고 주성분분석을 가지고 있던 데이터로 시도를 해봤습니다! 그런데 제가 pca Livestock50L50 >pca
@kykwahk
@kykwahk 2 жыл бұрын
데이터셋에 숫자 형식이 아닌 열이 포함되어 있는지 확인해보세요.
@제제-i6p
@제제-i6p 2 жыл бұрын
​@@kykwahk ㅠ biplot 그릴때 화살표 말고 검은 점에 명칭을 넣고 싶어서 파일 데이터 셋 각 행앞에 명칭을 그대로 두었는데 그게 문제가 되었을까요? 각 행의 명칭을 없애면 에러가 사라지기는 하지만 biplot 그릴때 검은 숫자대신 명칭을 넣을순 없을까요?
주성분 분석(PCA)의 기하학적 의미
15:31
공돌이의 수학정리노트
Рет қаралды 40 М.
Incredible: Teacher builds airplane to teach kids behavior! #shorts
00:32
Fabiosa Stories
Рет қаралды 11 МЛН
Which One Is The Best - From Small To Giant #katebrush #shorts
00:17
Как мы играем в игры 😂
00:20
МЯТНАЯ ФАНТА
Рет қаралды 3,3 МЛН
Principal Component analysis (PCA) in R
29:42
Wakjira Tesfahun
Рет қаралды 21 М.
주성분 분석(Principal Component Analysis, PCA)
25:16
고려대학교 DS플러스 사업단
Рет қаралды 2,4 М.
StatQuest: Principal Component Analysis (PCA), Step-by-Step
21:58
StatQuest with Josh Starmer
Рет қаралды 2,9 МЛН
13-1 차원 축소란 무엇인가 - 차원축소 기초 (1) -
17:45
Sapientia a Dei
Рет қаралды 16 М.
Biplot for principal component analysis in r
9:25
AGRON Info-Tech
Рет қаралды 45 М.
Incredible: Teacher builds airplane to teach kids behavior! #shorts
00:32
Fabiosa Stories
Рет қаралды 11 МЛН