首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较R中不同层次的聚类结果与值列表的一致性?

如何比较R中不同层次的聚类结果与值列表的一致性?
EN

Stack Overflow用户
提问于 2020-09-26 18:47:26
回答 1查看 303关注 0票数 1

我目前正在为一个看似容易解决的问题而奋斗,这也许在以前的问题中得到了解答,但我在网上找不到任何关于这个问题的答案。

我目前正在对一些数据进行聚类分析(k平均法、分层热图法等等)。我想检查我的集群(“集群组”列)是否与附加到我个人的值列表(“取向”列)保持一致。问题是,这个值列表当然没有与我的聚类结果相同的级别。我想对这两个变量(聚类结果和值列表)进行kappa一致性测试。下面是我的dataframe的简写版本:

代码语言:javascript
复制
                Cluster group tropism    
JX308829.1 all  "1"           "digestif" 
NC_020890.1 all "1"           "digestif" 
KF954417.1 all  "1"           "peau"     
HM011544.1 all  "2"           "peau"      
MH844627.1 all  "2"           "peau"     
HQ696595.1 all  "2"           "rein"     
AB211390.1 all  "2"           "rein"     
AB301101.1 all  "2"           "rein"     
HM011559.1 all  "2"           "digestif" 
KY404016.1 all  "2"           "rein"      
KF444093.1 all  "3"           "cerveau"    
KJ725028.1 all  "3"           "peau"     
GU296408.1 all  "3"           "peau"     
EU711058.1 all  "3"           "syst_resp"
KC549591.1 all  "4"           "syst_resp"
KR090571.1 all  "4"           "muscle"   
AB081611.1 all  "5"           "muscle"   
AB092581.1 all  "5"           "peau"     
AB127351.2 all  "5"           "digestif"

问题是,当然,卡帕-弗莱斯的一致性得分比较两个列表与相同的水平。

我试图创建一种算法,在这个算法中,每个集群级别都按照其中的大多数值重命名,但是当然,它看起来有点“操纵数据”,而且我在组之间和组内部都有一些相同之处,因此很难为集群组选择值。然后我有多个问题:

  1. 为什么我不能比较不同级别的两个变量列表的一致性?这似乎有点天真,但不应该衡量各组之间的一致性(比如“消化”是否与“集群1”或其他相关)?在kappam.fleiss()函数中是否有我遗漏的选项?
  2. 是否有一个函数、测试或任何我遗漏的东西?如果是这样的话,我可能会道歉,但是我试图找到像kappa测试这样强大和重要的东西,但没有成功。
  3. ,你认为我应该像前面提到的那样操纵数据吗?即使我有一些必须用手操作的部件,这也可以接受吗?
EN

回答 1

Stack Overflow用户

发布于 2020-10-28 23:04:19

很可能您必须将集群组分配给该组中的多数标记,我在复制粘贴您的表时遇到了问题,下面使用虹膜:

代码语言:javascript
复制
res = data.frame(clus=kmeans(scale(iris[,1:4]),3)$cluster,labels=iris$Species)

    clus    labels
145    1 virginica
146    1 virginica
147    2 virginica
148    1 virginica
149    1 virginica
150    2 virginica

我们有上面的数据,就像您以前做的一样,现在有一个函数,用于根据集群中的多数分配标签:

代码语言:javascript
复制
pred2labels = function(pred,actual){

pred = as.character(pred)
actual = as.character(actual)

tab = as.matrix(table(pred,actual))
assignment = colnames(tab)[max.col(tab)]
names(assignment) = rownames(tab)
assignment[pred]

}

res$predicted_label = pred2labels(res$clus,res$labels)

    clus    labels predicted_label
145    1 virginica       virginica
146    1 virginica       virginica
147    2 virginica      versicolor
148    1 virginica       virginica
149    1 virginica       virginica
150    2 virginica      versicolor

然后应用irr中的kappa

代码语言:javascript
复制
library(irr)
kappam.fleiss(res[,2:3])
 Fleiss' Kappa for m Raters

 Subjects = 150 
   Raters = 2 
    Kappa = 0.75 

        z = 13 
  p-value = 0 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64081360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档