User Tools

Site Tools


factor_analysis

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
factor_analysis [2019/11/10 16:59] hkimscilfactor_analysis [2023/11/06 02:53] (current) – [E.g. 2] hkimscil
Line 14: Line 14:
     * ''%%d = read.table("http://commres.net/wiki/_media/r/personality0.txt")%%''     * ''%%d = read.table("http://commres.net/wiki/_media/r/personality0.txt")%%''
  
-{{:r:SAQ.csv}} file은 아래 설문조사에 대한 데이터로서 총 2571명이 응답하였다. 사람들이 대답한 것들에 대한 공통적인 요인을 추출하게 되면 여러가지의 질문이 몇가지의 요인으로 구분되어 있다고 주장할 수 있게 된다.+{{:r:SAQ.csv}} file은 아래 설문조사에 대한 데이터로서 총 2571명이 응답하였다. 위의 설명이 어려운것 같지만, 간단히 이야기하면 응답자들이 대답한 것들에 대한 공통적인 요인을 추출하게 되면 여러가지의 질문이 몇가지의 요인으로 구분되어 있다고 주장할 수 있게 된다는 뜻이다. 가령 아래의 질문들이 우리가 눈으로 봐서 4개의 요인을 묻는 질문이라고 생각할 수 있다. 
 +  * 컴퓨터 사용에 대한 태도 
 +  * 통계에 (statistics) 태도 
 +  * 수학에 대한 태도 
 +  * 통계페키지 프로그램에 (SPSS) 대한 태도  
 + 
 +얼뜻 눈으로 이 4개의 요인을 (혹은 단면, 측면, dimensions) 뽑아냈지만 응답자들의 응답에 섞인 상관관계에 기초하여 이런 요인들을 추출해 낼 수 있다면 좋겠는데 이것이 요인분석이 (factor analysis) 하는 일이다. 어떤 응답자가 수학이 싫은면 수학과 관련된 어떤 질문들에 대해서 비슷한 (상관관계가 높게) 답변을 할 것이니 가능한 것이다. 
  
 <WRAP box> <WRAP box>
Line 46: Line 52:
  
   * **자료의 요약**: 여러 개의 변인들을 몇 개의 공통된 집단으로 묶음으로써 자료의 복잡성 줄이고 정보를 요약하는데 이용   * **자료의 요약**: 여러 개의 변인들을 몇 개의 공통된 집단으로 묶음으로써 자료의 복잡성 줄이고 정보를 요약하는데 이용
-  * 아이디어, **구성의 구조파악**: 동질적인 변인들을 몇 개의 요인들로 묶어줌으로써 변인들 내에 존재하는 상호 독립적인 특성을 발견하는데 이용+  * 아이디어, **구성((construct는 아이디어가 모여서 만들어진 아이디어를 말한다. 아이큐는 수리력, 공간력, 언어력, 추리력 등이 모여서 만들어진(측정된) 새로운 형태의 복합적인 아이디어다. ))의 구조파악**: 동질적인 변인들을 몇 개의 요인들로 묶어줌으로써 변인들 내에 존재하는 상호 독립적인 특성을 발견하는데 이용
   * 불필요한 **변인의 제거**: 변인군으로 묶이지 않은 변인을 제거함으로써 중요하지 않은 변인 선별가능   * 불필요한 **변인의 제거**: 변인군으로 묶이지 않은 변인을 제거함으로써 중요하지 않은 변인 선별가능
   * 측정도구의 **타당성 검증**: 동일한 개념을 측정한 변인들이 동일한 요인으로 묶이는지 여부 확인함으로써 측정도구 타당성을 검증하는데 이용   * 측정도구의 **타당성 검증**: 동일한 개념을 측정한 변인들이 동일한 요인으로 묶이는지 여부 확인함으로써 측정도구 타당성을 검증하는데 이용
Line 79: Line 85:
 \end{equation}  \end{equation} 
  
-위 식 [1]에서 e는 error term을 말하고, F1, F2 는 각각 잠재적인 요인이다. finance, marketing, policy 점수는 F1과 F2의 기여로 만들어지는 점수이다. F1과 F2가 observation에 기초한 변인이 아니므로 데이터를 이용한 regression을 구하는 방법은 적당치 않다. 따라서 다른 방법으로 이를 해결해야 한다. +위 식 $(1)$에서 $e_{i}$는 error term을 말하고, $F1$$F2는 각각 잠재적인 요인이다. finance $(Y_{1})$, marketing $(Y_{2})$, policy $(Y_{3})$ 점수는 $F1$과 $F2$의 기여로 만들어지는 점수이다. $F1$과 $F2$가 observation에 기초한 변인이 아니므로 데이터를 이용한 regression을 구하는 방법은 적당치 않다. 따라서 다른 방법으로 이를 해결해야 한다. 
  
-한편, $\beta_{ij}$ 는 표준화된 correlation coefficient 값을 말한다 (regression에서 beta값) -- factor analysis에서는 흔히 factor loading이라고 부른다. beta를 해석하는 방법과 마찬가지로 factor loading 값은 F1이나 F2의 인자가 finance (혹은 다른 변인 점수) 점수에 얼마나 기여하는지를 나타내 주는 지표라고 하겠다. +한편, $\beta_{ij}$ 는 표준화된 correlation coefficient 값을 말한다 (regression에서 beta값) -- factor analysis에서는 흔히 factor loading이라고 부른다. beta를 해석하는 방법과 마찬가지로 factor loading 값은 F1이나 F2의 인자가 finance (혹은 다른 변인 점수, $Y_{i}$) 점수에 얼마나 기여하는지를 나타내 주는 지표라고 하겠다. 
  
-상식을 이용해서 문제를 살펴보면, finance 시험은 숫적능력과 관련이 있으므로 F1(숫적능력) 앞에 붙는 beta값이 (loading값이) 커야하는 것이 이치라고 하겠고, 반대로 Marketing과 Policy시험은 언어능력의 요인(F2)의 loading값이 커야 하겠다 (아래 표 참조).+상식을 이용해서 문제를 살펴보면, finance 시험은 숫적능력과 관련이 있으므로 $F1$ 앞에 (이름을 붙이면 숫적능력) 붙는 $\beta_{ij}$값이 (factor loading 값이) 커야하는 것이 이치라고 하겠고, 반대로 Marketing과 Policy시험은 언어능력의 요인($F2$)의 loading값이 커야 하겠다 (아래 표 참조).
  
 <table> <table>
Line 108: Line 114:
 $$Y_{i} = \beta_{i0} + \beta_{i1}F_{1} + \beta_{i2}F_{2} + (1) e_{i} $$ $$Y_{i} = \beta_{i0} + \beta_{i1}F_{1} + \beta_{i2}F_{2} + (1) e_{i} $$
  
-\begin{eqnarray*}  +\begin{align*}  
-Var(Y_i) &=\beta^2_{i1}Var(F1) + \beta^2_{i2}Var(F2) + (1)^2Var(e_i) \\ +Var(Y_i) & = \beta^2_{i1}Var(F1) + \beta^2_{i2}Var(F2) + (1)^2Var(e_i) \\ 
-&=\underbrace{ \beta^2_{i1} + \beta^2_{i2} }_\text{communality} \+ \\underbrace{ \sigma^2_{i} }_\text{specific variance} +& = \underbrace{ \;\beta^2_{i1} \qquad\quad\;\; + \beta^2_{i2} }_\text{communality} \qquad\quad\;\; + \quad \underbrace{ \sigma^2_{i} }_\text{specific variance} 
-\end{eqnarray*}+\end{align*}
  
 Variance 성질에 따라서 우리는 다음을 도출할 수 있다. Variance 성질에 따라서 우리는 다음을 도출할 수 있다.
   * $\beta_{i0}$는 상수(constant)이므로 0,   * $\beta_{i0}$는 상수(constant)이므로 0,
-  * F1, F2 의 분산값은 1이고, coefficient값은 F1 요인에 곱한 상수이므로 분산을 구하기 위해서는 제곱을 해야 한다. 따라서, F1 F2에 해당하는 분산값은 각각 $\beta^2_{i1} + \beta^2_{i2}$+  * $F1$$F2의 분산값은 1이고, coefficient값은 $F1요인에 곱한 상수이므로 분산을 구하기 위해서는 제곱을 해야 한다. 따라서, $F1$ $F2$에 해당하는 분산값은 각각 $\beta^2_{i1} + \beta^2_{i2}$
   * error term의 분산값은 위 가정에서 언급된 것처럼 $\sigma^2_{i}$   * error term의 분산값은 위 가정에서 언급된 것처럼 $\sigma^2_{i}$
   * 이를 해석하자면,    * 이를 해석하자면, 
-    * fiance (혹은 다른 시험) 점수의 총 분산값은 F1과 F2의 coefficient(loading)값을 각각 제곱해서 더한 것에+    * fiance (혹은 다른 시험) 점수의 총 분산값은 $F1$과 $F2$의 coefficient(loading)값을 각각 제곱해서 더한 것에
     * 에러의 분산값을 더한 것과 같다.      * 에러의 분산값을 더한 것과 같다. 
   * 여기서 loading 제곱의 합은 regression으로 설명되는 부분이고   * 여기서 loading 제곱의 합은 regression으로 설명되는 부분이고
   * 에러의 분산값은 어느 factor에도 기여를 하지 못하는 나머지 부분이다.   * 에러의 분산값은 어느 factor에도 기여를 하지 못하는 나머지 부분이다.
-  * 즉, fiance의 분산값은 F1, F2가 기여하는 부분과 이 둘에 포함되지 않는 나머지로 나눌 수 있다. 이는 regression에서 explained(regression) variance와 unexplained variance를 이야기 하는 것과 같은 이치이다.  +  * 즉, fiance의 분산값은 $F1$$F2$가 기여하는 부분과 이 둘에 포함되지 않는 나머지로 나눌 수 있다. 이는 regression에서 explained(regression) variance와 unexplained variance를 이야기 하는 것과 같은 이치이다.  
-  * 앞의 두 coefficient(계수 혹은 factor loading)을 communality라고 부른다. 이 이름이 자연스러운 것은 Y의 총분산 중 두 요인(F1, F2)이 __공통적으로__ 기여하는 부분의 분산이기 때문이다.  +  * 앞의 두 coefficient(계수 혹은 factor loading)을 **communality**라고 부른다. 이 이름이 자연스러운 것은 Y의 총분산 중 두 요인($F1$$F2$)이 __공통적으로__ 기여하는 부분의 분산이기 때문이다.  
-  * 따라서, 마지막 에러텀에 해당하는 분산은 specific variance라고 이름을 붙히는 것이 자연스럽다. 즉, Y의 총 분산 중 어느 요인에게도 영향을 받지 않는 나머지 즉, 공통적(communality)인 것에서 specific한 분산의 부분이다. +  * 따라서, 마지막 에러텀에 해당하는 분산은 specific variance라고 이름을 붙히는 것이 자연스럽다. 즉, Y의 총 분산 중 어느 요인에게도 영향을 받지 않는 나머지 즉, 공통적(communality)인 것에서 **specific**한 분산의 부분이다. 
  
 이를 covariance matrix에 정리하자면 아래와 같다. 이를 covariance matrix에 정리하자면 아래와 같다.
Line 138: Line 144:
 한편, 두 변인 (가령, fiance점수와 marketing점수) 간의 covariance를 구하는 것과 관련해서는:  한편, 두 변인 (가령, fiance점수와 marketing점수) 간의 covariance를 구하는 것과 관련해서는: 
  
-\begin{eqnarray*}  +\begin{align*}  
-Y_{i} =& \beta_{i0} + \beta_{i1}F1 + \beta_{i2}F2 + (1)e_{i} + (0)e_{j} \\ +Y_{i}             \beta_{i0} + \beta_{i1}F1 + \beta_{i2}F2 + (1)e_{i} + (0)e_{j} \\ 
-Y_{j} =& \beta_{j0} + \beta_{j1}F1 + \beta_{j2}F2 + (0)e_{i} + (1)e_{j}  +Y_{j}             \beta_{j0} + \beta_{j1}F1 + \beta_{j2}F2 + (0)e_{i} + (1)e_{j} \\ 
-\end{eqnarray*} +Cov(Y_{i}, Y_{j}) & = \beta_{i1}\beta_{j1}Var(F1) + \beta_{i2}\beta_{j2}Var(F2) + (1)(0)Var(e_{i}) + (0)(1)Var(e_{i}) \\ 
- +                  & =  \beta_{i1} \beta_{j1} + \beta_{i2} \beta_{j2} 
-\begin{eqnarray*}  +\end{align*}
-Cov(Y_{i}, Y_{j}) &=\beta_{i1}\beta_{j1}Var(F1) + \beta_{i2}\beta_{j2}Var(F2) + (1)(0)Var(e_{i}) + (0)(1)Var(e_{i}) \\ +
-  &=\beta_{i1}\beta_{j1} + \beta_{i2}\beta_{j2} +
-\end{eqnarray*}+
  
 위에서  위에서 
Line 182: Line 185:
 | Y3  | $S_{31}$  | $S_{32}$  | $S^2_{3}$  | | Y3  | $S_{31}$  | $S_{32}$  | $S^2_{3}$  |
  
-실제 데이터에서 구한 variance covariance table은 아래와 같다. +실제 데이터에서 구한 variance covariance table은 아래와 같다((편의상 여기 분산값은 n으로 (n-1이 아닌) 나눠 준 것))
  
 | Variable  | Y1  | Y2  | Y3  | | Variable  | Y1  | Y2  | Y3  |
Line 188: Line 191:
 | Y2  | -0.36  | 5.04  | 3.84  | | Y2  | -0.36  | 5.04  | 3.84  |
 | Y3  | 0.44  | 3.84  | 3.04  | | Y3  | 0.44  | 3.84  | 3.04  |
 +
 +
 +실제 데이터로 구한 covariance matrix (가).
 +<code>
 +## 예를 들어 
 +fd <- read.csv("http://commres.net/wiki/_media/r/fa_explanation.csv")
 +fd <- fd[, -1] # 처음 id 컬럼 지우기
 +cov(fd)
 +
 +</code>
  
 $$ $$
Line 197: Line 210:
 $$ $$
  
 +아래는 설명한 것과 같이 이론적으로 구한 covariance matrix 이다 (나). 
 $$ $$
 \begin{pmatrix}  \begin{pmatrix} 
Line 205: Line 219:
 $$ $$
  
- +실제 데이터에서 구한 variance covariance 값과 (위에서 가) factor 분석에 기반한 이론 적인 variance covariance 테이블을 (위에서 나) 비교해 볼 수 있다. 이를 통해서 각 Factor의 $\beta_{ij}$ laoding 값을 유추해 볼 수 있을 것이다. Regression방법은 F1과 F2가 observed된 변인이 아니기에 할 수가 없었고, 위의 방법으로 Beta값들을 구한다면 각 **요인(factor)**에 대한 beta값을 바탕으로 변인들에 대한 regression공식을 완성할 수 있게 된다. 
- +
-실제 데이터에서 구한 variance covariance 값과 factor 분석에 기반한 이론 적인 variance covariance 테이블을 비교해 볼 수 있다. 이를 통해서 각 Factor의 $\beta_{ij}$ laoding 값을 유추해 볼 수 있을 것이다. Regression방법은 F1과 F2가 observed된 변인이 아니기에 할 수가 없었고, 위의 방법으로 Beta값들을 구한다면 각 **요인(factor)**에 대한 beta값을 바탕으로 변인들에 대한 regression공식을 완성할 수 있게 된다. +
  
 ====== Interpretation of factor loading and the rotation method ====== ====== Interpretation of factor loading and the rotation method ======
  
-위의 분석작업을 통해서 아래와 같은 regression 공식을 얻었다고 가정하자. 아래 공식의 문제점은 F1과 F2의 loading값이 골고루 퍼져 있어서, finance 점수에 영향을 주는 것이 F1인지 F2인지 이야기하기기 어렵다는 점이다. 즉, factor loadings are not unique하다는 것이다. +위의 분석작업을 통해서 아래와 같은 regression 공식을 얻었다고 가정하자 (Linear Algera를 대학교육에서 가르치는 이유를 여기서도 알게된다. 그리고 거기서 배우는 Eigen vector, Eigen value 등이 지금 여기서와 무슨관계인지도. . . 그러나, 수학을 잘 모르는 학생들을 위한 설명이기에 이를 이용하지 않고 설명한다). 아래 공식의 문제점은 F1과 F2의 loading값이 골고루 퍼져 있어서, finance 점수에 영향을 주는 것이 F1인지 F2인지 이야기하기기 어렵다는 점이다. 즉, factor loadings are not unique하다는 것이다.  
 + 
 +좀 더 설명하자면 우리가 regression에서 배운 것에 의하면 아래는 $Y_{1}$ 은 F1이 0.5만큼 F2가 0.5만큼 설명한다고 하겠다. 이것을 팩터로딩이 팩터 간에 독립적으로 나타나지 않는다고 이야기 한다는 뜻이다. 그러나 우리가 factor analysis 를 하는 이유는 Factor 중의 하나가 $Y_{1}$에 온전히 기여를 하고 나머지는 기여를 하지 않는 구조를 가지는가를 보기 위해서다. 이를 위해서 아래의 해는 로테이션이라는 과정을 한번 더 거치게 된다 (바로 아래 문장 참조 - "한편 아래의 공식에서 . . ."  ).
  
 Model A Model A
Line 221: Line 235:
  
 위의 공식을 토대로 아래와 같은 variance covariance matrix를 구해 볼 수 있다. 이는  위의 공식을 토대로 아래와 같은 variance covariance matrix를 구해 볼 수 있다. 이는 
-  Variance Y1 = (0.5)^2 + (0.5)^2 + $\sigma^2_{1}= 0.5 + $\sigma^2_{1}$,  +\begin{align*
-  * Covariance(Y1, Y2) = (0.5)(0.3) + (0.5)(0.3) = 0.3 +\text{Var}_\text{(Y1)} & = (0.5)^2 + (0.5)^2 + \sigma^2_{1} \\ 
 +                          & = 0.5 + \sigma^2_{1} \\ 
 +\text{Cov}_\text{(Y1, Y2)} & = (0.5)(0.3) + (0.5)(0.3) \\ 
 +                                  & = 0.3  
 +\end{align*}
 과 같은 방법으로 구한 것이다.   과 같은 방법으로 구한 것이다.  
  
Line 228: Line 246:
 <caption>Theoretical covariance matrix based on Model A</caption> <caption>Theoretical covariance matrix based on Model A</caption>
 | Variable  | Y1  | Y2  | Y3  | | Variable  | Y1  | Y2  | Y3  |
-| Y1  | 0.5 + $\sigma^2_{1}$  | 0.3  | 0  | +| Y1  | 0.5 + $\sigma^2_{1}$  | 0.3  | 0.5  | 
-| Y2  | 0.3  | 0.18 + $\sigma^2_{2}$  | 0  | +| Y2  | 0.3  | 0.18 + $\sigma^2_{2}$  | 0.3  | 
-| Y3  | 0  | 0  | 0.5 + $\sigma^2_{3}$  |+| Y3  | 0.5  | 0.3  | 0.5 + $\sigma^2_{3}$  |
 </table> </table>
 한편 아래의 공식에서 또한 이론적인 variance covariance matrix를 구해볼 수 있는데, 이는 위의 theoretical variance covariance 매트릭스와 동일한 것이다.  한편 아래의 공식에서 또한 이론적인 variance covariance matrix를 구해볼 수 있는데, 이는 위의 theoretical variance covariance 매트릭스와 동일한 것이다. 
  
 Model B Model B
-\begin{eqnarray*}  +\begin{align*}  
-Y_{1} =& (\sqrt2/2) F1 + 0 F2 + e_{1} \\ +Y_{1} & (\sqrt{2}/{2}) F1 + 0 F2 + e_{1} \\ 
-Y_{2} =& (0.3\sqrt2) F1 + 0 F2 + e_{2} \\ +Y_{2} & (0.3\sqrt{2}) F1 + 0 F2 + e_{2} \\ 
-Y_{3} =& 0 F1 - (\sqrt2/2) F2 + e_{3} \\ +Y_{3} & 0 F1 - (\sqrt{2}/2) F2 + e_{3} \\ 
-\end{eqnarray*}+\end{align*}
  
 즉,  즉, 
-  $({\sqrt2}/{2})^2 + (0)^2 = 0.5 $ +\begin{align*}  
-  * $Cov(Y_{1}, Y_{2}) = (\sqrt2/2) * (0.3\sqrt2) = 0.3 $+Var(Y_{1}) & = ({\sqrt2}/{2})^2 + (0)^2 = 0.5 \\ 
 +Cov(Y_{1}, Y_{2}) = (\sqrt2/2) * (0.3\sqrt2) = 0.3  \\ 
 +\end{align*}
 등을 통해서 구한 matrix는 위의 theoretical variance covariance 매트릭스와 동일한 내용을 같는다.  등을 통해서 구한 matrix는 위의 theoretical variance covariance 매트릭스와 동일한 내용을 같는다. 
  
Line 253: Line 273:
  
 ====== Factor solution among many . . . ====== ====== Factor solution among many . . . ======
-Principal component factor analysis 
    
 | Variable, \\ Y<sub>i</sub>  |  Observed \\ variance, S<sup>2</sup><sub>i</sub>  |  Communality, \\ $\beta^2_{i1} +\beta^2_{i2} $  | | Variable, \\ Y<sub>i</sub>  |  Observed \\ variance, S<sup>2</sup><sub>i</sub>  |  Communality, \\ $\beta^2_{i1} +\beta^2_{i2} $  |
Line 304: Line 323:
 |  Variable, \\ Y<sub>i</sub>  |  Observed \\ variance, S<sup>2</sup><sub>i</sub>    Loadings on  || Communality, \\ $b^2_{i1} + b^2_{i2} $  |  Percent \\ explained  |  spec. \\ variance  | |  Variable, \\ Y<sub>i</sub>  |  Observed \\ variance, S<sup>2</sup><sub>i</sub>    Loadings on  || Communality, \\ $b^2_{i1} + b^2_{i2} $  |  Percent \\ explained  |  spec. \\ variance  |
 |  (1)  |  (2)  |  $F_{1}, b_{i1}$ \\ (3)  |  $F_{2}, b_{i2}$ \\ (4)  |  (5)  |  (6) = 100 x (5)/(2)  |    | |  (1)  |  (2)  |  $F_{1}, b_{i1}$ \\ (3)  |  $F_{2}, b_{i2}$ \\ (4)  |  (5)  |  (6) = 100 x (5)/(2)  |    |
-|  Finance, $Y_{1}$  |  9.84  \\ (7)  |  __3.136773__ ((heavy on F1 side))  |  0.023799  |  9.8399 \\ (8)  |  99.999 \\ (8) / (7) * 100 =    |  0.0001 \\ (7) - (8)  |+|  Finance, $Y_{1}$  |  9.84  \\ (7)  |  __3.136773__ ((heavy on F1 side))  |  0.023799  |  9.8399 \\ (8)  |  99.999 \\ (8) / (7) * 100 =    |  0.0001 \\ (7) - (8)  |
 |  Marketing, $Y_{2}$  |  5.04  |  -0.132190  |  __2.237858__ ((heavy on F2 side))  |  5.0255  |  99.712  |  0.0145  | |  Marketing, $Y_{2}$  |  5.04  |  -0.132190  |  __2.237858__ ((heavy on F2 side))  |  5.0255  |  99.712  |  0.0145  |
 |  policy, $Y_{3}$  |  3.04  |  0.127697  |  __1.731884__ ((heavy on F2 side)) |  3.0157  |  99.201  |  0.0243   | |  policy, $Y_{3}$  |  3.04  |  0.127697  |  __1.731884__ ((heavy on F2 side)) |  3.0157  |  99.201  |  0.0243   |
-|  Overall \\ SS loadings  |  17.92 \\ (9)  |  9.873125((contribution of F1 over the total variance)) \\ (10)  |  8.007997 ((contribution of F2 over the total variance of Y<sub>i</sub>)) \\ (11)  |  17.8811 \\ (12)  |  99.783 \\ (9)/(11)  |+|  Overall \\ SS loadings  |  17.92 \\ (9)  |  9.873125((contribution of F1 over the total variance)) \\ (10)  |  8.007997 ((contribution of F2 over the total variance of Y<sub>i</sub>)) \\ (11)  |  17.8811 \\ (12)  |  99.783 \\ (12) / (9)  |
 |    |    |  55.1%  \\ (10) / (9) =  |  44.7%  \\  (11) / (9) =  |    |    |    | |    |    |  55.1%  \\ (10) / (9) =  |  44.7%  \\  (11) / (9) =  |    |    |    |
  
Line 314: Line 333:
 각주 1) -> finance = 수학능력 = F1 각주 1) -> finance = 수학능력 = F1
 각주 2), 3) -> marketing, policy = 언어능력 = F2 각주 2), 3) -> marketing, policy = 언어능력 = F2
-각주 4)는  아래와 같이 구함+각주 6)는  아래와 같이 구함 = Eigenvalue라 부른다
  
 <code> <code>
Line 395: Line 414:
  
 ===== Eigenvalue (고유값) ===== ===== Eigenvalue (고유값) =====
-특정요인의 모든 요인적재량(factor loadings)을 제곱하여 합한 값이다. 특정요인이 설명하는 총분산을 의미한다. +특정요인의 모든 요인적재량(factor loadings)을 제곱하여 합한 값이다. 특정요인이 __설명하는 총분산__을 의미한다. 
 |    Factor  ||| |    Factor  |||
 |  Variable  |  1  |  2  |  3  | |  Variable  |  1  |  2  |  3  |
Line 414: Line 433:
 ===== Communality (공통성) ===== ===== Communality (공통성) =====
 특정변수의 모든 요인적재량을 제곱하여 합한 값이다. 아래에서 변인 climate의 변량에 대해서 추출된 세 요인이 기여하는 분산량의 정도를 의미한다. 이는 $  \hat{h_1} = 0.286^2 + 0.076^2 + 0.841^2 = 0.795  $ 와 같이 표현할 수 있다. 만약 세 요인(factor)을 이용해서 변인 Climate에 multiple regression을 한다면 구할 수 있는 R<sup>2</sup>값을 의미하며, 이는 약 79%의 Climate변인의 변량이 세가지로 이루어진 요인모델에 의해서 설명된다고 해석할 수 있다.  특정변수의 모든 요인적재량을 제곱하여 합한 값이다. 아래에서 변인 climate의 변량에 대해서 추출된 세 요인이 기여하는 분산량의 정도를 의미한다. 이는 $  \hat{h_1} = 0.286^2 + 0.076^2 + 0.841^2 = 0.795  $ 와 같이 표현할 수 있다. 만약 세 요인(factor)을 이용해서 변인 Climate에 multiple regression을 한다면 구할 수 있는 R<sup>2</sup>값을 의미하며, 이는 약 79%의 Climate변인의 변량이 세가지로 이루어진 요인모델에 의해서 설명된다고 해석할 수 있다. 
-|    Factor  |||+|    Factor   |
 |  Variable  |  1  |  2  |  3  | |  Variable  |  1  |  2  |  3  |
 |  Climate  |  0.286  |  0.076  |  0.841  | |  Climate  |  0.286  |  0.076  |  0.841  |
Line 427: Line 446:
  
 이렇게 각 변인의 communality값을 구해보면 아래와 같은 테이블을 구할 수 있는데, 요인분석 모델은 Climate, Health, Arts, 그리고 economics의 변량을 가장 잘 설명한다고 하겠다.  이렇게 각 변인의 communality값을 구해보면 아래와 같은 테이블을 구할 수 있는데, 요인분석 모델은 Climate, Health, Arts, 그리고 economics의 변량을 가장 잘 설명한다고 하겠다. 
-|< 300px 30% - >|+
 | Variable  |  Communality  | | Variable  |  Communality  |
 | Climate  |  @lightgreen:0.795  | | Climate  |  @lightgreen:0.795  |
Line 439: Line 458:
 | Economics        @lightgreen:0.728  | | Economics        @lightgreen:0.728  |
 | Total            5.617  | | Total            5.617  |
 +===== Specificity =====
 +| Variable  |  Communality  |  Specificity  |
 +| Climate          0.795  |  @lightgray:1-0.795  |
 +| Housing          0.518  |     |
 +| Health          |  0.722  |     |
 +| Crime            0.512  |     |
 +| Transportation  |  0.51       |
 +| Education        0.561  |     |
 +| Arts            |  0.754  |     |
 +| Recreation      |  0.517  |     |
 +| Economics        0.728  |     |
 +| Total            5.617  |     |
  
 ====== Methods (functions) in R ====== ====== Methods (functions) in R ======
Line 450: Line 481:
  
 <code> <code>
-mydata <- read.csv("http://commres.net/wiki/_media/r/dataset_exploratoryfactoranalysis.csv")+my.data <- read.csv("http://commres.net/wiki/_media/r/dataset_exploratoryfactoranalysis.csv")
 # if data as NAs, it is better to omit them: # if data as NAs, it is better to omit them:
 my.data <- na.omit(my.data) my.data <- na.omit(my.data)
Line 733: Line 764:
  
 <code> <code>
-> # d read.table("http://www.stanford.edu/class/psych253/data/personality0.txt"+> # d <- read.table("http://www.stanford.edu/class/psych253/data/personality0.txt"
-> d read.table("http://commres.net/wiki/_media/r/personality0.txt")+> d <- read.table("http://commres.net/wiki/_media/r/personality0.txt")
  
 > head(d) > head(d)
Line 1045: Line 1076:
 </code> </code>
  
 +===== communality =====
 +<code>
 +> fa.sort(data.frame(d.fa.so$communality))
 +        d.fa.so.communality order
 +outgoin           0.7376260     1
 +disorgn           0.7329193    30
 +organiz           0.7136615    31
 +quiet             0.7107357     2
 +tense             0.6925168    15
 +withdrw           0.6650390     4
 +sociabl           0.6302538     5
 +talkatv           0.6221579     3
 +relaxed           0.6166856    17
 +friendl           0.6063722    24
 +worryin           0.6046637    16
 +contrar           0.5949600    26
 +anxious           0.5893186    18
 +shy               0.5859167     6
 +lazy              0.5771937    10
 +respnsi           0.5750101    12
 +hardwrk           0.5585236     9
 +carelss           0.5523099    32
 +kind              0.5251513    22
 +discipl           0.5096792     8
 +laidbck           0.4980387    19
 +harsh             0.4791709    28
 +distant           0.4785914     7
 +coopera           0.4574619    23
 +opposng           0.4572599    27
 +agreebl           0.4508557    21
 +persevr           0.4442142    11
 +givinup           0.4409678    13
 +easygon           0.4340117    20
 +criticl           0.4333566    29
 +approvn           0.3705982    25
 +lax               0.3295470    14
 +
 +</code>
 ===== eigenvalues ===== ===== eigenvalues =====
 +위의 아웃풋에서 (d.fa.so)
 +SS loadings (eigenvalue 라고 부른다)
 <code>                       MR1  MR2  MR4  MR5  MR3  MR6 <code>                       MR1  MR2  MR4  MR5  MR3  MR6
 SS loadings           4.50 3.19 2.97 2.55 2.31 2.16 SS loadings           4.50 3.19 2.97 2.55 2.31 2.16
Line 1053: Line 1124:
 Cumulative Proportion 0.25 0.43 0.60 0.75 0.88 1.00 Cumulative Proportion 0.25 0.43 0.60 0.75 0.88 1.00
  
-SS total = 32.14286 
 SS loadings = eigenvalues for each factor (MR1, . . . ) SS loadings = eigenvalues for each factor (MR1, . . . )
 </code> </code>
 +
 SS loadings           <fc #ff0000>4.50</fc>  SS loadings           <fc #ff0000>4.50</fc> 
-Proportion Var        <fc #ff0000>0.14</fc+<code> 
 +# SS total = 각 변인들의 분산을 (variation) 1 로 보았을 때 SS loading 값을 구한 것이므로  
 +# SS total 값은 각 변인들의 숫자만큼이 된다. 이 경우는 총 32개 문항이 존재하므로 32가 SS total 
 +ss.tot = 32 
 +</code>
  
 +SS total              <fc #ff0000>32</fc> (성격변인 들의 SS값을 모두 더한 값 즉, 각 변인의 SS값을 구하여 이를 더한 값)
 +$\frac {4.5}{32} = 0.14$
 +Proportion Var        <fc #ff0000>0.14</fc> 
 eigenvalues for factor 1  eigenvalues for factor 1 
-<code>d.fa.s$loadings + 
-d.fa.s.loadings.f1 <- d.fa.s$loadings[,1] +| SS loadings \\ eigenvalue  | 4.50  | 3.19  | 2.97  | 2.55  | 2.31  | 2.16  | 
-ev_fa1 <- sum(data.frame(d.fa.s.loadings.f1)^2)+|                            | $\frac {4.5}{32}$  | $\frac {3.19}{32}$  | $\frac {2.97}{32}$  | $\frac {2.55}{32}$  | $\frac {2.31}{32}$  | $\frac {2.16}{32}$ 
 +| Proportion Var          | 0.14  | 0.10  | 0.09  | 0.08  | 0.07  | 0.07  | 
 +| Cumulative Var          | 0.14  | 0.24  | 0.33  | 0.41  | 0.48  | 0.55  |  
 + 
 +아래는 loading값 중 첫번 째 팩터의 합을 (eigenvalue)  체크하는 방법 
 +<code>d.fa.so$loadings 
 +d.fa.so.loadings.f1 <- d.fa.so$loadings[,1] 
 +ev_fa1 <- sum(data.frame(d.fa.so.loadings.f1)^2)
 # this value should be matched with SS loadings for MR1 # this value should be matched with SS loadings for MR1
 ev_fa1 ev_fa1
Line 1068: Line 1153:
 </code> </code>
  
-What is the total variance of all variables? +<code> 
-\begin{eqnarray*} +> (4.50+3.19+2.97+2.55+2.31+2.16)/32 
-4.5 : 0.14 =& x : 1.00 \\  +[1] 0.5525
-x =& 4.5 / .14 \\ +
-  =& 32.14286 +
-\end{eqnarray*} +
- +
-Proportion of Factor 1's contribution +
-<code>> ev_fa1/length(d.fa.s.loadings.f1+
-[1] 0.1406331 +
-></code>+
  
 +> or 
 +sum(d.fa.so.loadings^2)/ss.tot
 +</code>
 ===== specific variance ===== ===== specific variance =====
 1 - communality  1 - communality 
 Uniqueness  Uniqueness 
 <code> <code>
-data.frame(d.fa.s$uniquenesses) +data.frame(d.fa.so$uniquenesses) 
-        d.fa.s.uniquenesses+        d.fa.so.uniquenesses
 outgoin           0.2623740 outgoin           0.2623740
 quiet             0.2892643 quiet             0.2892643
Line 1123: Line 1203:
  
 uniqueness for variable 1 (v1) uniqueness for variable 1 (v1)
-<code>> d.fa.s.loadings.v1 <- d.fa.s$loadings[1,+<code>> d.fa.so.loadings.v1 <- d.fa.so$loadings[1,
-> d.fa.s.communality.v1 <- sum(d.fa.s.loadings.v1^2) +> d.fa.so.communality.v1 <- sum(d.fa.so.loadings.v1^2) 
-> d.fa.s.uniqeness.v1 <- 1 - d.fa.s.communality.v1 +> d.fa.so.uniqeness.v1 <- 1 - d.fa.so.communality.v1 
-> d.fa.s.communality.v1 +> d.fa.so.communality.v1 
 [1] 0.737626 [1] 0.737626
-> d.fa.s.uniqeness.v1 +> d.fa.so.uniqeness.v1 
 [1] 0.262374 [1] 0.262374
 > </code>  > </code> 
  
-> d.fa.s.communality.v1  = [1] 0.737626 = 0.74 +> d.fa.so.communality.v1  = [1] 0.737626 = 0.74 
-> d.fa.s.uniqeness.v1  = [1] 0.262374 = 0.26+> d.fa.so.uniqeness.v1  = [1] 0.262374 = 0.26
  
 ===== plotting ===== ===== plotting =====
 intronductory intronductory
 <code> <code>
-load12 <- d.fa.s$loadings[,1:2] # for factor 1 and 2+load12 <- d.fa.so$loadings[,1:2] # for factor 1 and 2
 plot(load12, type='n') plot(load12, type='n')
-text(load12, labels=names(d.fa.s.loadings.f1), cex=.7)+text(load12, labels=names(d.fa.so.loadings.f1), cex=.7)
 </code> </code>
  
 <code> <code>
-load23 <- d.fa.s$loadings[,2:3] # for factor 1 and 2+load23 <- d.fa.so$loadings[,2:3] # for factor 1 and 2
 plot(load23, type='n') plot(load23, type='n')
-text(load23, labels=names(d.fa.s.loadings.f1), cex=.7)+text(load23, labels=names(d.fa.so.loadings.f1), cex=.7)
 </code> </code>
  
  
 <code> <code>
-load123 <- d.fa.s$loadings[,1:3] # for factor 1 and 2+load123 <- d.fa.so$loadings[,1:3] # for factor 1 and 2
 plot(load123, type='n') plot(load123, type='n')
-text(load123, labels=names(d.fa.s.loadings.f1), cex=.7)+text(load123, labels=names(d.fa.so.loadings.f1), cex=.7)
 </code> </code>
 ====== E.g., 4 ====== ====== E.g., 4 ======
Line 1388: Line 1468:
 head(saq) head(saq)
 </code> </code>
 +
 +see [[:SAQ dataset]]
 ====== e.g., 5 ====== ====== e.g., 5 ======
 {{:r:EFA.csv}} {{:r:EFA.csv}}
Line 1482: Line 1564:
 ====== Reference ====== ====== Reference ======
 {{:factor_analysis_lecture_note.pdf|Lecture Note}} from databaser {{:factor_analysis_lecture_note.pdf|Lecture Note}} from databaser
 +[[https://stats.oarc.ucla.edu/spss/seminars/introduction-to-factor-analysis/a-practical-introduction-to-factor-analysis/]] 
 +[[https://advstats.psychstat.org/book/factor/efa.php]] 
 +see exploratory factor analysis :: {{youtube>Ollp2nSQCLY}}
factor_analysis.1573372799.txt.gz · Last modified: 2019/11/10 16:59 by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki