标签: factor-analysis

来自聚类和共同因子列表的维恩图

我有一个输入文件,其中包含~50000个簇的列表,并且每个簇中都存在多个因子(总共约1000万个条目),请参阅下面的较小示例:

set.seed(1)
x = paste("cluster-",sample(c(1:100),500,replace=TRUE),sep="")
y = c(
  paste("factor-",sample(c(letters[1:3]),300, replace=TRUE),sep=""),
  paste("factor-",sample(c(letters[1]),100, replace=TRUE),sep=""),
  paste("factor-",sample(c(letters[2]),50, replace=TRUE),sep=""),
  paste("factor-",sample(c(letters[3]),50, replace=TRUE),sep="")
)
data = data.frame(cluster=x,factor=y)
Run Code Online (Sandbox Code Playgroud)

在另一个问题的帮助下,我得到了一个像这样的因素同时出现的饼图:

counts = with(data, table(tapply(factor, cluster, function(x) paste(as.character(sort(unique(x))), collapse='+'))))
pie(counts[counts>1])
Run Code Online (Sandbox Code Playgroud)

但是现在我想得到一个因子共存的维恩图.理想情况下,也可以采用每个因子的最小计数阈值.例如,针对不同因素的维恩图,使得每个因子中的每一个必须在每个群集中存在n> 10以被考虑.

我试图找到一种方法来生成具有聚合的表计数,但无法使其工作.

combinations r data-visualization factor-analysis

13
推荐指数
1
解决办法
1万
查看次数

如何在MATLAB中进行直接旋转

我正在尝试在MATLAB中执行以下分析:

Delta值为0的直接Oblimin旋转和"Kaiser归一化"

我知道MATLAB有一个叫做rotatefactors的函数,但是没有提到oblimin旋转(既没有"Kaiser Normalization").如何在MATLAB中执行此分析?

更具体地说,我正在尝试在执行此分析时匹配SPSS的确切输出.

在这里,您可以找到SPSS中使用的所有算法:link(请参阅第338页的oblimin旋转).不幸的是,我无法理解方程式,因此在MATLAB中重现它们.


例如,我使用以下数据:

A = magic(10);
writetable(array2table(A),'test.xlsx') % This data can be imported to SPSS
Run Code Online (Sandbox Code Playgroud)

我执行PCA(在相关矩阵上)并仅提取2个因子.以下是在MATLAB中完成的方法,以获得与SPSS(他们称之为"组件矩阵")完全相同的加载矩阵:

[eigvector,eigmatrix] = eig(corr(A));
[~,ind] = sort(diag(eigmatrix),'descend');
eigmatrix = eigmatrix(ind,ind);
eigvector = eigvector(:,ind);
eigvalues = diag(eigmatrix); % Eigeinvalues
loadings = eigvector*sqrt(eigmatrix);
loadings = loadings(:,1:2) % Extract only 2 factors
Run Code Online (Sandbox Code Playgroud)

接下来,我应该loadings使用函数在矩阵上执行旋转rotatefactors,这就是我被卡住的地方.

这是SPSS中的语法:

FACTOR
/VARIABLES A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
/MISSING LISTWISE 
/ANALYSIS A1 A2 A3 A4 A5 A6 A7 …
Run Code Online (Sandbox Code Playgroud)

statistics matlab factor-analysis

12
推荐指数
1
解决办法
909
查看次数

使用R的因子分析

我试图使用带有varimax旋转的R进行因子分析,但不成功.我在SAS上运行相同的确切数据,可以得到结果.

在R中,如果我使用

fa(r=cor(m1), nfactors=8, fm="ml", rotate="varimax")
Run Code Online (Sandbox Code Playgroud)

我会得到

In smc, the correlation matrix was not invertible, smc's returned as 1s
In smc, the correlation matrix was not invertible, smc's returned as 1s
Error in optim(start, FAfn, FAgr, method = "L-BFGS-B", lower = 0.005,  : 
  L-BFGS-B needs finite values of 'fn'
In addition: Warning messages:
1: In cor.smooth(R) : Matrix was not positive definite, smoothing was done
2: In cor.smooth(R) : Matrix was not positive definite, smoothing was done
3: In log(e) …
Run Code Online (Sandbox Code Playgroud)

statistics r factor-analysis

10
推荐指数
1
解决办法
1万
查看次数

psych - 将因子载荷作为LaTeX导出的data.frame

我使用psych包的fa命令进行因子分析,因此有一个类的对象fa.我可以查询加载fac$loadings,但我想只提取包含加载的表,所以我可以使用xtable(或类似)将其转换为LaTeX格式.

示例代码:

library(psych)
library(xtable)
data(bfi)
fac <- fa(r=cor(bfi, use="complete.obs"), nfactors=5, fm="ml", rotate="none")
fac$loadings
ld <- someMagicalFunction(fac$loadings)
xtable(ld)
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我能用什么someMagicalFunction

latex r factor-analysis psych

8
推荐指数
2
解决办法
3986
查看次数

降维,归一化,重采样,k倍CV ...按什么顺序?

在Python中,我正在研究旅行保险欺诈检测的二进制分类问题。这是我的数据集的特征:

  • 包含40,000个具有20个功能的样本。一次热编码后,特征数量为50(4个数字,46个分类)。
  • 多数未标记:在40,000个样本中,有33,000个样本未标记。
  • 高度不平衡:在7,000个标记的样本中,只有800个样本(11%)为阳性(欺诈)。

指标是精度,召回率和F2得分。我们将重点更多地放在避免误报上,因此,我们非常赞赏召回率很高。作为预处理,我使用SMOTE-NC对肯定的案例进行了超采样,这也考虑了分类变量。

在尝试了包括自我训练的半监督学习和标签传播/标签传播等方法之后,我获得了较高的回忆得分(培训中80%,测试中65-70%)。但是,我的精度得分显示出过拟合的痕迹(训练时为60-70%,测试时为10%)。我知道精度在训练上是好的,因为它是重新采样的,而测试数据则很低,因为它直接反映了测试数据中类的不平衡。但是这个精度分数太低了,所以我想解决它。

因此,为了简化模型,我正在考虑应用降维。我找到了一个名为princeFAMD 的软件包 (混合物数据的因子分析)。

问题1:我应该如何进行标准化,FAMD,k倍交叉验证和重采样?我下面的方法正确吗?

问题2:包prince不具有的方法,例如fittransform等中Sklearn,所以无法执行第三步骤如下所述。任何其他包好做fit,并transform为FAMD?还有没有其他好的方法可以减少此类数据集的维数?

我的方法:

  1. 制作k折并隔离其中之一进行验证,其余部分用于训练
  2. 归一化训练数据并转换验证数据
  3. 使FAMD适合训练数据,并转换训练和测试数据
  4. 使用SMOTE-NC仅重新采样训练数据
  5. 训练模型是什么,根据验证数据进行评估
  6. 重复2-5 k次并取平均值,取回F2分数

*对于我对这个问题的整体处理方法的各种建议,我也将不胜感激

谢谢!

classification resampling pca factor-analysis cross-validation

8
推荐指数
0
解决办法
100
查看次数

'FactoMineR'包中的旋转

提前致谢.我使用'FactoMineR'包中的'PCA'函数来获得主成分分数.我已经尝试在这个论坛上阅读包装细节和类似的问题,但无法弄清楚旋转提取的组件(正交或倾斜)的代码.

我知道'psychcomp'函数和'psych'包中的'principal'函数具有旋转能力,但我真的很喜欢'PCA'中将变量缩放到单位方差的能力.任何帮助,将不胜感激.谢谢.

r rotation factor-analysis

7
推荐指数
1
解决办法
2400
查看次数

如何使用Python(scikit-learn)计算FactorAnalysis分数?

我需要进行探索性因素分析,并使用Python(假设只有1个基础因素)为每个观察值计算分数。看来这sklearn.decomposition.FactorAnalysis()是要走的路,但是不幸的是文档示例(不幸的是我无法找到其他示例)还不足以使我确定如何完成工作。

我有以下测试文件,其中包含对29个变量(test.csv)的41个观察结果:

49.6,34917,24325.4,305,101350,98678,254.8,276.9,47.5,1,3,5.6,3.59,11.9,0,97.5,97.6,8,10,100,0,0,96.93,610.1,100,1718.22,6.7,28,5
275.8,14667,11114.4,775,75002,74677,30,109,9.1,1,0,6.5,3.01,8.2,1,97.5,97.6,8,8,100,0,0,100,1558,100,2063.17,5.5,64,5
2.3,9372.5,8035.4,4.6,8111,8200,8.01,130,1.2,0,5,0,3.33,6.09,1,97.9,97.9,8,8,67.3,342.3,0,99.96,18.3,53,1457.27,4.8,8,4
7.10,13198.0,13266.4,1.1,708,695,6.1,80,0.4,0,4,0,3.1,8.2,1,97.8,97.9,8,8,45,82.7,0,99.68,4.5,80,1718.22,13.8,0,3
1.97,2466.7,2900.6,19.7,5358,5335,10.1,23,0.5,0,2,0,3.14,8.2,0,97.3,97.2,9,9,74.5,98.2,0,99.64,79.8,54,1367.89,6.4,12,4
2.40,2999.4,2218.2,0.80,2045,2100,8.9,10,1.5,1,3,0,2.82,8.6,0,97.4,97.2,8,8,47.2,323.8,0,99.996,13.6,24,1249.67,2.7,12,3
0.59,4120.8,5314.5,0.54,14680,13688,14.9,117,1.1,0,3,0,2.94,3.4,0,97.6,97.7,8,8,11.8,872.6,0,100,9.3,52,1251.67,14,14,2
0.72,2067.7,2364,3,367,298,7.2,60,2.5,0,12,0,2.97,10.5,0,97.5,97.6,8,8,74.7,186.8,0,99.13,12,57,1800.45,2.7,4,2
1.14,2751.9,3066.8,3.5,1429,1498,7.7,9,1.6,0,3,0,2.86,7.7,0,97.6,97.8,8,9,76.7,240.1,0,99.93,13.6,60,1259.97,15,8,3
1.29,4802.6,5026.1,2.7,7859,7789,6.5,45,1.9,0,3,0,2.5,8.2,0,98,98,8,8,34,297.5,0,99.95,10,30,1306.44,8.5,0,4
0.40,639.0,660.3,1.3,23,25,1.5,9,0.1,0,1,0,2.5,8.2,0,97.7,97.8,8,8,94.2,0,0,100,4.3,50,1565.44,19.2,0,4
0.26,430.7,608.1,2,33,28,2.5,7,0.4,0,6,0,2.5,8.2,0,97.4,97.4,8,8,76.5,0,0,98.31,8,54,1490.08,0,0,4
4.99,2141.2,2357.6,3.60,339,320,8.1,7,0.2,0,8,0,2.5,5.9,0,97.3,97.4,8,8,58.1,206.3,0,99.58,13.2,95,1122.92,14.2,8,2
0.36,1453.7,1362.2,3.50,796,785,3.7,9,0.1,0,9,0,2.5,13.6,0,98,98.1,8,8,91.4,214.6,0,99.74,7.5,53,1751.98,11.5,0,2
0.36,1657.5,2421.1,2.8,722,690,8.1,8,0.4,0,1,0,2.5,8.2,0,97.2,97.3,11,12,37.4,404.2,0,99.98,10.9,35,1772.33,10.2,8,3
1.14,5635.2,5649.6,3,2681,2530,5.4,20,0.3,0,1,0,3.1,8.2,0,97.7,97.8,8,11,50.1,384.7,0,99.02,11.6,27,1306.08,16,0,2
0.6,1055.9,1487.9,1.3,69,65,2.5,6,0.4,0,8,0,2.5,8.2,0,97.9,97.7,8,11,63,137.9,0,99.98,5.1,48,1595.06,0,0,4
0.08,795.3,1174.7,1.40,85,76,2.2,7,0.2,0,0,0,2.5,8.2,0,97.4,97.5,8,8,39.3,149.3,0,98.27,5.1,52,1903.9,8.1,0,2
0.90,2514.0,2644.4,2.6,1173,1104,5.5,43,0.8,0,10,0,2.5,13.6,0,97.5,97.5,8,10,58.7,170.5,0,80.29,10,34,1292.72,4,0,2
0.27,870.4,949.7,1.8,252,240,2.2,31,0.2,0,1,0,2.5,8.2,0,97.5,97.6,8,8,64.5,0,0,100,6.6,29,1483.18,9.1,0,3
0.41,1295.1,2052.3,2.60,2248,2135,6.0,12,0.8,0,4,0,2.7,8.2,0,97.7,97.7,8,8,71.1,261.3,0,91.86,4.6,21,1221.71,9.4,0,4
1.10,3544.2,4268.9,2.1,735,730,6.6,10,1.7,0,14,0,2.5,8.2,0,97.7,97.8,8,8,52,317.2,0,99.62,9.8,46,1271.63,14.2,0,3
0.22,899.3,888.2,1.80,220,218,3.6,7,0.5,0,1,0,2.5,8.2,0,97.2,97.5,8,8,22.5,0,0,70.79,10.6,32,1508.02,0,0,4
0.24,1712.8,1735.5,1.30,41,35,5.4,7,0.5,0,1,0,3.28,8.2,0,97.8,97.8,9,10,16.6,720.2,0,99.98,4.3,53,1324.46,0,4,2
0.2,558.4,631.9,1.7,65,64,2.5,7,0.2,0,5,0,2.5,8.2,0,97.7,97.5,8,8,60.7,0,0,99.38,6.1,52,1535.08,0,0,2
0.21,599.9,1029,1.1,69,70,3.7,85.7,0.1,0,12,0,2.5,8.2,0,97.4,97.5,8,8,48.6,221.2,0,100,5.4,40,1381.44,25.6,0,2
0.10,131.3,190.6,1.6,28,25,2.9,7,0.3,0,3,0,2.5,8.2,0,97.7,97.8,8,8,58.9,189.4,0,99.93,6.9,42,1525.58,17.4,0,3
0.44,3881.4,5067.3,0.9,2732,2500,11.2,10,1.5,0,5,0,2.67,8.2,0,97.4,97.3,8,11,14.5,1326.2,0,99.06,3.7,31,1120.54,10.3,10,2
0.18,1024.8,1651.3,1.01,358,345,4.6,35,0.3,0,2,0,2.5,8.2,0,97.8,97.9,8,10,15.9,790.2,0,100,4.3,48,1531.04,10.5,0,3
0.46,682.9,784.2,1.8,103,109,2.2,8,0.4,0,4,0,2.5,8.2,0,97.8,97.9,8,8,82.7,166.3,0,99.96,6.4,44,1373.6,13.5,0,2
0.12,370.4,420.0,1.10,28,25,3.4,10,0.1,0,6,0,2.57,8.2,0,97.6,97.8,8,11,51.6,120,0,99.85,8.1,40,1297.94,0,0,3
0.03,552.4,555.1,0.8,54,49,3.5,10,0.4,0,0,0,2.5,8.2,0,97.4,97.6,8,10,33.6,594.5,0,100,3.2,41,1184.34,6.6,0,3
0.21,1256.5,2434.8,0.9,1265,1138,6.3,20,1.3,0,2,0,2.6,8.2,0,98,97.9,8,9,20.1,881,0,99.1,3.9,31,1265.93,7.8,0,3
0.09,320.6,745.7,1.10,37,25,2.7,8,0.3,0,9,0,2.5,8.2,0,98,97.8,8,8,49.2,376.4,0,99.95,4.3,39,1285.11,0,0,3
0.08,452.7,570.9,1,18,20,4.7,9,0.6,0,2,0,2.45,8.2,0,97.1,97.1,8,8,19.9,1103.8,0,99.996,2.9,22,1562.61,21.9,0,3
0.13,967.9,947.2,1,74,65,4.0,25,1.4,0,6,0,2.5,8.2,0,98,98,9,11,30.1,503.1,0,99.999,3.4,55,1269.33,0,0,2
0.07,495.0,570.3,1.2,27,30,4.3,7,0.5,0,12,0,3.62,8.2,0,98.2,98.2,15,13,29.8,430.5,0,99.7,4.9,40,1461.79,14.6,0,2
0.17,681.9,537.4,1.1,113,120,2.9,12,0.4,0,8,0,2.5,8.2,0,98.2,98.3,8,8,24,74.3,0,100,5,43,1290.16,0,0,3
0.05,639.7,898.2,0.40,9,12,3.0,7,0.1,0,1,0,2.5,8.2,0,97.6,97.8,15,11,11.9,1221.1,0,99.996,1.7,40,1372,7,0,4
0.65,2067.8,2084.2,2.50,414,398,7.3,6,0.7,0,4,0,2.16,8.2,0,97.8,97.9,12,12,60.1,146.3,0,99.96,10.4,44,1059.68,7.4,0,2
0.12,804.4,1416.4,3.30,579,602,4.2,7,1.8,0,1,0,2.5,8.2,0,98.1,98.3,8,10,8.9,2492.3,0,95.4,2.2,34,1345.76,7,0,2
Run Code Online (Sandbox Code Playgroud)

使用我根据官方示例编写的代码,从这篇文章中 我得到了奇怪的结果。码:

from sklearn import decomposition, preprocessing
from sklearn.cross_validation import cross_val_score
import csv
import numpy as np

data = np.genfromtxt('test.csv', delimiter=',')

def compute_scores(X):
    n_components = np.arange(0, len(X), 1) …
Run Code Online (Sandbox Code Playgroud)

python r factor-analysis scikit-learn

6
推荐指数
1
解决办法
5397
查看次数

scikit-learn因子分析的轮换参数

因子分析的一个标志是它允许非正交潜在变量.

例如,在R中,可以通过rotation参数来访问此功能factanal.有没有这样的规定sklearn.decomposition.FactorAnalysis?显然它不在争论中 - 但也许还有另一种方法来实现这一目标?

遗憾的是,我无法找到许多此功能的使用示例.

python factor-analysis dimensionality-reduction scikit-learn

6
推荐指数
1
解决办法
1734
查看次数

从因子分析的负载中获取数据框架(psych 中的 fa 函数)

我有一个数据框,如下所示:

x <- c(1, 2, 1, 2)
y <- c(1, 2, 3, 4)
z <- c(4, 3, 2, 1)
df <- data.frame(x, y, z)
Run Code Online (Sandbox Code Playgroud)

fa我正在使用包中的函数运行因子分析psych

fit <- fa(df, nfactors = 2)
fit$loadings
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

Loadings:
  MR1    MR2   
x  0.448       
y  0.999       
z -0.999       

                 MR1   MR2
SS loadings    2.195 0.000
Proportion Var 0.732 0.000
Cumulative Var 0.732 0.732
Run Code Online (Sandbox Code Playgroud)

我想将带有 MR1 和 MR2 的表保存为数据框。有谁知道如何做到这一点?谢谢。

r factor-analysis dataframe psych

5
推荐指数
1
解决办法
2392
查看次数

从python中的factor_analysisr计算拟合优度和rmsea

我正在使用Factor_analyzer模块在 python 中执行验证性因子分析。

我搜索了各种方法来生成模型诊断,例如近似均方根误差、卡方、CFI 和 Tucker-Lewis 指数。我对数学不是特别感兴趣,对Python也比较陌生,但我已经能够应付大部分内容了。

据我了解,factor_analyzer 模块会生成许多不同的对象,理论上,这些对象允许我进行额外的计算,并且我找到了这份文档,它为我提供了我需要的大部分公式。但是,我不知道如何采取(或计算)来获得我需要的模型诊断。

CFA代码是


model_dict = {"F1": factor_1,
              "F2": factor_2}# I have made these lists previously

model_spec = ModelSpecificationParser.parse_model_specification_from_dict(df[influence_scale],
                                                                           model_dict)
cfa = ConfirmatoryFactorAnalyzer(model_spec, disp=False)

cfa.fit(df[influence_scale].values)

cfa_loadings = pd.DataFrame(cfa.loadings_)
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误,并且代码运行良好,为我提供了干净的负载,正如我在每个因素上所期望的那样,但是我真的坚持获取我需要的额外统计数据。

如果有人能帮助我,我将非常感激。

python factor-analysis goodness-of-fit

5
推荐指数
1
解决办法
1247
查看次数