python - 有没有办法在 Python 中进行并行分析?
问题描述
我目前正在 Python 中运行探索性因子分析,它与factor_analyzer
包 ( https://factor-analyzer.readthedocs.io/en/latest/factor_analyzer.html ) 配合得很好。为了选择适当数量的因子,我使用了 Kaiser 准则和 Scree 图。然而,我想用霍恩的平行分析来确认我的结果(霍恩,1965)。在 RI 中将使用包中的parallel
函数psych
。有谁知道Python中的等效方法/函数/包?我一直在寻找一段时间,但不幸的是没有成功。
非常感谢你的帮助!
此致
解决方案
您现在可能已经找到了一个解决方案,但是,为了其他可能正在寻找它的人,这里有一些我用来模仿 psych 库中的并行分析的代码:
import pandas as pd
from factor_analyzer import FactorAnalyzer
import numpy as np
import matplotlib.pyplot as plt
def _HornParallelAnalysis(data, K=10, printEigenvalues=False):
################
# Create a random matrix to match the dataset
################
n, m = data.shape
# Set the factor analysis parameters
fa = FactorAnalyzer(n_factors=1, method='minres', rotation=None, use_smc=True)
# Create arrays to store the values
sumComponentEigens = np.empty(m)
sumFactorEigens = np.empty(m)
# Run the fit 'K' times over a random matrix
for runNum in range(0, K):
fa.fit(np.random.normal(size=(n, m)))
sumComponentEigens = sumComponentEigens + fa.get_eigenvalues()[0]
sumFactorEigens = sumFactorEigens + fa.get_eigenvalues()[1]
# Average over the number of runs
avgComponentEigens = sumComponentEigens / K
avgFactorEigens = sumFactorEigens / K
################
# Get the eigenvalues for the fit on supplied data
################
fa.fit(data)
dataEv = fa.get_eigenvalues()
# Set up a scree plot
plt.figure(figsize=(8, 6))
################
### Print results
################
if printEigenvalues:
print('Principal component eigenvalues for random matrix:\n', avgComponentEigens)
print('Factor eigenvalues for random matrix:\n', avgFactorEigens)
print('Principal component eigenvalues for data:\n', dataEv[0])
print('Factor eigenvalues for data:\n', dataEv[1])
# Find the suggested stopping points
suggestedFactors = sum((dataEv[1] - avgFactorEigens) > 0)
suggestedComponents = sum((dataEv[0] - avgComponentEigens) > 0)
print('Parallel analysis suggests that the number of factors = ', suggestedFactors , ' and the number of components = ', suggestedComponents)
################
### Plot the eigenvalues against the number of variables
################
# Line for eigenvalue 1
plt.plot([0, m+1], [1, 1], 'k--', alpha=0.3)
# For the random data - Components
plt.plot(range(1, m+1), avgComponentEigens, 'b', label='PC - random', alpha=0.4)
# For the Data - Components
plt.scatter(range(1, m+1), dataEv[0], c='b', marker='o')
plt.plot(range(1, m+1), dataEv[0], 'b', label='PC - data')
# For the random data - Factors
plt.plot(range(1, m+1), avgFactorEigens, 'g', label='FA - random', alpha=0.4)
# For the Data - Factors
plt.scatter(range(1, m+1), dataEv[1], c='g', marker='o')
plt.plot(range(1, m+1), dataEv[1], 'g', label='FA - data')
plt.title('Parallel Analysis Scree Plots', {'fontsize': 20})
plt.xlabel('Factors/Components', {'fontsize': 15})
plt.xticks(ticks=range(1, m+1), labels=range(1, m+1))
plt.ylabel('Eigenvalue', {'fontsize': 15})
plt.legend()
plt.show();
如果您像这样调用上述内容:
_HornParallelAnalysis(myDataSet)
你应该得到如下内容:
推荐阅读
- javascript - 在 Function 组件上使用 React.cloneElement 时如何设置引用?
- hadoop - 无法在 db2 中创建外部 hadoop 表
- bash - 如何在 Ansible Jinja2 (.j2) 模板中指定“if else”语句?
- javascript - PWA IOS:身体的孩子没有占据 100% 的高度,底部有间隙
- .net-core - 在 .NET Core 解决方案中使用 Dynamics AX 2009 Business Connector .NET Framework 3.5
- content-security-policy - 内容安全策略指令:“default-src 'self'”。请注意,'frame-src' 没有明确设置,所以 'default-src' 用作后备
- laravel - 为什么当我通过 composer 安装时找不到 Doctrine Dbal 包驱动程序?
- java - IntelliJ IDE MissingApiTokenError: `snyk` 需要经过身份验证的帐户。请运行 `snyk auth` 并重试
- java - Eclipse Gradle 向导使用 SubFolder -lib 创建项目
- angular - 如何在基于 webpack.config.js angular 8 的应用程序中访问位于文件夹内(不在 js 文件夹中)的文本文件