Multivariate distances
As an example, the following script will calculate the Euclidian distances, in terms of pollen abundance, among a set of (modern) pollen surface-samples in the Midwest that were used for fitting regression equations for reconstructing past climates from fossil-pollen data. (Note: because the pollen data were transformed by taking the square roots of pollen abundance data, what is actually being calculated here is the so-called "squared chord-distance" or SCD.)
# calculate a Squared Chord-Distance dissimilarity matrix for
# Midwestern pollen data
attach(midwtf2)
X <- as.matrix(midwtf2[,7:21])
nvars <- 14
nobs <- 124
SCDist <- array(,c(nobs^2,3))
dimnames(SCDist) <- list(NULL,c("i","j","SCD"))
SCDist.matrix <- array(,c(nobs,nobs))
for (i in 1:nobs) {
for (j in 1:nobs) {
distance <- 0.0
for (k in 1:nvars) {
distance <- distance + ((X[i,k]-X[j,k])^2)
}
m <-((i-1)*nobs)+j
SCDist[m,3] <- sqrt(distance)
SCDist.matrix[i,j] <- sqrt(distance)
SCDist[m,1] <- i
SCDist[m,2] <- j
}
}
# display the distance matrix
image(1:nobs, 1:nobs, SCDist.matrix, xlab="observation",
ylab="observation")