- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
什么是一些好的克里金法/插值想法/选项,可以让重度权重的点在绘制的 R map 上的轻权重点上流血?
康涅狄格州有八个县。我找到了质心并想绘制这八个县中每个县的贫困率。其中三个县人口稠密(约 100 万人),其他五个县人口稀少(约 100,000 人)。由于这三个人口稠密的县占全州总人口的 90% 以上,我希望这三个人口稠密的县完全“压倒” map 并影响跨县边界的其他点。Krig
R中的函数fields
包有很多参数和协方差函数可以调用,但我不知道从哪里开始?
这是可重现的代码,可快速生成硬边界 map ,然后生成三个不同加权的 map 。希望我可以更改此代码,但也许它需要更复杂的东西,例如 geoRglm
包裹?三个加权 map 中的两个看起来几乎相同,尽管一个的权重是另一个的 10 倍。
https://raw.githubusercontent.com/davidbrae/swmap/master/20141001%20how%20to%20modify%20the%20Krig%20function%20so%20a%20huge%20weight%20overwhelms%20nearby%20points.R
谢谢!!
编辑:这是我想要的行为的图片示例-
最佳答案
免责声明 - 我不是克里金法专家。克里格法很复杂,需要很好地理解基础数据、方法和目的,才能获得正确的结果。您可能希望尝试从@whuber [在 GIS Stack Exchange 上获得输入或通过他的网站(http://www.quantdec.com/quals/quals.htm)] 或您认识的其他专家)与他联系。
也就是说,如果您只是想实现您要求的视觉效果而不是将其用于某种统计分析,我认为有一些相对简单的解决方案。
编辑:
正如您所评论的,尽管以下建议使用 theta
和 smoothness
论点使预测表面变得平坦,它们同样适用于所有测量值,因此不会扩展人口稠密县相对于人口密度较低县的“影响范围”。经过进一步考虑,我认为有两种方法可以实现这一点:通过改变协方差函数以取决于人口密度或使用权重,就像您一样。正如我在下面所写的,您的加权方法会改变克里金函数的误差项。也就是说,它反向缩放块金方差。
正如您在半变异函数图像中所见,金块本质上是 y 截距,或同一位置测量值之间的误差。权重影响金块方差 (sigma2) 作为 sigma2/weight。因此,更大的权重意味着在小尺度距离上的错误更少。但是,这不会改变半方差函数的形状,也不会对极差或基台产生太大影响。
我认为最好的解决方案是让协方差函数取决于人口。但是,我不确定如何实现这一点,而且我看不到任何对 Krig
的争论。这样做。我试着像在 Krig
中那样定义我自己的协方差函数。例如,但只有错误。
对不起,我帮不上忙了!
帮助理解克里金法的另一个重要资源是:http://www.epa.gov/airtrends/specialstudies/dsisurfaces.pdf
正如我在评论中所说,阈值值和块金值以及半变异函数的范围是您可以更改以影响平滑的因素。通过指定 weights
在调用 Krig
,您正在改变测量误差的方差。也就是说,在正常使用中,预计权重与测量值的准确度成正比,因此更高的权重基本上代表更准确的测量值。这对于您的数据实际上并非如此,但它可能会给您带来您想要的效果。
要改变插入数据的方式,您可以在简单的 Krig
中调整两个(以及更多)参数。您正在使用的电话:theta
和 smoothness
. theta
调整半方差范围,这意味着越远的测量点对估计值的贡献越大 theta
.您的数据范围是
range <- data.frame(lon=range(ct.data$lon),lat=range(ct.data$lat))
range[2,]-range[1,]
lon lat
2 1.383717 0.6300484
theta
该范围内的值以查看这如何影响您的结果。一般来说,较大的
theta
导致更平滑,因为您从每个预测的更多值中提取。
Krig.output.wt <- Krig( cbind(ct.data$lon,ct.data$lat) , ct.data$county.poverty.rate ,
weights=c( size , 1 , 1 , 1 , 1 , size , size , 1 ),Covariance="Matern", theta=.8)
r <- interpolate(ras, Krig.output.wt)
r <- mask(r, ct.map)
plot(r, col=colRamp(100) ,axes=FALSE,legend=FALSE)
title(main="Theta = 0.8", outer = FALSE)
points(cbind(ct.data$lon,ct.data$lat))
text(ct.data$lon, ct.data$lat-0.05, ct.data$NAME, cex=0.5)
Krig.output.wt <- Krig( cbind(ct.data$lon,ct.data$lat) , ct.data$county.poverty.rate ,
weights=c( size , 1 , 1 , 1 , 1 , size , size , 1 ),Covariance="Matern", theta=1.6)
r <- interpolate(ras, Krig.output.wt)
r <- mask(r, ct.map)
plot(r, col=colRamp(100) ,axes=FALSE,legend=FALSE)
title(main="Theta = 1.6", outer = FALSE)
points(cbind(ct.data$lon,ct.data$lat))
text(ct.data$lon, ct.data$lat-0.05, ct.data$NAME, cex=0.5)
smoothness
参数,将更改用于平滑预测的函数的顺序。默认值为 0.5,导致二阶多项式。
Krig.output.wt <- Krig( cbind(ct.data$lon,ct.data$lat) , ct.data$county.poverty.rate ,
weights=c( size , 1 , 1 , 1 , 1 , size , size , 1 ),
Covariance="Matern", smoothness = 0.6)
r <- interpolate(ras, Krig.output.wt)
r <- mask(r, ct.map)
plot(r, col=colRamp(100) ,axes=FALSE,legend=FALSE)
title(main="Theta unspecified; Smoothness = 0.6", outer = FALSE)
points(cbind(ct.data$lon,ct.data$lat))
text(ct.data$lon, ct.data$lat-0.05, ct.data$NAME, cex=0.5)
fields
的手册。 .它写得很好,很好地解释了论点。
关于r - 允许 map 上权重重的点压倒其他权重低的点的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26143699/
我想知道,在设计一个供其他人使用的框架时,类有一些功能作为默认行为,并希望其客户在必要时覆盖它,这是否会让人皱眉。一个例子如下: public class RecordProcessor {
我是一名优秀的程序员,十分优秀!