因子分析:KMO檢驗和巴特利球體檢驗-Python code


法一:采用factor_analyzer模塊方法:
from factor_analyzer import factor_analyzer
# KMO值
print round(factor_analyzer.calculate_kmo(X_basic)[1],5)
# 巴特利特球形度值
print round(factor_analyzer.calculate_bartlett_sphericity(X_basic)[1], 5)

法二:自己實現代碼檢驗:
def kmo():
# 相關系數
corr = X_basic.corr().values
# print corr
# 逆矩陣
corr_inv = np.linalg.inv(corr)
# 對角線取倒數,其他為0
S2 = np.diag(corr_inv)
S2 = np.linalg.inv(np.diag(S2))
# 反映像協方差矩陣
AIS = np.dot(S2, corr_inv)
AIS = np.dot(AIS, S2)
# 是映像協方差矩陣
IS = corr + AIS - 2 * S2
# 將矩陣AIS對角線上的元素開平方,並且將其余元素都變成0
Dai = np.diag(np.sqrt(np.diag(AIS)))
# IR是映像相關矩陣
IR = np.dot(np.linalg.inv(Dai), IS)
IR = np.dot(IR, np.linalg.inv(Dai))

# AIR是反映像相關矩陣
AIR = np.dot(np.linalg.inv(Dai), AIS)
AIR = np.dot(AIR, np.linalg.inv(Dai))
a = np.power((AIR - np.diag(np.diag(AIR))), 2)
a = np.sum(a, axis=1)
AA = np.sum(a)

b = corr - np.identity(15)
b = np.power(b, 2)
b = np.sum(b, axis=1)
BB = np.sum(b)

MSA = b / (b + a)
AIR = AIR - np.identity(15) + np.diag(MSA)

kmo = BB / (AA + BB)
return kmo

def bart():
corr = X_basic.corr().values
# 計算結果有問題
# bart=st.bartlett(*corr)
detCorr = np.linalg.det(corr)
n = len(X_basic)
p = len(X_basic.columns)
statistic = -math.log(detCorr) * (n - 1 - (2 * p + 5) / 6)
df = p * (p - 1) / 2
# 雙側概率
pval = (1.0 - st.chi2.cdf(statistic, df)) * 2
return statistic,pval


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM