Nothing
PAMfmado <- function(x,K,J=0,threshold=.99,max.min=0){
#
# Description
# This function performs the PAM algorithm based on the F-madogram distance
#
# Aguments
# x a matrix
# K number of clusters
# J number of resampling for which the stations are randomly moved to break the dependence
# J=0 means no resampling
# threshold corresponding to the quantile level for the resampling.
# the resulting quantile is stored via sil.final<<-quantile(sil.vec[sil.vec>0],probs=threshold)
# J=0 means no resampling
#
Nnb = ncol(x)
Tnb = nrow(x)
#--- DISTANCE MATRIX
#--- F-MADOGRAM
V = array(NaN, dim = c(Tnb,Nnb))
for(p in 1:Nnb) {
x.vec = as.vector(x[,p])
x.vec[x.vec < max.min]=NA # thresholding
Femp = ecdf(x.vec)(x.vec)
V[,p] = Femp
}
# with Madogram
DD = dist(t(V),method = "manhattan",diag = TRUE, upper = TRUE)/(2*Tnb)
# !!! NA are excluded for when computing the distance between two rows but the dist is then multiplied by (Tnb/ nb of non-NA)
# in order to have comparable distances (ie wrt the number of data points) among all rows
#---------- CLUSTERING WITH PAM -------#
output = pam(DD,K,diss = TRUE,medoids = NULL)
#################################################################################
#### resampling step to compute the silhouette coeff for independent case
#################################################################################
if(J>0){
sample.R = function(x) sample(x)
sil.vec=rep(0,J)
for(j in 1:J){
x.sample=apply(x,2,sample.R) # resampling within each column
for(p in 1:Nnb) {
x.bis = as.vector(x.sample[,p])
x.bis[x.bis < max.min]=NA # thresholding
Femp = ecdf(x.bis)(x.bis)
V[,p] = Femp
}
# with Madogram
DD = dist(t(V),method = "manhattan",diag = TRUE, upper = TRUE)/(2*Tnb)
sil.vec[j]=pam(DD,K,diss = TRUE,medoids = NULL,keep.diss=FALSE,keep.data=FALSE)$silinfo$avg.width
}
sil.final = quantile(sil.vec[sil.vec>0],probs=threshold)
print("The quantile for resampling is ", sil.final, "\n", sep="")
}
return(output)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.