我使用gstat来预测二项式数据,但预测值高于1且低于0.有谁知道我如何处理这个问题?谢谢.
data(meuse)
data(meuse.grid)
coordinates(meuse) <- ~x+y
coordinates(meuse.grid) <- ~x+y
gridded(meuse.grid) <- TRUE
#glm model
glm.lime <- glm(lime~dist+ffreq, meuse, family=binomial(link="logit"))
summary(glm.lime)
#variogram of residuals
var <- variogram(lime~dist+ffreq, data=meuse)
fit.var <- fit.variogram(var, vgm(nugget=0.9, "Sph", range=sqrt(diff(meuse@bbox\[1,\])^2 + diff(meuse@bbox\[2,\])^2)/4, psill=var(glm.lime$residuals)))
plot(var, fit.var, plot.nu=T)
#universal kriging
kri <- krige(lime~dist+ffreq, meuse, meuse.grid, fit.var)
spplot(kri[1])
Run Code Online (Sandbox Code Playgroud)

lat long
7.16 124.21
8.6 123.35
8.43 124.28
8.15 125.08
Run Code Online (Sandbox Code Playgroud)
考虑这些坐标,这些坐标对应于测量降雨量数据的气象站.
R中gstat包的介绍使用了meuse数据集.在本教程的某些时候:https://rpubs.com/nabilabd/118172,这些人在这行代码中使用了"meuse.grid":
data("meuse.grid")
Run Code Online (Sandbox Code Playgroud)
我没有这样的文件,我不知道如何创建它,我可以使用这些坐标创建一个吗?或者至少向我指出讨论如何为自定义区域创建自定义网格的材料(即不使用GADM的管理边界).
可能写错了,甚至不知道这个问题是否对R精明的人有意义.不过,我很乐意听到一些方向,或者至少是提示.非常感谢!
R的总瘤和统计数据.
编辑:看到我发布的教程看起来像的样本网格,这是我想做的事情.
编辑2:这种方法是否可行?https://rstudio-pubs-static.s3.amazonaws.com/46259_d328295794034414944deea60552a942.html
我想在ggmap上绘制热图.
library(ggmap)
turku<-get_map('turku', zoom=13)
turkumap<-ggmap(turku, extent="device", legend="topleft")
turkumap
turkumap+geom_density2d(mapping=aes(x = lon, y = lat),data = test, )
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Error in (function (x, y, h, n = 25, lims = c(range(x), range(y))) :
bandwidths must be strictly positive
Run Code Online (Sandbox Code Playgroud)
测试变量是:
test
lon lat var1.pred
1 22.25320 60.4314 -67.04862
2 22.25332 60.4314 -67.07793
3 22.25344 60.4314 -67.11007
4 22.25356 60.4314 -67.14517
5 22.25368 60.4314 -67.18336
6 22.25379 60.4314 -67.22478
7 22.25391 60.4314 -67.26956
8 22.25403 60.4314 -67.31783
9 22.25415 60.4314 -67.36973
10 22.25427 …Run Code Online (Sandbox Code Playgroud) 我每天有61个测量站的降雨量,为期12年(8000平方公里).
目标是创造5公里和25公里分辨率网格日降雨量产品.由于车站的数量很少,并且即使在雨季也不是所有车站都有雨,我选择使用气候变异图.
典型日(irain)的雨量计测量如下,具有由NA表示的少量缺失值.
7.8 4.4 15.4 19.1 5.8 0 42 6.4 21 21 0 0 0 15.6 0 0 10 5 1.2 0 14.4 NA 25 13.2 0 9.2 2 6.6 7.8 13.2 15.4 NA 9 0 15.5 0 18.6 6 0 4.8 10.6 0 9 0 12.4 NA 12 0 3 14 10 10 0 68 21.8 18 14.8 5.4 7 0 NA
Run Code Online (Sandbox Code Playgroud)
作为日常雨量偏斜,变换i相测试立方根变换和日志变换(log1p)为每天单独.然而,对于所有这些日子来说,两种变换都不适合我用shapiro wilk测试测试.因此,我选择正常分数分数变换(NCR),如Grimes&Pardo(2009)降雨量地统计分析所示.并使用了Ashton Shortridge教授的代码
以下代码用于生成季风季节的气候变异函数.请注意,我曾使用超过30%的电台报告下雨的日子.没有找到任何参考.当我达到65%的天数超过阈值时,选择30%.
lag = 3 …Run Code Online (Sandbox Code Playgroud) 有没有办法使用 gstat 包的 IDW 插值在 R 中的 SpatialPointsDataFrame 对象内循环变量?
我的意思是这样的
for (day in list_days) {
P.idw <- gstat::idw(day~1, P, newdata=grd, idp=2.0)
r <- raster(P.idw)
plot(r)
}
Run Code Online (Sandbox Code Playgroud)
编辑:因为该结构给了我错误:
Error in predict.gstat(g, newdata = newdata, block = block, nsim = nsim, :
too many spatial dimensions: 58
In addition: Warning message:
In predict.gstat(g, newdata = newdata, block = block, nsim = nsim, :
NAs introduced by coercion
Run Code Online (Sandbox Code Playgroud)
但如果我直接写变量的名称,它就可以正常工作:
P.idw <- gstat::idw(X2018.01.14~1, P, newdata=grd, idp=2.0)
Run Code Online (Sandbox Code Playgroud) 我试图在R中编写一个使用gstat库的代码来创建插值.我已经阅读了gstat手册,基于互联网上的一些例子,我设法编写了这段代码(这只是一部分):
g <- gstat(id="tec", formula=TEC ~ 1, data=data) ##I create an object
v <- variogram(g) # plot the empirical variogram
plot(v)
mod<-vgm(sill=var(data$TEC),model="Sph",range=200,nugget=200) #create the variogram model
v.fit <- fit.variogram(v, model=mod,fit.method=1) #fit the empirical variogram
Theor_variogram=plot(variogram(g),v.fit,main="WLS Model") #plot the theoretical variogram
plot(Theor_variogram)
## Kriging interpolation
p <- predict.gstat(g, model=v.fit, newdata=predGrid)
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我运行最后一个命令(预测)而不是通过普通克里金插值得到结果时,我得到一个反距离加权(IDW).我在gstat手册中读到:"当没有指定变异函数时,反距离加权插值是默认操作.当指定变异函数时,默认预测方法是普通克里金法."
但是,正如您在我的代码中所看到的,我指定了经验和理论变差函数.你知道我为什么一直得到IDW而不是普通克里金吗?它可以与我的坐标类型相关吗?例如,如果我的坐标彼此接近,或者感兴趣的区域太大?任何帮助都非常有用.
在此先感谢迪米特里斯
是否有可能以某种方式轻松处理Spatial*DataFrame(*=点,线,多边形,像素,网格......)中的数据?特别是我在为它分配值和使用它们时遇到了困难:
require(gstat)
data(meuse)
coordinates(meuse) = ~x+y
data(meuse.grid)
gridded(meuse.grid) = ~x+y
######## 1) assigning value
meuse[1,'zinc'] <- NA
# Error in meuse[1, "zinc"] <- NA : object of type 'S4' is not subsettable
as.data.frame(meuse)[1,'zinc'] <- NA
# Error in as.data.frame(meuse)[1, "zinc"] <- NA :
# could not find function "as.data.frame<-"
######## 2) operating with values
meuse[, 'zinc'] + 2
# Error in meuse[, "zinc"] + 2 : non-numeric argument to binary operator
Run Code Online (Sandbox Code Playgroud)
我发现这两种情况都有相当难看的变通办法:
# ad 1)
meuse2 <- as.data.frame(meuse) …Run Code Online (Sandbox Code Playgroud) 当我使用gstat包在R中进行插值时,会出现类似“ [反距离加权插值]”或“ [普通或加权最小二乘预测]”的消息。例如:
library('sp')
library('gstat')
data(meuse)
coordinates(meuse) = ~x + y
data(meuse.grid)
coordinates(meuse.grid) = ~x + y
gridded(meuse.grid) <- TRUE
zn.tr1 <- krige(log(zinc) ~ x + y , meuse, meuse.grid)
Run Code Online (Sandbox Code Playgroud)
[普通或加权最小二乘预测]
如何禁用该消息?