嗨,我的问题是技术性的(使用R)还是统计性的。我正在进行图像处理研究项目,因此需要执行MCA。由于我决定使用R进行回答,因此我之前发布了一个关于如何使用Java 多变量 Java 对应分析(MCA)来执行此操作的问题。在这里是:我有一个从提取的特征创建的列联表,该列具有形式:
var1_1 var1_2 var1_3 var2_1 var2_2 var2_3 ... var18_1 var18_2 var18_3
Run Code Online (Sandbox Code Playgroud)
个体1
个体2
个体3
个体4
...
个体
在每个单元格中,我有一个双精度值,表示介于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的正确方法,我只需要一些有关如何正确执行它的提示。谁能帮忙!
谢谢
编辑:
如果我理解正确,则您的数据不适合任何mca功能。您需要原始数据,而不是任何形式的归一化频率计数。MCA处理分类变量,而不是数字。您需要的是以下方面的数据:
color beak ...
individual1 red big
individual2 red small
individual3 blue medium
individual4 green small
...
Run Code Online (Sandbox Code Playgroud)
如果归一化的频率确实是您的数据,则您具有数值数据,并且无法对此执行MCA。
A factor是R中的向量类型,可以看作是分类类型或枚举类型。如果您具有上述格式的数据,并且仍然有字符变量而不是因子变量,则可以将fdata转换为
fdata2 <- as.data.frame(lapply(fdata,as.factor))
Run Code Online (Sandbox Code Playgroud)
您应该能够在dudi.acm()功能中使用这一功能。
关于Burt表:当然,这是巨大的。它是矩阵乘法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
Run Code Online (Sandbox Code Playgroud)
它为您提供了Burt表中数据帧中的csp和duree因子。
| 归档时间: |
|
| 查看次数: |
3470 次 |
| 最近记录: |