使用 ppx 和 nndist 查找每种类型的最近邻居
Using ppx and nndist to find nearest neighbour of each type
对于具有三个协变量和一个治疗指标的数据集,我试图找到每个人的最近邻居。特别是,我想在每个处理组中找到最近的邻居。
# Generate a treatment indicator factor
treatment <- factor(data_train[,"a"], levels = c("0", "1"), labels = c("Untreated", "Treated"))
# Put the covariate data into 'points' format
pointpattern <- ppx(data = data.frame(data_train[, c("Z1", "Z2", "Z3")], "Treatment" = treatment), coord.type = c("s", "s", "s", "m"))
# Find the nearest neighbour of each type
dists <- nndist(X = pointpattern, by = marks(pointpattern))
然而对象'dists'只是一个向量,似乎是最近的邻居,完全忽略了处理组。
我花了将近一整天的时间来弄清楚我做错了什么 - 请帮忙!
您在此示例中使用的函数 nndist.ppx
无法识别参数 by
。
这是关于 R
中的 "classes and methods"。函数 nndist
是通用的;当您在 class "ppx"
的对象上调用 nndist
时,系统会调用函数 nndist.ppx
,这是此 class 的 "method"。
您可以通过查看其帮助文件来检查 nndist.ppx
的功能;它不支持参数 by
.
还有其他 nndist
方法可以识别参数 by
,例如 nndist.ppp
,我想您正在查看相关文档。
我们将更新 spatstat
中的代码,以便此功能也可用于 nndist.ppx
。
同时,您可以使用函数nncross.ppx
查找一组点到另一组点的最近距离。以下是如何获得您想要的结果:
Y <- split(pointpattern) # divide into groups
m <- length(Y) # number of groups
n <- npoints(pointpattern)
result <- matrix(, n, m) # final results will go here
partresults <- list() # collect results for each group here
for(i in 1:m) {
Yi <- Y[[i]]
ni <- npoints(Yi)
a <- matrix(, ni, m)
a[,i] <- nndist(Yi)
for(j in (1:m)[-i])
a[,j] <- nncross(Yi, Y[[j]], what="d")
partresults[[i]] <- a
}
split(result, marks(pointpattern)) <- partresults
那么result
就是你想要的距离矩阵。
对于具有三个协变量和一个治疗指标的数据集,我试图找到每个人的最近邻居。特别是,我想在每个处理组中找到最近的邻居。
# Generate a treatment indicator factor
treatment <- factor(data_train[,"a"], levels = c("0", "1"), labels = c("Untreated", "Treated"))
# Put the covariate data into 'points' format
pointpattern <- ppx(data = data.frame(data_train[, c("Z1", "Z2", "Z3")], "Treatment" = treatment), coord.type = c("s", "s", "s", "m"))
# Find the nearest neighbour of each type
dists <- nndist(X = pointpattern, by = marks(pointpattern))
然而对象'dists'只是一个向量,似乎是最近的邻居,完全忽略了处理组。
我花了将近一整天的时间来弄清楚我做错了什么 - 请帮忙!
您在此示例中使用的函数 nndist.ppx
无法识别参数 by
。
这是关于 R
中的 "classes and methods"。函数 nndist
是通用的;当您在 class "ppx"
的对象上调用 nndist
时,系统会调用函数 nndist.ppx
,这是此 class 的 "method"。
您可以通过查看其帮助文件来检查 nndist.ppx
的功能;它不支持参数 by
.
还有其他 nndist
方法可以识别参数 by
,例如 nndist.ppp
,我想您正在查看相关文档。
我们将更新 spatstat
中的代码,以便此功能也可用于 nndist.ppx
。
同时,您可以使用函数nncross.ppx
查找一组点到另一组点的最近距离。以下是如何获得您想要的结果:
Y <- split(pointpattern) # divide into groups
m <- length(Y) # number of groups
n <- npoints(pointpattern)
result <- matrix(, n, m) # final results will go here
partresults <- list() # collect results for each group here
for(i in 1:m) {
Yi <- Y[[i]]
ni <- npoints(Yi)
a <- matrix(, ni, m)
a[,i] <- nndist(Yi)
for(j in (1:m)[-i])
a[,j] <- nncross(Yi, Y[[j]], what="d")
partresults[[i]] <- a
}
split(result, marks(pointpattern)) <- partresults
那么result
就是你想要的距离矩阵。