【问题标题】:R: Comparison between two hexbins with applying KL divergenceR:应用 KL 散度的两个 hexbin 之间的比较
【发布时间】:2018-08-15 11:47:17
【问题描述】:

假设我有两个大小不同的数据集,每个数据集包含 x 和 y 来定位每个观察值。

set.seed(1)
x1 <- runif(1000,-195.5,195.5)
y1 <- runif(1000,-49,49)
data1 <- data.frame(x1,y1)
x2 <- runif(2000,-195.5,195.5)
y2 <- runif(2000,-49,49)
data2 <- data.frame(x2,y2)

在这里,我生成了两个数据集,它们在特定区域内具有随机位置。

然后我为每个数据集生成了两个 hexbin。而且我知道要实现回溯垃圾箱,我需要设置IDs = TRUE

hbin_1 <- hexbin(x=data1$x1,y=data1$y1,xbins=30,shape=98/391,IDs=TRUE)
hbin_2 <- hexbin(x=data2$x2,y=data2$y2,xbins=30,shape=98/391,IDs=TRUE)

下一步,我想应用 KL 散度来实现这两个数据集的比较。那么问题是如何将第二个数据集中的匹配箱与第一个数据集匹配? (我想比较两个不同数据集中相同位置的垃圾箱)

更新 我们可以通过

得到包含该bin中相应观察计数的单元格名称(bin号)的表
tI1 <- table(hbin_1@cID)
tI2 <- table(hbin_2@cID)

问题是数据集 1 和数据集 2 之间的 bin 编号不同。即使我们在函数 hexbin 中设置了相同的 xbinsshape,我们仍然会得到两个数据集的不同 bin。那么如何比较两个数据集(或获取具有相同位置的 bin)?

【问题讨论】:

    标签: r validation binning


    【解决方案1】:

    hexbin 函数不会返回空箱。因此,即使我们将 xbinsxbndsybnds 设置为相同,两个数据集返回的 hexbin 结果也可能不同。

    我们可以使用MASS包中的kde2d来实现二维核密度估计。

    b1 <- kde2d(data1$x1,data1$y1,lims = c(xbnds,ybnds))
    b2 <- kde2d(data2$x2,data2$y2,lims = c(xbnds,ybnds))
    

    然后,我们可以得到两个数据集的核密度估计的两个向量,然后通过除以估计密度的每个向量之和对结果进行归一化。最后,我们可以应用 KL 散度来量化分布的相似性。

    z1 <- as.vector(b1$z)
    z2 <- as.vector(b2$z)
    z1 <- mapply("/",z1,0.01509942)
    z2 <- mapply("/",z2,0.01513236)
    kullback.leibler(z1, z2)
    

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 1970-01-01
      • 2021-04-12
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      相关资源
      最近更新 更多