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 revision Previous revision
Next revision
Previous revision
factor_analysis [2019/11/10 16:29]
hkimscil
factor_analysis [2019/11/20 09:56] (current)
hkimscil [excersize]
Line 204: Line 204:
 \end{pmatrix} ​ \end{pmatrix} ​
 $$ $$
- 
- 
  
 실제 데이터에서 구한 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공식을 완성할 수 있게 된다. ​
Line 253: Line 251:
  
 ====== 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 314: Line 311:
 각주 1) -> finance = 수학능력 = F1 각주 1) -> finance = 수학능력 = F1
 각주 2), 3) -> marketing, policy = 언어능력 = F2 각주 2), 3) -> marketing, policy = 언어능력 = F2
-각주 4)는  아래와 같이 구함+각주 4)는  아래와 같이 구함 ​= Eigenvalue라 부른다
  
 <​code>​ <​code>​
Line 733: Line 730:
  
 <​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 1042:
 </​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 1057: Line 1094:
 </​code>​ </​code>​
 SS loadings ​          <​fc #​ff0000>​4.50</​fc> ​ SS loadings ​          <​fc #​ff0000>​4.50</​fc> ​
 +SS total              <fc #​ff0000>​32.14286</​fc>​ (성격변인 들의 SS값을 모두 더한 값 즉, 각 변인의 SS값을 구하여 이를 더한 값)
 +$\frac {4.5}{32.14286} = 0.14$
 Proportion Var        <fc #​ff0000>​0.14</​fc> ​ 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.14286}$ ​ | $\frac {3.19}{32.14286}$ ​ | $\frac {2.97}{32.14286}$ ​ | $\frac {2.55}{32.14286}$ ​ | $\frac {2.31}{32.14286}$ ​ | $\frac {2.16}{32.14286}$ ​ | 
 +| 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 1075: Line 1120:
 \end{eqnarray*} \end{eqnarray*}
  
-Proportion of Factor 1's contribution +<​code>​ 
-<​code>> ​ev_fa1/​length(d.fa.s.loadings.f1+> (4.50+3.19+2.97+2.55+2.31+2.16)/32.14286 
-[1] 0.1406331 +[1] 0.5500444 
-></​code>​ +</​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 1167:
  
 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 1432:
 head(saq) head(saq)
 </​code>​ </​code>​
 +
 +see [[:SAQ dataset]]
 ====== e.g., 5 ====== ====== e.g., 5 ======
 {{:​r:​EFA.csv}} {{:​r:​EFA.csv}}
factor_analysis.1573372799.txt.gz · Last modified: 2019/11/10 16:29 by hkimscil