요인분석(FA: Factor Analysis)

요인분석(Factor Analysis)은 다변량 통계 기법의 하나로, 여러 관찰된 변수들 간의 상관 관계를 분석하여 이들을 설명하는 잠재 요인(공통 요인)을 추출하는 방법입니다. 요인분석은 주로 데이터의 차원을 축소하고, 변수 간의 숨겨진 구조를 이해하며, 데이터의 주요 패턴을 식별하는 데 사용됩니다.

요인분석의 주요 개념

잠재 요인 (Latent Factors):

    • 직접 관찰할 수 없지만 여러 관찰된 변수의 변동을 설명하는 숨겨진 변수입니다.
    • 예를 들어, 심리학 연구에서 “지능”이나 “성격”과 같은 개념이 잠재 요인이 될 수 있습니다.

    관찰된 변수 (Observed Variables):

      • 실제로 측정되거나 관찰된 변수들로, 요인분석을 통해 잠재 요인에 의해 설명됩니다.
      • 예를 들어, 학생들의 시험 점수, 출석률, 과제 제출률 등이 관찰된 변수가 될 수 있습니다.

      요인 적재값 (Factor Loadings):

        • 관찰된 변수와 잠재 요인 간의 상관 관계를 나타내는 값입니다. 요인 적재값이 클수록 해당 요인이 관찰된 변수의 변동을 잘 설명합니다.

        공통성 (Communality):

          • 각 관찰된 변수가 공통 요인에 의해 설명되는 정도를 나타내는 값입니다.
          • 공통성 값이 높을수록 해당 변수가 공통 요인에 의해 잘 설명됩니다.

          요인분석의 종류

          탐색적 요인분석 (Exploratory Factor Analysis, EFA):

            • 데이터 내의 잠재 요인 구조를 탐색하고 식별하는 방법입니다.
            • 주로 데이터에 대한 사전 가설이 없는 경우 사용됩니다.

            확인적 요인분석 (Confirmatory Factor Analysis, CFA):

              • 사전에 정의된 요인 구조가 데이터를 잘 설명하는지 검증하는 방법입니다.
              • 주로 이론적 가설이 있는 경우 사용됩니다.

              요인분석의 절차

              데이터 수집:

                • 분석할 데이터를 수집합니다. 데이터는 주로 설문지 응답, 테스트 점수 등입니다.

                상관 행렬 계산:

                  • 관찰된 변수들 간의 상관 행렬을 계산하여 변수들 간의 관계를 파악합니다.

                  요인 추출:

                    • 잠재 요인을 추출합니다. 주로 주성분 분석(PCA)을 사용하여 요인을 추출합니다.

                    요인 회전:

                      • 요인의 해석 가능성을 높이기 위해 요인 회전을 수행합니다. 주로 직각 회전(Varimax)과 사각 회전(Promax)을 사용합니다.

                      요인 해석:

                        • 각 요인에 의해 설명되는 변수를 해석하고, 요인의 의미를 결정합니다.

                        회전 (Rotation)

                        요인분석에서 회전(rotation)은 추출된 요인의 해석을 용이하게 하기 위해 사용되는 기법입니다. 회전은 요인 적재값의 단순 구조를 강화하여 각 변수와 요인의 관계를 명확하게 합니다. 회전의 종류는 크게 두 가지로 나눌 수 있습니다: 직교 회전(orthogonal rotation)과 사각 회전(oblique rotation).

                        1. 직교 회전 (Orthogonal Rotation)

                        직교 회전은 요인 간의 상관 관계가 없도록 유지하는 회전 방법입니다. 즉, 회전된 요인들은 서로 직교(orthogonal)하게 됩니다. 직교 회전은 요인들 간의 독립성을 유지하면서 단순 구조를 추구합니다.

                        주요 직교 회전 방법

                        • Varimax 회전: 가장 널리 사용되는 직교 회전 방법입니다. 각 요인이 적재값의 분산을 최대화하여, 각 변수들이 특정 요인에 높은 적재값을 갖도록 합니다. 이를 통해 요인의 해석이 쉬워집니다.
                        • Quartimax 회전: 첫 번째 요인이 최대한 많은 변동성을 설명하도록 하는 방법입니다. 그러나 다른 요인들의 해석이 어려울 수 있습니다.
                        • Equamax 회전: Varimax와 Quartimax 회전의 특성을 결합한 방법입니다. 요인들 간의 균형을 유지하려고 합니다.

                        2. 사각 회전 (Oblique Rotation)

                        사각 회전은 요인 간의 상관 관계를 허용하는 회전 방법입니다. 즉, 회전된 요인들은 서로 상관관계가 있을 수 있습니다. 사각 회전은 요인들이 독립적이지 않을 때 더 현실적인 해석을 제공합니다.

                        주요 사각 회전 방법

                        • Promax 회전: Varimax 회전을 먼저 수행한 후, 이를 기반으로 사각 회전을 적용합니다. Promax 회전은 빠르고 계산 효율적입니다.
                        • Direct Oblimin 회전: 회전된 요인들 간의 상관 관계를 직접 조절할 수 있는 방법입니다. 상관 관계의 정도를 조절할 수 있는 델타(delta) 매개변수를 제공합니다.
                        • Quartimin 회전: Promax 회전과 유사하지만, Quartimin 회전은 더 일반적인 형태의 사각 회전 방법입니다.

                        회전의 적용 예시 (Python)

                        Python의 factor_analyzer 라이브러리를 사용하여 Varimax 회전(직교 회전)과 Promax 회전(사각 회전)을 적용하는 예시를 보겠습니다.

                        import pandas as pd
                        from factor_analyzer import FactorAnalyzer
                        import matplotlib.pyplot as plt
                        
                        # 예시 데이터 생성
                        data = {
                            'Test1': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
                            'Test2': [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],
                            'Test3': [10, 8, 9, 7, 6, 5, 3, 2, 4, 1],
                            'Test4': [7, 6, 5, 4, 3, 2, 1, 2, 3, 4],
                            'Test5': [8, 7, 6, 5, 4, 3, 2, 1, 0, 1]
                        }
                        df = pd.DataFrame(data)
                        
                        # 요인분석 수행 (요인 수: 2)
                        fa = FactorAnalyzer(n_factors=2, rotation='varimax')
                        fa.fit(df)
                        
                        # 요인 적재값 출력 (Varimax 회전)
                        loadings_varimax = fa.loadings_
                        print("Varimax 회전 요인 적재값:\n", loadings_varimax)
                        
                        # Promax 회전 적용
                        fa_promax = FactorAnalyzer(n_factors=2, rotation='promax')
                        fa_promax.fit(df)
                        
                        # 요인 적재값 출력 (Promax 회전)
                        loadings_promax = fa_promax.loadings_
                        print("Promax 회전 요인 적재값:\n", loadings_promax)

                        결과 해석

                        Varimax 회전 (직교 회전):

                        • 요인들 간의 상관 관계가 없으며, 각 요인이 특정 관찰 변수에 높은 적재값을 갖도록 합니다.
                        • 해석이 용이하고, 요인들이 독립적일 때 유용합니다.

                        Promax 회전 (사각 회전):

                          • 요인들 간의 상관 관계를 허용하며, 실제 데이터의 복잡한 구조를 더 잘 반영할 수 있습니다.
                          • 요인들이 상관 관계가 있을 때, 더 현실적인 해석을 제공합니다.

                          요약

                          요인분석에서 회전은 추출된 요인을 더 명확하게 해석하기 위한 중요한 단계입니다. 직교 회전(예: Varimax)은 요인 간의 독립성을 유지하면서 단순 구조를 제공하며, 사각 회전(예: Promax)은 요인 간의 상관 관계를 허용하여 더 현실적인 해석을 가능하게 합니다. 연구자는 데이터의 특성과 연구 목적에 따라 적절한 회전 방법을 선택하여 요인분석을 수행할 수 있습니다.

                          요인분석 예시 (Python 사용)

                          다음은 Python의 factor_analyzer 라이브러리를 사용하여 탐색적 요인분석을 수행하는 예시입니다.

                          import pandas as pd
                          from factor_analyzer import FactorAnalyzer
                          import matplotlib.pyplot as plt
                          
                          # 예시 데이터 생성
                          data = {
                              'Test1': [10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
                              'Test2': [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],
                              'Test3': [10, 8, 9, 7, 6, 5, 3, 2, 4, 1],
                              'Test4': [7, 6, 5, 4, 3, 2, 1, 2, 3, 4],
                              'Test5': [8, 7, 6, 5, 4, 3, 2, 1, 0, 1]
                          }
                          df = pd.DataFrame(data)
                          
                          # 요인분석 수행
                          fa = FactorAnalyzer(n_factors=2, rotation='varimax')
                          fa.fit(df)
                          
                          # 요인 적재값 출력
                          loadings = fa.loadings_
                          print(loadings)
                          
                          # 스크리 플롯 (Scree Plot) 생성
                          ev, v = fa.get_eigenvalues()
                          plt.figure(figsize=(8, 6))
                          plt.scatter(range(1, df.shape[1] + 1), ev)
                          plt.plot(range(1, df.shape[1] + 1), ev)
                          plt.title('Scree Plot')
                          plt.xlabel('Factors')
                          plt.ylabel('Eigenvalue')
                          plt.grid()
                          plt.show()

                          결과 해석

                          요인 적재값:

                            • 요인 적재값 행렬은 각 요인과 관찰된 변수 간의 상관 관계를 나타냅니다. 높은 적재값은 해당 요인이 관찰된 변수의 변동을 잘 설명함을 의미합니다.

                            스크리 플롯 (Scree Plot):

                              • 스크리 플롯은 각 요인의 고유값을 나타내며, 요인의 중요도를 평가하는 데 사용됩니다. 보통 고유값이 1 이상인 요인을 선택합니다.

                              요인 해석:

                                • 요인 적재값을 기반으로 각 요인의 의미를 해석합니다. 예를 들어, Test1, Test2, Test3의 적재값이 높은 요인은 ‘학업 성취도’를 나타낼 수 있습니다.

                                요약

                                요인분석은 관찰된 변수들 간의 상관 관계를 분석하여 이들을 설명하는 잠재 요인을 추출하는 통계 기법입니다. 이를 통해 데이터의 차원을 축소하고, 변수 간의 숨겨진 구조를 이해하며, 데이터의 주요 패턴을 식별할 수 있습니다. 탐색적 요인분석과 확인적 요인분석을 통해 다양한 연구 및 실무에서 중요한 통찰을 얻을 수 있습니다.

                                요인분석 예시

                                확인적 요인분석(CFA, Confirmatory Factor Analysis)은 사전에 정의된 요인 구조가 데이터에 잘 맞는지를 검증하는 통계 기법입니다. 이 분석은 특정 이론이나 가설을 테스트하는 데 사용됩니다. 예를 들어, 심리학 연구에서 특정 심리적 특성이 여러 질문을 통해 측정된다고 가정할 때, 이러한 가정을 확인적 요인분석을 통해 검증할 수 있습니다.

                                확인적 요인분석의 단계

                                1. 이론적 모형 설정: 연구자가 측정하고자 하는 잠재 변수(요인)와 관찰 변수 간의 관계를 이론적으로 설정합니다.
                                2. 데이터 수집: 모형을 테스트할 데이터를 수집합니다.
                                3. 모형 적합: 수집된 데이터를 바탕으로 모형을 적합시키고, 각 요인과 변수 간의 관계를 추정합니다.
                                4. 모형 평가: 적합도 지수를 사용하여 모형이 데이터를 얼마나 잘 설명하는지 평가합니다.
                                5. 모형 수정: 필요시 모형을 수정하여 적합도를 개선합니다.

                                실제 사례: 설문지 데이터 분석

                                가정

                                다음의 가정 하에 확인적 요인분석을 수행합니다:

                                • 잠재 변수(Latent Variables): 만족도(Satisfaction), 충성도(Loyalty)
                                • 관찰 변수(Observed Variables): 여러 설문 문항

                                데이터 설명

                                • 설문 문항은 1부터 5까지의 Likert 척도로 응답됩니다.
                                • 각 잠재 변수를 측정하기 위한 여러 설문 문항이 있습니다.

                                Python을 이용한 CFA 사례

                                Python의 semopy 패키지를 사용하여 확인적 요인분석을 수행하는 예제를 보겠습니다.

                                import pandas as pd
                                from semopy import Model, Optimizer
                                import numpy as np
                                
                                # 예시 데이터 생성
                                np.random.seed(0)
                                data = pd.DataFrame({
                                    'Q1': np.random.randint(1, 6, 100),
                                    'Q2': np.random.randint(1, 6, 100),
                                    'Q3': np.random.randint(1, 6, 100),
                                    'Q4': np.random.randint(1, 6, 100),
                                    'Q5': np.random.randint(1, 6, 100),
                                    'Q6': np.random.randint(1, 6, 100),
                                    'Q7': np.random.randint(1, 6, 100),
                                    'Q8': np.random.randint(1, 6, 100)
                                })
                                
                                # 모형 정의
                                desc = """
                                Satisfaction =~ Q1 + Q2 + Q3 + Q4
                                Loyalty =~ Q5 + Q6 + Q7 + Q8
                                """
                                
                                # 모형 적합
                                model = Model(desc)
                                opt = Optimizer(model)
                                opt.optimize(data)
                                
                                # 결과 출력
                                print(model.inspect())

                                결과 해석

                                1. 모형 적합도 지수:
                                • Chi-Square: 모형이 데이터에 잘 맞는지 평가합니다. 낮을수록 좋습니다.
                                • RMSEA (Root Mean Square Error of Approximation): 0.05 이하이면 좋은 적합도를 의미합니다.
                                • CFI (Comparative Fit Index): 0.90 이상이면 좋은 적합도를 의미합니다.
                                • TLI (Tucker-Lewis Index): 0.90 이상이면 좋은 적합도를 의미합니다.
                                • SRMR (Standardized Root Mean Square Residual): 0.08 이하이면 좋은 적합도를 의미합니다.

                                경로 계수 (Path Coefficients):

                                  • 각 경로의 계수를 통해 잠재 변수와 관찰 변수 간의 관계를 해석합니다.
                                  • 예를 들어, Satisfaction -> Q1의 경로 계수가 양수이고 유의미하다면, 만족도가 Q1 문항의 응답에 긍정적인 영향을 미친다고 해석할 수 있습니다.

                                  표준화된 경로 계수:

                                    • 각 경로 계수가 표준화된 값으로 제공됩니다. -1에서 1 사이의 값을 가지며, 절대값이 클수록 변수 간의 강한 관계를 의미합니다.

                                    신뢰도 및 타당도:

                                      • 신뢰도 (Reliability): 관찰 변수의 내적 일관성을 평가합니다. 크론바흐 알파(Cronbach’s Alpha)가 0.70 이상이면 좋습니다.
                                      • 타당도 (Validity): 관찰 변수들이 잠재 변수를 얼마나 잘 측정하는지를 평가합니다.

                                      요약

                                      확인적 요인분석(CFA)은 사전에 정의된 요인 구조가 데이터를 잘 설명하는지를 검증하는 데 사용됩니다. 이를 통해 연구자는 이론적 가설을 테스트하고, 변수 간의 관계를 명확히 할 수 있습니다. Python의 semopy 패키지를 사용하여 쉽게 CFA를 수행하고, 모형 적합도와 경로 계수를 해석할 수 있습니다. 이를 통해 데이터를 바탕으로 이론적 모델을 검증하고, 변수 간의 관계를 심층적으로 이해할 수 있습니다.

                                      댓글 달기

                                      이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

                                      위로 스크롤