2014-01-24 25 views
6

我是新来的R和我工作的一个数据集,包括名义,有序和度量数据。 因此我使用的是高尔夫距离。在下一步中,我使用这个距离hclust(x, method="complete")来创建基于这个距离的聚类。如何重量高尔距离变量R中

现在我想知道我怎么可以把不同的权重上的变量在高尔距离。 文档说:

daisy(x, metric = c("euclidean", "manhattan", "gower"), stand = FALSE, type = list(), weights = rep.int(1, p)) 

所以有一种方法,但我不能确定的语法(weights = ...)。 weightsrep.int的文档没有帮助。 我也没有找到任何其他有用的解释。

,我会很高兴,如果有人可以帮忙。

+2

不要忘记提及您正在使用'库(集群)'工作。 – tonytonov

+0

正确,谢谢。 – user3231946

回答

5

不知道这是你做了什么,但是......

比方说,你有5个变量,例如数据框或矩阵中有5列。然后weights将是包含相应列的权重的length=5的向量。

在文档中的符号weights=rep.int(1,p)只是意味着权重的默认值是长度为p的向量,其具有全部为1,例如。权重都等于1.在文档的其他地方,它解释了p是列数。

此外,请注意daisy(...)产生相异矩阵。这是你在hclust(...)中使用的。所以,如果x是数据帧或矩阵五列的变量,那么:

d <- daisy(x, metric="gower", weights=c(1,2,3,4,5)) 
hc <- hclust(d, method="complete") 

编辑(应答到OP的评论)

下面的代码显示集群如何依赖于权重。

clust.anal <- function(df,w,h) { 
    require(cluster) 
    d <- daisy(df, metric="gower", weights=w) 
    hc <- hclust(d, method="complete") 
    clust <- cutree(hc,h=h) 
    plot(hc, sub=paste("weights=",paste(wts,collapse=","))) 
    rect.hclust(hc,h=0.8,border="red") 

} 

df <- read.table("ExampleClusterData.csv", sep=";",header=T) 
df[1] <- factor(df[[1]]) 
df[2] <- factor(df[[2]]) 
# weights increase with col number... 
wts=c(1,2,3,4,5,6,7) 
clust.anal(df,wts,h=0.8) 

# weights decrease with col number... 
wts=c(7,6,5,4,3,2,1) 
clust.anal(df,wts,h=0.8) 

+0

谢谢你的回答!我现在遇到了这个问题,即使用这种语法我在树形图中看不到任何差异。我甚至用极端的权重看差异。我是否正确理解'权重= c(1,2,3,4,5)'中的向量是每列的权重?因此,第1列的重量为1,第2列的重量为2等等。我尝试了几次,我发现重量不能是不均匀的数字,并且不能超过列数。否则,我得到_type $权重必须是1:ncol(x)_ – user3231946

+0

作为权重传递的向量必须具有length = x中的列数,是的。但奇数,偶数没有限制。去furtehr,我需要你的数据集。你能发布一个链接吗? – jlhoward

+0

不幸的是我不能给出真实的数据。我创建了一个很好的示例http://bit.ly/1gferLt感谢您的努力! – user3231946