我在树木种植园有4000个体积记录.我需要计算整个种植园的莫兰一世.我使用ape库因为据说spdep较慢.我的代码是这样的:
# Modified from http://www.ats.ucla.edu/stat/r/faq/morans_i.htm
require(ape)
df <- data.frame(
x = 1:2000,
y = 1:2000,
v = rnorm(4000, mean=4) )
df.dists <- as.matrix(dist(cbind(df$x, df$y)))
df.dists.inv <- 1/df.dists
diag(df.dists.inv) <- 0
Moran.I(df$v, df.dists.inv)
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我会遇到类似溢出的错误.
*Error in if (obs <= ei) 2 * pv else 2 * (1 - pv) :
missing value where TRUE/FALSE needed*
Run Code Online (Sandbox Code Playgroud)
使用ff库
require(ape)
require(ff)
ffdf <- as.ffdf(df)
ffdf.dists <- as.matrix(dist(cbind(ffdf$x, ffdf$y)))
ffdf.dists.inv <- 1/df.dists
diag(ffdf.dists.inv) <- 0
Moran.I(ffdf$v, ffdf.dists.inv)
Run Code Online (Sandbox Code Playgroud)
更多错误消息:
*Error in x …Run Code Online (Sandbox Code Playgroud) 在@GavinSimpson撰写的超级博客之后,我正在尝试调整2015年波兰地方政府的选举结果。 https://www.fromthebottomoftheheap.net/2017/10/19/first-steps-with-mrf-smooths/ 我将xls上的shp数据与6位数字标识符(可能是前导0 s)结合在一起。我将其保留为文本变量。编辑,我简化了标识符,现在使用从1到n的序列来简化我的问题。
library(tidyverse)
library(sf)
library(mgcv)
# Read data
# From https://www.gis-support.pl/downloads/gminy.zip shp file
boroughs_shp <- st_read("../../_mapy/gminy.shp",options = "ENCODING=WINDOWS-1250",
stringsAsFactors = FALSE ) %>%
st_transform(crs = 4326)%>%
janitor::clean_names() %>%
# st_simplify(preserveTopology = T, dTolerance = 0.01) %>%
mutate(teryt=str_sub(jpt_kod_je, 1, 6)) %>%
select(teryt, nazwa=jpt_nazwa, geometry)
# From https://parlament2015.pkw.gov.pl/wyniki_zb/2015-gl-lis-gm.zip data file
elections_xls <-
readxl::read_excel("data/2015-gl-lis-gm.xls",
trim_ws = T, col_names = T) %>%
janitor::clean_names() %>%
select(teryt, liczba_wyborcow, glosy_niewazne)
elections <-
boroughs_shp %>% fortify() %>%
left_join(elections_xls, by = "teryt") %>%
arrange(teryt) %>%
mutate(idx = …Run Code Online (Sandbox Code Playgroud) 我想创建一个地图,显示一个现象的局部空间集群,最好使用 Local Moran (LISA)。
在下面的可重复示例中,我使用计算本地莫兰指数,spdep但我想知道是否有简单的方法来映射集群,最好使用ggplot2. 帮助 ?
library(UScensus2000tract)
library(ggplot2)
library(spdep)
# load data
data("oregon.tract")
# plot Census Tract map
plot(oregon.tract)
# create Queens contiguity matrix
spatmatrix <- poly2nb(oregon.tract)
#calculate the local moran of the distribution of black population
lmoran <- localmoran(oregon.tract@data$black, nb2listw(spatmatrix))
Run Code Online (Sandbox Code Playgroud)
现在为了使这个示例更类似于我的真实数据集,NA我的形状文件中有一些值,它们代表多边形中的孔,因此不应在计算中使用这些区域。
oregon.tract@data$black[3:5] <- NA
Run Code Online (Sandbox Code Playgroud) 我有一个面板数据集,其中包含数百个区域、约 10 年以及这些区域的空间数据。我用包创建了一个权重矩阵spdep(通过标准方式,然后,nb2listw)。因此,我有一个矩阵,其中每个区域的权重(相对于其他区域) - 但每个区域仅表示一次。
我想运行spdep包 ( lagsarlm, errorsarlm) 中的一些空间回归,但出现错误:
Error in subset.listw(listw, subset, zero.policy = zero.policy) :
Not yet able to subset general weights lists
和
Error in lagsarlm(y ~ x1 + x2: Input data and weights have different dimensions
我认为这是因为权重矩阵每个区域只有一行(然后只能计算一年)。您对如何解决这个问题有什么建议吗?我的想法围绕以下几点:
期待您的建议。
我想使用k-means聚类从自组织映射中聚类码本.但是,考虑到数据的"空间"特性,我想约束聚类,以便只将连续的节点聚集在一起.环顾四周后,我决定尝试和使用功能skater的spdep包.
这是我一直在做的一个例子.
# the 'codebook' data obtained from the self-organizing map.
# My grid is 15 by 15 nodes.
data <- data.frame(var1=rnorm(15*15, mean = 0, sd = 1), var2=rnorm(15*15, mean = 5, sd = 2))
# creating a matrix with all edges listed
# (so basically one row to show a connection between each pair of adjacent nodes)
require(spdep)
nbs <- cell2nb(nrow=15, ncol=15)
edges <- data.frame(node=rep(1:(tt.grid$xdim*tt.grid$ydim), each=4))
edges$nb <- NA
for (i in 1:(tt.grid$xdim*tt.grid$ydim)) {
vals …Run Code Online (Sandbox Code Playgroud) 我想测试一个物种的存在/不存在记录的空间自相关性。我的数据在 GIS 中包含超过 130,000 个网格和大约 700 个物种的存在记录。
我读过普通的 Moran 的 $I$ 无法处理这种数据,但是 package 中的 join count 方法spdep可以做到。但是,我是新手R,我仍然无法理解joincount.mcor的帮助中的信息和代码joincount.test。
我的数据是这样的:
gridnumber species
1 1
2 0
3 0
4 1
……
Run Code Online (Sandbox Code Playgroud)
我知道如何读shp.file入R,我知道我必须计算数据的权重,但以下步骤spdep超出了我的能力。
我有一个点列表,我想使用Moran的I检查自相关,并将感兴趣的区域除以4 x 4个样本.
现在我在Google上找到的每个例子(例如http://www.ats.ucla.edu/stat/r/faq/morans_i.htm)都使用某种测量值作为Moran I函数的第一个输入,无论哪个使用库(我查看了猿和spdep包).
但是,我所拥有的只是我想要检查相关性的分数.
问题是,听起来有趣(或悲伤),我不知道我在这里做什么.我不是一个(空间)统计人员,我想知道的是,如果使用Moran的I分散,聚集或ramdom的点集合.
我的方法是否正确?如果不是在哪里,我做错了什么?
谢谢
这是我到目前为止:
# download, install and load the spatstat package (http://www.spatstat.org/)
install.packages("spatstat")
library(spatstat)
# Download, install and run the ape package (http://cran.r-project.org/web/packages/ape/)
install.packages("ape")
library(ape)
# Define points
x <- c(3.4, 7.3, 6.3, 7.7, 5.2, 0.3, 6.8, 7.5, 5.4, 6.1, 5.9, 3.1, 5.2, 1.4, 5.6, 0.3)
y <- c(2.2, 0.4, 0.8, 6.6, 5.6, 2.5, 7.6, 0.3, 3.5, 3.1, 6.1, 6.4, 1.5, 3.9, 3.6, 5.2)
# Store the coordinates as a matrix …Run Code Online (Sandbox Code Playgroud) 我想创建一个地图,显示两个变量之间的双变量空间相关性。这可以通过制作双变量 Moran's I 空间相关性的 LISA 图或使用Lee (2001)提出的 L 指数来完成。
双变量 Moran's I 没有在spdep库中实现,但 L 索引是,所以这里是我尝试使用 L 索引但没有成功的方法。显示基于 Moran's I 的解决方案的答案也将非常受欢迎!
从下面的可重现示例中可以看出,到目前为止,我已经设法计算了局部 L 索引。我想要做的是估计伪 p 值并创建一个结果地图,就像我们在 LISA 空间集群中使用的那些地图一样,具有 high-high、high-low、...、low-low。
在此示例中,目标是创建一个地图,其中包含黑人和白人人口之间的双变量 Lisa 关联。地图应在 中创建ggplot2,显示集群:
library(UScensus2000tract)
library(ggplot2)
library(spdep)
library(sf)
# load data
data("oregon.tract")
# plot Census Tract map
plot(oregon.tract)
# Variables to use in the correlation: white and black population in each census track
x <- scale(oregon.tract$white)
y …Run Code Online (Sandbox Code Playgroud) r ×8
spdep ×8
spatial ×4
geospatial ×2
ape-phylo ×1
binary-data ×1
correlation ×1
ggplot2 ×1
k-means ×1
mgcv ×1
panel ×1
plot ×1
regression ×1