我目前正在为一个看似容易解决的问题而奋斗,这也许在以前的问题中得到了解答,但我在网上找不到任何关于这个问题的答案。
我目前正在对一些数据进行聚类分析(k平均法、分层热图法等等)。我想检查我的集群(“集群组”列)是否与附加到我个人的值列表(“取向”列)保持一致。问题是,这个值列表当然没有与我的聚类结果相同的级别。我想对这两个变量(聚类结果和值列表)进行kappa一致性测试。下面是我的dataframe的简写版本:
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"问题是,当然,卡帕-弗莱斯的一致性得分比较两个列表与相同的水平。
我试图创建一种算法,在这个算法中,每个集群级别都按照其中的大多数值重命名,但是当然,它看起来有点“操纵数据”,而且我在组之间和组内部都有一些相同之处,因此很难为集群组选择值。然后我有多个问题:
发布于 2020-10-28 23:04:19
很可能您必须将集群组分配给该组中的多数标记,我在复制粘贴您的表时遇到了问题,下面使用虹膜:
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我们有上面的数据,就像您以前做的一样,现在有一个函数,用于根据集群中的多数分配标签:
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
library(irr)
kappam.fleiss(res[,2:3])
Fleiss' Kappa for m Raters
Subjects = 150
Raters = 2
Kappa = 0.75
z = 13
p-value = 0 https://stackoverflow.com/questions/64081360
复制相似问题