非常感谢在R中纠正我的问题的任何帮助。
我在R中编写了一个KDE函数,我使用MASS :: kde2d作为我的参考,用于绘制和建模犯罪数据。我生产的密度值似乎在正确的范围内,以及密度的整体分布,但它似乎通过图形原点翻转了45度。
请注意下图中的形状几乎相同,但翻转。
任何帮助将不胜感激!如果有人能发现错误,我已经在下方添加了我的2d功能。谢谢!
函数的输入是空间点阵,坐标位于网格单元的中心,犯罪位置是纬度,然后是经度顺序,带宽h和开关参数。我正在寻找包含其他内核的内容。
Kernel2D <- function(lattice, crime.locations, h, kernel){
if(is.data.frame(spatial.lattice)==FALSE) {lattice <- data.frame(lattice)}
d <- fields::rdist(lattice, crime.locations)
switch(kernel,
'normal'={
k=1
cat('k = 1, then rescaled so sum of densities = N. ')
cat("Normal - Function extends to boundary in all directions, applied to every location in the region regardless of h")
## This is the density calculation which iterates through the rows of d. I.e. for
## each cell in the lattice, it does a calculation on that row where the row contains the
## distances from that cell to each crime location. (Not trying to patronize anyone here
## with having dumb explanations! Trying to make it simple so I may understand it myself
## when explaining it to others haha) .
## I have assumed that this is correct as it it producing the same density shape as MASS::kde2d.
## There is an error when associating the density values to the right grid. Hmm. Ill have more of a think now.
density <- apply(d, 1, function(x) sum((1/(2*pi*h**2))*exp(-(x**2)/(2*h**2))))
k = nrow(crime.locations)/sum(density)
density <- k*density},
stop('Kernel Undefined. Available: triangular, uniform, negexp, normal, quartic'))
return(density)}
答案 0 :(得分:0)
我想我可能已经找到了这种情况发生的原因。
因此,在绘图时,将密度值与正确的网格关联显然存在一些错误。
因此在函数中我可能逐行计算一个格子,它返回一个列向量(按行顺序)。我可能会将此向量附加到数据框(例如),但df中的单元格行不是逐行中的行顺序,它们实际上是逐列的。因此,当我设置绘图数据时,我将密度附加到错误的网格上。如果行与列理论是正确的,这将产生一个将被翻转的图。
啊哈,这可能是个问题。我将改变我的功能,将密度附加到网格上作为其计算,以便正确的网格获得正确的密度。当我尝试这个时,会回复你的更新!!