你好,
我的问题是技术性的(使用 R)和统计性的。我正在从事一个图像处理研究项目,我需要执行 MCA。我之前发布了一个关于如何使用 Java 执行此操作的问题 Multivariate correspondence analysis (MCA) with JAVA ,感谢答案,我决定使用 R 来做。所以这里是:
我有一个从提取的特征创建的列联表,其形式为:
var1_1 var1_2 var1_3 var2_1 var2_2 var2_3 ... var18_1 var18_2 var18_3
个人1
个人2
个人3
个人4
...
个体
在每个单元格中,我有一个 double 值,表示 0.0 和 1.0 之间的归一化频率计数。我的最终目标是能够使用 MCA 在不同的轴组合上绘制每个人。
我做了什么 :
- used fdata <- read.table("filename.dat") to read the matrix file exported by Java
- used mca_obj <- dudi.acm(fdata,scann=FALSE, nf=3) That gives an error saying all values should be a factor (Could someone clarify what does it mean a factor)
- used burt_data=acm.burt(fdata, fdata) to use the burt method since I have many variables
- that gave me a very big table I couldn't understand (I experimented with removing the row names)
所以总结一下:
我知道我非常接近找到对我的数据执行 MCA 的正确方法我只需要一些关于如何正确执行的提示。任何人都可以请帮忙!
谢谢
最佳答案
编辑 :
如果我理解正确,您的数据不适合任何 mca 函数。您需要原始数据,而不是任何类型的标准化频率计数。 MCA 适用于分类变量,而不适用于数值。您需要的是以下意义上的数据:
color beak ...
individual1 red big
individual2 red small
individual3 blue medium
individual4 green small
...
如果归一化频率确实是您的数据,则您拥有数值数据,并且无法对其执行 MCA。
A
factor
是R中的向量类型,可以看作是分类类型或枚举类型。如果您拥有上述格式的数据,并且您仍然拥有字符变量而不是因子变量,则可以将 fdata 转换为fdata2 <- as.data.frame(lapply(fdata,as.factor))
这个你应该可以在
dudi.acm()
中使用功能。关于 Burt table :当然,那个 table 很大。它是矩阵乘法 X'X,其中 X 是您的因子的指标矩阵。所以你得到一个表(实际上是一个数据框),其中行名和列名形成为
nameOfFactor.nameOfLevel
.因此,如果每 5 个级别有 4 个因子,则您已经拥有一个 20x20 的矩阵。您可以使用这些知识来剖析 Burt 表并获取有关某些感兴趣因素的信息。按照帮助文件中的示例,您可以执行以下操作:
require(ade4)
data(banque)
banque.acm <- dudi.acm(banque, scann = FALSE, nf = 3)
bb <- acm.burt(banque, banque)
idrow <- grepl("csp.",rownames(bb),fixed=T)
idcol <- grepl("duree.",names(bb),fixed=T)
> bb[idrow,idcol]
duree.dm2 duree.d24 duree.d48 duree.d812 duree.dp12
csp.agric 3 6 6 3 11
csp.artis 7 3 15 13 10
csp.cadsu 13 19 32 9 30
csp.inter 12 14 19 25 32
csp.emplo 13 19 38 28 53
csp.ouvri 12 26 46 43 56
csp.retra 4 8 9 7 24
csp.inact 15 14 22 15 19
csp.etudi 12 23 20 1 1
它为您提供数据框中 csp 和 duree 因子的 Burt 表。
关于r - 使用 R 进行多重对应分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5869853/