与R的多重对应分析

时间:2011-05-03 13:03:19

标签: r statistics

HI, 我的问题是技术(使用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

individual1
individual2
individual3
individual4
...
individualn


在每个单元格中,我有一个double值,表示0.0到1.0之间的归一化频率计数。我的最终目标是能够使用MCA在不同的轴组合上绘制每个人。

我做了什么:

  
      
  • 使用fdata< - read.table(“filename.dat”)来读取Java导出的矩阵文件
  •   
  • 使用mca_obj< - dudi.acm(fdata,scann = FALSE,nf = 3)   这给出了一个错误,说所有值都应该是一个因子(有人可以澄清它是什么意思)
  •   
  • 使用burt_data = acm.burt(fdata,fdata)来使用burt方法,因为我有很多变量
  •   
  • 给了我一个非常大的桌子,我无法理解(我尝试删除行名称)
  •   

总结如下: 我知道我非常接近找到正确的方法来对我的数据执行MCA我只需要一些关于如何正确执行它的提示。任何人都可以帮忙!

感谢名单

2 个答案:

答案 0 :(得分:4)

编辑:

如果我理解正确,您的数据不适合任何mca功能。您需要原始数据,而不是任何类型的标准化频率计数。 MCA适用于分类变量,而不是数字变量。您需要的是以下意义上的数据:

              color   beak ...
individual1   red     big
individual2   red     small
individual3   blue    medium
individual4   green   small
...

如果标准化频率确实是您的数据,则您拥有数字数据而无法对其执行MCA。


factor是R中的矢量类型,可以看作是分类或枚举类型。如果您拥有上述格式的数据,并且仍然有字符变量而不是因子变量,则可以使用

转换fdata
fdata2 <- as.data.frame(lapply(fdata,as.factor))

这个你应该可以在dudi.acm()函数中使用。

关于伯特表:当然是一个巨大的。它是矩阵乘法X'X,其中X是您的因子的指标矩阵。所以你得到一个表(实际上是一个数据框),其中rownames和columnames形成为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表。

答案 1 :(得分:2)

在您的案例中很难提供真正具体的反馈,因为很难猜出您的数据是什么样的。

我建议你这样做:

  1. 使用包mca中的函数MASS进行对应分析
  2. 研究帮助文件中提供的示例:?mca
  3. 您会发现mca的要求也是由因子组成的数据框。 (有关详细信息,请参阅帮助文件?factor。)但mca中的示例说明了这一点。它使用作为包farms的一部分提供的数据集MASS

    library(MASS)
    head(farms)
    
      Mois Manag Use Manure
    1   M1    SF  U2     C4
    2   M1    BF  U2     C2
    3   M2    SF  U2     C4
    4   M2    SF  U2     C4
    5   M1    HF  U1     C2
    6   M1    HF  U2     C2
    

    请注意,表中的每个点都是一个因子条目。这意味着您必须将输入数据重新编写为类似格式。您提到您的输入数据是频率表,而不是所需的数据格式。

    farms.mca <- mca(farms, abbrev=TRUE)
    farms.mca
    plot(farms.mca)
    

    enter image description here