九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Python實戰(zhàn)|手把手教你做因子分析
userphoto

2022.11.22 湖北

關注

最近看了很多的關于因子分析的資料,整理出這篇理論+實戰(zhàn)文章分享給大家。

后續(xù)會出一篇PCA主成分分析的文章,將主成分分析和因子分析兩種降維的方法進行對比。

一、因子分析

作為多元統(tǒng)計分析里的降維方法之一,因子分析可以應用于多個場景,如調(diào)研、數(shù)據(jù)建模等場景之中。

1.1起源

因子分析的起源是這樣的:1904年英國的一個心理學家發(fā)現(xiàn)學生的英語、法語和古典語成績非常有相關性,他認為這三門課程背后有一個共同的因素驅(qū)動,最后將這個因素定義為“語言能力”。

基于這個想法,發(fā)現(xiàn)很多相關性很高的因素背后有共同的因子驅(qū)動,從而定義了因子分析,這便是因子分析的由來。

1.2基本思想

我們再通過一個更加實際的例子來理解因子分析的基本思想:

現(xiàn)在假設一個同學的數(shù)學、物理、化學、生物都考了滿分,那么我們可以認為這個學生的理性思維比較強,在這里理性思維就是我們所說的一個因子。在這個因子的作用下,偏理科的成績才會那么高。

到底什么是因子分析?就是假設現(xiàn)有全部自變量x的出現(xiàn)是因為某個潛在變量的作用,這個潛在的變量就是我們說的因子。在這個因子的作用下,x能夠被觀察到。

因子分析就是將存在某些相關性的變量提煉為較少的幾個因子,用這幾個因子去表示原本的變量,也可以根據(jù)因子對變量進行分類。

因子分子本質(zhì)上也是降維的過程,和主成分分析(PCA)算法比較類似。

1.3兩種因子分析

因子分析又分為兩種:

  • 探索性因子分析:不確定在現(xiàn)有的自變量背后到底有幾個因子在起作用,我們通過需要這種方法試圖尋找到這幾個因子
  • 驗證性因子分析:已經(jīng)假設自變量背后有幾個因子,試圖通過這種方法去驗證一下這種假設是否正確。

1.4模型推導

假設有p個原始的變量,它們之間可能獨立也可能相關。將標準化后得到新的變量,我們可以建立如下的因子分析模型:

其中,我們可以定義以下幾個術語:公共因子、特殊因子、載荷因子、載荷矩陣

1、第一點:出現(xiàn)在每個變量的式子中且m<p,稱之為公共因子

2、第二點:僅僅與變量相關,稱之為特殊因子

3、第三點:系數(shù)稱之為載荷因子

4、第四點:稱之為載荷矩陣

上面的式子可以表示為:

同時也就滿足:

我們通常需要對上述模型的進行假設:

1.各個特殊因子以及特殊因子和公共因子之間相互獨立,即滿足:

2、各公共因子都是均值為0、方差為1的獨立正態(tài)隨機變量,其協(xié)方差矩陣為單位矩陣,即

3、m個公共因子對第i個變量方差的貢獻稱之為第i貢獻度,記為

4、特殊因子的方差稱之為特殊方差或者特殊值

5、第i個變量的方差分解為:

具體的模型推導過程:https://blog.csdn.net/qq_29831163/article/details/88901245

1.5因子載荷矩陣的重要性質(zhì)

關于因子載荷矩陣的幾個重要性質(zhì):

1、因子載荷是第i個變量與第j個公共因子的相關系數(shù),反映的是第i個變量和第j個公共因子之間的重要性。絕對值越大,表示相關性的密切程度越高。

2、貢獻度的統(tǒng)計意義

說明:變量的貢獻度就是因子載荷矩陣的第i行的元素的平方和

上式兩邊同時求方差:

也就是:

可以看出來:公共因子和特殊因子對變量的貢獻度之和為1。如果非常接近1,則非常小,則因子分析的效果非常好。

3、公共因子方差貢獻的統(tǒng)計意義

因子載荷矩陣中各列元素的平方和 成為對所有的的方差貢獻和,衡量的相對重要性。

二、因子分析步驟

應用因子分析法的主要步驟如下:

  • 對所給的數(shù)據(jù)樣本進行標準化處理
  • 計算樣本的相關矩陣R
  • 求相關矩陣R的特征值、特征向量
  • 根據(jù)系統(tǒng)要求的累積貢獻度確定主因子的個數(shù)
  • 計算因子載荷矩陣A
  • 最終確定因子模型

三、factor_analyzer庫

利用Python進行因子分析的核心庫是:factor_analyzer

pip install factor_analyzer

這個庫主要有兩個主要的模塊需要學習:

  • factor_analyzer.analyze(重點)
  • factor_analyzer.factor_analyzer

官網(wǎng)學習地址:https://factor-analyzer.readthedocs.io/en/latest/factor_analyzer.html

四、案例實戰(zhàn)

下面通過一個案例來講解如何進行因子分析。

4.1數(shù)據(jù)介紹

本文中使用的數(shù)據(jù)是公開的數(shù)據(jù)集,下面是數(shù)據(jù)的介紹和下載地址:

  • 數(shù)據(jù)集介紹: https://vincentarelbundock.github.io/Rdatasets/doc/psych/bfi.html
  • 數(shù)據(jù)集下載: https://vincentarelbundock.github.io/Rdatasets/datasets.html

這個數(shù)據(jù)集收集了2800個人關于人格的25個問題。同時這些數(shù)據(jù)和隱藏的5個特征相關,

Big Five Model is widely used nowadays, the five factors include: neuroticism,extraversion,openness to experience,agreeableness and conscientiousness.

4.2特征關系

特征之間的對應關系為:

  • 認同性:agree=c(“-A1”,“A2”,“A3”,“A4”,“A5”)
  • 勤奮的、有責任的:conscientious=c(“C1”,“C2”,“C3”,“-C4”,“-C5”)
  • 外向的:extraversion=c(“-E1”,“-E2”,“E3”,“E4”,“E5”)
  • 神經(jīng)質(zhì)、不穩(wěn)定性:neuroticism=c(“N1”,“N2”,“N3”,“N4”,“N5”)
  • 開放的:openness = c(“O1”,“-O2”,“O3”,“O4”,“-O5”)

事先我們并不知道這些隱形變量的對應關系,所以想要通過因子分析來找到25個變量后面的隱藏變量。下面開始進行因子分析的實戰(zhàn)過程:

五、導入庫

導入數(shù)據(jù)處理和分析所需要的庫:

# 數(shù)據(jù)處理
import pandas as pd
import numpy as np

# 繪圖
import seaborn as sns
import matplotlib.pyplot as plt
# 因子分析
from factor_analyzer import FactorAnalyzer

六、數(shù)據(jù)探索

6.1數(shù)據(jù)信息

首先我們先導進數(shù)據(jù):總共是2800條數(shù)據(jù),28個特征屬性

df = pd.read_csv('bfi.csv', index_col=0).reset_index(drop=True)
df

查看下數(shù)據(jù)的缺失值情況:大部分的字段都是存在缺失值的

6.2數(shù)據(jù)預處理

數(shù)據(jù)預處理包含去除3個無效的字段(對分析沒有任何作用:age、gender、education),同時去掉存在空值的數(shù)據(jù):

#  去掉無效字段
df.drop(['gender','education','age'],axis=1,inplace=True)
# 去掉空值
df.dropna(inplace=True)

七、充分性檢測

在進行因子分析之前,需要先進行充分性檢測,主要是檢驗相關特征陣中各個變量間的相關性,是否為單位矩陣,也就是檢驗各個變量是否各自獨立。通常是兩種方法:

  • Bartlett's球狀檢驗(巴特利球形檢驗)
  • KMO檢驗

7.1Bartlett's球狀檢驗

檢驗總體變量的相關矩陣是否是單位陣(相關系數(shù)矩陣對角線的所有元素均為1,所有非對角線上的元素均為零);即檢驗各個變量是否各自獨立。

如果不是單位矩陣,說明原變量之間存在相關性,可以進行因子分子;反之,原變量之間不存在相關性,數(shù)據(jù)不適合進行主成分分析

from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity

chi_square_value, p_value = calculate_bartlett_sphericity(df)
chi_square_value, p_value

# 結果
(18170.966350869240.0)

我們發(fā)現(xiàn)統(tǒng)計量p-value的值為0,表明變量的相關矩陣不是單位矩陣,即各個變量之間是存在一定的相關性,我們就可以進行因子分析。

7.2KMO檢驗

檢查變量間的相關性和偏相關性,取值在0-1之間;KOM統(tǒng)計量越接近1,變量間的相關性越強,偏相關性越弱,因子分析的效果越好。

Kaiser-Meyer-Olkin (KMO) Test measures the suitability of data for factor analysis. It determines the adequacy for each observed variable and for the complete model.

KMO estimates the proportion of variance among all the observed variable. Lower proportion id more suitable for factor analysis. KMO values range between 0 and 1. Value of KMO less than 0.6 is considered inadequate.

通常取值從0.6開始進行因子分析

from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(df)
kmo_all

KMO大于0.6,也說明變量之間存在相關性,可以進行分析。

八、選擇因子個數(shù)

在數(shù)據(jù)說明中,我們已經(jīng)知道了這些變量是和5個隱藏的因子相關。但是很多情況下,我們并不知道這個個數(shù),需要自己進行探索。

方法:計算相關矩陣的特征值,進行降序排列

8.1特征值和特征向量

faa = FactorAnalyzer(25,rotation=None)
faa.fit(df)

# 得到特征值ev、特征向量v
ev,v=faa.get_eigenvalues()

8.2可視化展示

我們將特征值和因子個數(shù)的變化繪制成圖形:

 # 同樣的數(shù)據(jù)繪制散點圖和折線圖
plt.scatter(range(1, df.shape[1] + 1), ev)
plt.plot(range(1, df.shape[1] + 1), ev)

# 顯示圖的標題和xy軸的名字
# 最好使用英文,中文可能亂碼
plt.title('Scree Plot')  
plt.xlabel('Factors')
plt.ylabel('Eigenvalue')

plt.grid()  # 顯示網(wǎng)格
plt.show()  # 顯示圖形

從上面的圖形中,我們明確地看到:選擇5個因子是最合適的

九、建模

9.1因子分析-fit

我們選擇5個因子來進行因子分子的建模過程,同時指定矩陣旋轉(zhuǎn)方式為:方差最大化

ratation參數(shù)的其他取值情況:

  • varimax (orthogonal rotation)
  • promax (oblique rotation)
  • oblimin (oblique rotation)
  • oblimax (orthogonal rotation)
  • quartimin (oblique rotation)
  • quartimax (orthogonal rotation)
  • equamax (orthogonal rotation)

9.2查看因子方差-get_communalities()

上面執(zhí)行fit建模后,我們查看每個因子的方差,使用方法:get_communalities()

9.3查看特征值-get_eigenvalues

查看變量的特征值:

9.4查看成分矩陣-loadings

現(xiàn)在有25個變量,5個隱藏變量(因子),查看它們構成的成分矩陣:

如果轉(zhuǎn)成DataFrame格式,index就是我們的25個變量,columns就是指定的5個因子factor。轉(zhuǎn)成DataFrame格式后的數(shù)據(jù):

9.5查看因子貢獻率-get_factor_variance()

通過理論部分的解釋,我們發(fā)現(xiàn)每個因子都對變量有一定的貢獻,存在某個貢獻度的值,在這里查看3個和貢獻度相關的指標:

  • 總方差貢獻:variance (numpy array) – The factor variances
  • 方差貢獻率:proportional_variance (numpy array) – The proportional factor variances
  • 累積方差貢獻率:cumulative_variances (numpy array) – The cumulative factor variances

十、隱藏變量可視化

為了更直觀地觀察每個隱藏變量和哪些特征的關系比較大,進行可視化展示,為了方便取上面相關系數(shù)的絕對值:

然后我們通過熱力圖將系數(shù)矩陣繪制出來:

# 繪圖

plt.figure(figsize = (14,14))
ax = sns.heatmap(df1, annot=True, cmap='BuPu')

# 設置y軸字體大小
ax.yaxis.set_tick_params(labelsize=15)
plt.title('Factor Analysis', fontsize='xx-large')

# 設置y軸標簽
plt.ylabel('Sepal Width', fontsize='xx-large')
# 顯示圖片
plt.show()

# 保存圖片
# plt.savefig('factorAnalysis', dpi=500)

十一、轉(zhuǎn)成新變量-transformn

上面我們已經(jīng)知道了5個因子比較合適,可以將原始數(shù)據(jù)轉(zhuǎn)成5個新的特征,具體轉(zhuǎn)換方式為:

轉(zhuǎn)成DataFrame格式后數(shù)據(jù)展示效果更好:仍然是2436條數(shù)據(jù),5個特征(新特征)

至此,我們完成了如下的工作:

  1. 原數(shù)據(jù)的相關性檢測
  2. 因子個數(shù)的探索
  3. 因子分析的建模過程
  4. 隱藏變量的可視化
  5. 轉(zhuǎn)成基于5個新變量的數(shù)據(jù)

十二、參考資料

1、Factor Analysis:https://www.datasklr.com/principal-component-analysis-and-factor-analysis/factor-analysis

2、多因子分析:https://mathpretty.com/10994.html

3、factor_analyzer package的官網(wǎng)使用手冊:https://factor-analyzer.readthedocs.io/en/latest/factor_analyzer.html

4、淺談主成分分析和因子分析:https://zhuanlan.zhihu.com/p/37755749

尤而小屋,一個溫馨的小屋。小屋主人,一手代碼謀求生存,一手掌勺享受生活,歡迎你的光臨

Python

秋招資料領??!


給大家分享一份數(shù)據(jù)分析筆試面試題集合,祝各位還在秋招的小伙伴早日拿下BAT offer。

當然也歡迎各位小伙伴進入筆試題,第一時間查收數(shù)據(jù)分析相關資料!

獲取方式:
1、點擊卡片,關注【數(shù)據(jù)百曉生】公眾號??
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
因子分析法FA理論講解與程序?qū)崿F(xiàn)指南
因子分析
統(tǒng)計學學習之路——因子分析學習分享
因子分析的計算過程能否手算得出?
《應用多元統(tǒng)計分析》第七章因子分析實驗報告
因子分析及其在R里的實現(xiàn)過程
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服