- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
亲爱的人群
问题
我尝试使用软件包 nfc、pgirmess、SpatialPack 和 spdep 计算空间相关图。但是,我很难定义距离的起点和终点。我只对较小距离的空间自相关感兴趣,但对较小的 bin 感兴趣。此外,由于光栅非常大(1.8 兆像素),我遇到了这些包的内存问题,但 SpatialPack。
因此,我尝试使用包 raster 中的 Moran 函数生成自己的代码。但是我一定有一些错误,因为完整数据集的结果与其他包的结果有些不同。如果我的代码没有错误,它至少可以帮助其他有类似问题的人。
问题
我不确定我的焦点矩阵是否有误。你能告诉我是否需要合并中心像素吗?使用 testdata 我无法显示方法之间的差异,但在我的完整数据集上,存在可见差异,如下图所示。但是,垃圾箱并不完全相同(50m 与 69m),因此这可能解释了部分差异。但是,在第一个垃圾箱中,这种解释对我来说似乎不合理。或者我的栅格的不规则形状以及处理 NA 的不同方法可能会导致差异?
Comparison of Own method with the one from SpatialPack
可运行示例
测试数据
计算测试数据的代码取自http://www.petrkeil.com/?p=1050#comment-416317
# packages used for the data generation
library(raster)
library(vegan) # will be used for PCNM
# empty matrix and spatial coordinates of its cells
side=30
my.mat <- matrix(NA, nrow=side, ncol=side)
x.coord <- rep(1:side, each=side)*5
y.coord <- rep(1:side, times=side)*5
xy <- data.frame(x.coord, y.coord)
# all paiwise euclidean distances between the cells
xy.dist <- dist(xy)
# PCNM axes of the dist. matrix (from 'vegan' package)
pcnm.axes <- pcnm(xy.dist)$vectors
# using 8th PCNM axis as my atificial z variable
z.value <- pcnm.axes[,8]*200 + rnorm(side*side, 0, 1)
# plotting the artificial spatial data
r <- rasterFromXYZ(xyz = cbind(xy,z.value))
plot(r, axes=F)
自己的代码
library(raster)
sp.Corr <- matrix(nrow = 0,ncol = 2)
formerBreak <- 0 #for the first run important
for (i in c(seq(10,200,10))) #Calculate the Morans I for these bins
{
cat(paste0("..",i)) #print the bin, which is currently calculated
w = focalWeight(r,d = i,type = 'circle')
wTemp <- w #temporarily saves the weigtht matrix
if (formerBreak>0) #if it is the second run
{
midpoint <- ceiling(ncol(w)/2) # get the midpoint
w[(midpoint-formerBreak):(midpoint+formerBreak),(midpoint-formerBreak):(midpoint+formerBreak)] <- w[(midpoint-formerBreak):(midpoint+formerBreak),(midpoint-formerBreak):(midpoint+formerBreak)]*(wOld==0)#set the previous focal weights to 0
w <- w*(1/sum(w)) #normalizes the vector to sum the weights to 1
}
wOld <- wTemp #save this weight matrix for the next run
mor <- Moran(r,w = w)
sp.Corr <- rbind(sp.Corr,c(Moran =mor,Distance = i))
formerBreak <- i/res(r)[1]#divides the breaks by the resolution of the raster to be able to translate them to the focal window
}
plot(x=sp.Corr[,2],y = sp.Corr[,1],type = "l",ylab = "Moran's I",xlab="Upper bound of distance")
计算空间相关图的其他方法
library(SpatialPack)
sp.Corr <- summary(modified.ttest(z.value,z.value,coords = xy,nclass = 21))
plot(x=sp.Corr$coef[,1],y = data$coef[,4],type = "l",ylab = "Moran's I",xlab="Upper bound of distance")
library(ncf)
ncf.cor <- correlog(x.coord, y.coord, z.value,increment=10, resamp=1)
plot(ncf.cor)
最佳答案
为了比较相关图的结果,在您的情况下,应考虑两件事。 (i) 您的代码仅适用于与您的光栅分辨率成正比的 bin。在这种情况下,bin 中的一些差异可能会包含或排除重要数量的对。 (ii) 栅格的不规则形状对被认为计算特定距离间隔相关性的对有很强的影响。所以你的代码应该同时处理两者,允许 bin 长度的任何值,并考虑光栅的不规则形状。为解决这些问题而对您的代码进行的小修改如下。
# SpatialPack correlation
library(SpatialPack)
test <- modified.ttest(z.value,z.value,coords = xy,nclass = 21)
# Own correlation
bins <- test$upper.bounds
library(raster)
sp.Corr <- matrix(nrow = 0,ncol = 2)
for (i in bins) {
cat(paste0("..",i)) #print the bin, which is currently calculated
w = focalWeight(r,d = i,type = 'circle')
wTemp <- w #temporarily saves the weigtht matrix
if (i > bins[1]) {
midpoint <- ceiling(dim(w)/2) # get the midpoint
half_range <- floor(dim(wOld)/2)
w[(midpoint[1] - half_range[1]):(midpoint[1] + half_range[1]),
(midpoint[2] - half_range[2]):(midpoint[2] + half_range[2])] <-
w[(midpoint[1] - half_range[1]):(midpoint[1] + half_range[1]),
(midpoint[2] - half_range[2]):(midpoint[2] + half_range[2])]*(wOld==0)
w <- w * (1/sum(w)) #normalizes the vector to sum the weights to 1
}
wOld <- wTemp #save this weight matrix for the next run
mor <- Moran(r,w=w)
sp.Corr <- rbind(sp.Corr,c(Moran =mor,Distance = i))
}
# Comparing
plot(x=test$upper.bounds, test$imoran[,1], col = 2,type = "b",ylab = "Moran's I",xlab="Upper bound of distance", lwd = 2)
lines(x=sp.Corr[,2],y = sp.Corr[,1], col = 3)
points(x=sp.Corr[,2],y = sp.Corr[,1], col = 3)
legend('topright', legend = c('SpatialPack', 'Own code'), col = 2:3, lty = 1, lwd = 2:1)
关于r - 使用 raster 包的空间相关图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33409501/
我需要删除R包“ raster”中图形周围的框框,但无法弄清楚应该更改哪个参数。示例如下: library(raster) r <- raster(nrows=10, ncols=10) r <- s
我有一个来自 LiDAR las 文件的大点 shapefile(xyz,大约 65,000 个点),我正在尝试使用 gdal_grid 将其插值到网格上: gdal_grid -ot Float64
require(raster) ## Function to aggregate fun.patch = 0.9 * length(x)) { return(as.vector(which.m
require(raster) ## Function to aggregate fun.patch = 0.9 * length(x)) { return(as.vector(which.m
亲爱的人群 问题 我尝试使用软件包 nfc、pgirmess、SpatialPack 和 spdep 计算空间相关图。但是,我很难定义距离的起点和终点。我只对较小距离的空间自相关感兴趣,但对较小的 b
我一直在使用raster包中的extract函数,使用shapefile定义的区域从光栅文件中提取数据。但是,我对该过程现在所需的内存量存在问题。我确实有大量 shapefile(~1000)。光栅文
这是完整的错误消息: C:\Project Files\Good\src\views\RasterView.as(26): col: 39 Error: Type was not found or w
使用 batik 1.7 版本的 batik-rasterizer.jar,我想知道如何正确调用 jar。 java -jar batik-rasterizer-1.7.jar -m image/pn
我正在使用 Paper.js 进行一些 Canvas 绘图。我正在尝试根据 Canvas 大小调整栅格的大小和位置,但我的代码无法正常工作。 var canvas = document.getElem
getPixels() 中返回的内容?我在文档中没有看到任何信息。颜色数据如何表示?它是如何布局的,按行还是按列? 最佳答案 数据表示:整红绿色蓝色整数阿尔法 关于java - Raster.getP
我正在尝试安装包“Raster”,但出现包“raster”的错误安装具有非零退出状态。 我在其他网站看过,没有成功提前谢谢你 我在下面详细说明过程和错误。 install.packages("rast
我编写了将像素数据复制到整数数组的图像处理代码,如下所示: void processImage(BufferedImage source) { WritableRaster raster =
基本上是标题。我知道您可以使用 rast() 读取栅格文件夹,但我只想堆叠两个单独读取的栅格。谢谢 最佳答案 请注意,使用 raster::stack,您可以在多个参数 (stack(x1,x2,x3
正如问题所说,我正在尝试将多层 terra 栅格转换为 rasterStack 对象,以便我可以将其与另一个包(biomod2),仅接受较旧的栅格对象。 有没有有效的方法可以做到这一点?我唯一的其他选
这个问题已经有答案了: What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? (25 个回答)
这里我尝试用最快的方法将 3 个矩阵(R、G 和 B)保存到 BufferedImage 中。 我在 StackExchange 上找到了这个方法,但它对我不起作用,因为它以灰度颜色保存图像。 如果我
更新 向导先生的回答给出了像素完美的结果,但它仅适用于 Windows,并且会破坏剪贴板内容。我的答案应该适用于任何平台,但不太精确:例如它省略了输入/输出标签。它确实允许设置光栅化宽度。 这个问题是
我正在尝试通过将栅格应用于 CALayer 来执行快速而肮脏的“模糊”。 CA 文档说 shouldRasterize 是可动画的,但是我没有得到任何动画。代码如下: CABasicAnimatio
我如何打开 .png 和 .tab 格式的栅格文件(使用 MapInfo 制作)并在 QGIS 中保留地理引用格式。非常感谢 最佳答案 您可以使用Georeferencer 工具,但您必须先在插件中激
在土壤制图的框架中,我需要对不确定数量的栅格求和。我尝试使用 'raster' 包和 'do.call' 函数来做到这一点。但是,如果 'sum' 函数可以对许多栅格求和,则使用 do.call 执行
我是一名优秀的程序员,十分优秀!