R 使用聚类分析选择最不相似的个体
我想对我的数据进行聚类,比如说5个聚类,然后我们需要从所有数据中选择50个关系最不相似的个体。这意味着,如果集群一包含100,集群二包含200,集群三包含400,集群四包含200,集群五包含100,我必须从第一个集群中选择5+10,从第二个集群中选择+20,从第三个集群中选择+10,从第四个集群中选择+5,从第五个集群中选择+5 数据示例:R 使用聚类分析选择最不相似的个体,r,cluster-analysis,R,Cluster Analysis,我想对我的数据进行聚类,比如说5个聚类,然后我们需要从所有数据中选择50个关系最不相似的个体。这意味着,如果集群一包含100,集群二包含200,集群三包含400,集群四包含200,集群五包含100,我必须从第一个集群中选择5+10,从第二个集群中选择+20,从第三个集群中选择+10,从第四个集群中选择+5,从第五个集群中选择+5 数据示例: mydata<-matrix(nrow=100,ncol=10,rnorm(1000, mean = 0, sd = 1)) mydata
mydata<-matrix(nrow=100,ncol=10,rnorm(1000, mean = 0, sd = 1))
mydata我不确定它是否正是您要搜索的内容,但它可能有帮助:
mydata<-matrix(nrow=100, ncol=10, rnorm(1000, mean = 0, sd = 1))
rownames(mydata) <- paste0("id", 1:100) # some id for identification
# cluster objects and calculate dissimilarity matrix
cl <- cutree(hclust(
sim <- dist(mydata, diag = TRUE, upper=TRUE)), 5)
# combine results, take sum to aggregate dissimilarity
res <- data.frame(id=rownames(mydata),
cluster=cl, dis_sim=rowSums(as.matrix(sim)))
# order, lowest overall dissimilarity will be first
res <- res[order(res$dis_sim), ]
# split object
reslist <- split(res, f=res$cluster)
## takes first three items with highest overall dissim.
lapply(reslist, tail, n=3)
## returns id´s with highest overall dissimilarity, top 20%
lapply(reslist, function(x, p) tail(x, round(nrow(x)*p)), p=0.2)
mydata关于您的评论,请查找以下代码:
请注意,代码可以在美观和效率方面进行改进。
此外,我还使用了第二个答案,因为如果不是这样的话,问题会变得一团糟
# calculation of centroits based on:
# https://stat.ethz.ch/pipermail/r-help/2006-May/105328.html
cl <- hclust(dist(mydata, diag = TRUE, upper=TRUE))
cent <- tapply(mydata,
list(rep(cutree(cl, 5), ncol(mydata)), col(mydata)), mean)
dimnames(cent) <- list(NULL, dimnames(mydata)[[2]])
# add up cluster number and data and split by cluster
newdf <- data.frame(data=mydata, cluster=cutree(cl, k=5))
newdfl <- split(newdf, f=newdf$cluster)
# add centroids and drop cluster info
totaldf <- lapply(1:5,
function(i, li, cen) rbind(cen[i, ], li[[i]][ , -11]),
li=newdfl, cen=cent)
# calculate new distance to centroits and sort them
dist_to_cent <- lapply(totaldf, function(x)
sort(as.matrix(dist(x, diag=TRUE, upper=TRUE))[1, ]))
dist_to_cent
#根据以下内容计算中心:
# https://stat.ethz.ch/pipermail/r-help/2006-May/105328.html
cl您是否需要帮助(包括R命令)来完成此任务,或者需要了解将要使用的流程?这听起来像是一个关于统计学的概念性问题,而不是一个关于R的编程问题。如果是这样的话,这个Q最好迁移到(即stats.SE)。从统计学上讲,我很清楚——我需要关于如何在R代码中实现这一点的帮助——到目前为止,你有哪些R代码?亲爱的Holzben,这真的很有帮助,谢谢你——集群中还有一件事,如何选择最接近簇形心的个体?--再次感谢您的代码和响应谢谢您的时间——基于数据示例,我认为最好使用kmeans并将数据集群到50个集群(因为我想选择50个个体)---然后选择一个离集群中心最近的个体/集群---你认为呢?很抱歉,这么多问题困扰了您。如果您对分析centroits kmeans感兴趣,那么与分层聚类相比,kmeans显然是更自然的选择。。。在我的示例中,我从分层集群开始,因此在第二个示例中也这样做了。你的建议听起来不错,但我不确定你的总体目标是什么。。。。