如何根据控制变量计算空间距离矩阵? (右)

问题描述 投票:0回答:1

我对使用自定义距离函数计算距离矩阵很感兴趣。此功能应考虑空间数据和两个控制变量。这个距离可以是欧几里得。详情如下:

我有一个卖家和买家的数据。该空间数据集包含城市、坐标、购买数量和两个控制变量。我想应用一个层次集群来确定“地理市场”,为此,我想计算一个考虑我提到的两个控制变量的距离矩阵。

我已经试过了,但我不确定我对这个对象是否正确

W
.

# Sample data (because is private info).
set.seed(123)
n <- 100
cities <- c("City1", "City2", "City3", "City4", "City5")
seller_city <- sample(cities, n, replace = TRUE)
buyer_city <- sample(cities, n, replace = TRUE)
seller_coords <- data.frame(lon = rnorm(n, -80, 1), lat = rnorm(n, 40, 1))
buyer_coords <- data.frame(lon = rnorm(n, -80, 1), lat = rnorm(n, 40, 1))
quantity <- rpois(n, 10)
var1 <- rnorm(n, 0, 1) #First control variable.
var2 <- rnorm(n, 0, 1) #Second control variable.
df <- data.frame(seller_city, buyer_city, seller_coords, buyer_coords, quantity, var1, var2)

# Compute distance matrix
city_dist <- distm(x =df[,c("lon", "lat")] ,
                             y = df[,c("lon.1", "lat.1")])
city_dist <- (city_dist - mean(city_dist)) / sd(city_dist) #Normalising, because its units differ to the control variables.
var_dist <- as.matrix(dist(df %>% select(var1, var2)))
var_dist <- (var_dist - mean(var_dist)) / sd(var_dist) #Normalising, because its units differ to the control variables.
W <- city_dist + var_dist # sum up


# Perform hierarchical clustering
hc <- hclust(as.dist(W), 
             method = "ward.D2")

想法是用以下公式计算城市ij之间的距离:

其中x是经度,y是纬度,v1是控制变量1,v2是控制变量2.

r statistics spatial hierarchical-clustering
1个回答
0
投票

您可以使用包

use_dist
及其功能
dist_make
来提供自定义距离功能。

在你的例子中,你可以像这样使用它

library(usedist)

# ...

distance_function <- function (v1, v2) {
   (v1[["lon"]] - v2[["lon"]])**2
  +(v1[["lat"]] - v2[["lat"]])**2 
  +(v1[["var1"]] - v2[["var2"]])**2
  +(v1[["var1"]] - v2[["var2"]])**2;
}

# Collect the data points in one dataframe
df <- data.frame(seller_city, buyer_city, seller_coords, buyer_coords, quantity, var1, var2)

# Calculate the distance matrix
city_dist <- dist_make(df, distance_function)

# Apply hierarchical clustering
hc <- hclust(as.dist(city_dist), method = "ward.D2")

使用这种方法,您可以使用任何您想要的任意距离函数。但是,您选择的函数看起来与标准欧几里德距离非常相似,请务必检查索引是否正确

© www.soinside.com 2019 - 2024. All rights reserved.