首页 > 解决方案 > 设置 ewcdf {spatstat} [R] 的权重

问题描述

我想将参考分布与使用 Kolmogorov-Smirnov 距离按比例绘制d_1的样本进行比较。d_2w_1

鉴于这d_2是加权的,我正在考虑使用 R 中的加权经验累积分布函数(使用ewcdf {spatstat})来解决这个问题。

下面的例子表明我可能没有指定权重,因为当lenght(d_1) == lenght(d_2)Kolmogorov-Smirnov 没有给出 0 值时。

有人可以帮我弄这个吗?为清楚起见,请参阅下面的可重现示例。

#loop for testing sample sizes 1:length(d_1)
d_stat <- data.frame(1:1000, rep(NA, 1000))
names(d_stat) <- c("sample_size", "ks_distance")

for (i in 1:1000) {

#reference distribution
d_1 <- rpois(1000, 500)
w_1 <- d_1/sum(d_1)
m_1 <- data.frame(d_1, w_1)

#sample from the reference distribution
m_2 <-m_1[(sample(nrow(m_1), size=i, prob=w_1, replace=F)),]
d_2 <- m_2$d_1
w_2 <- m_2$w_1

#ewcdf for the reference distribution and the sample
f_d_1 <- ewcdf(d_1)
f_d_2 <- ewcdf(d_2, 1/w_2, normalise=F, adjust=1/length(d_2))

#kolmogorov-smirnov distance
d_stat[i,2] <- max(abs(f_d_1(d_2) - f_d_2(d_2)))
}

d_stat[1000,2]

标签: rspatstatecdfkolmogorov-smirnov

解决方案


我不太明白你想在这里做什么。为什么你会期望ewcdf(d_1)ewcdf(d_2, w_2, normalise=F)给出相同的结果i=1000?第一个是通常的 ecdf,它在输入向量的唯一值处跳转,跳转大小由重复值的次数决定(更多的联系 - 更大的跳转)。第二个以相同的唯一值跳跃,高度由您提供的重量总和决定。

给出相同结果的是and ewcdf(d_2, w_2)ewcdf(d_1, w_1)但这与不同ewcdf(d_1)。为了理解为什么后两者不同,我建议一个小得多的手工示例,上面有几个领带:

library(spatstat)
#> Loading required package: spatstat.data
#> Loading required package: nlme
#> Loading required package: rpart
#> 
#> spatstat 1.60-1.006       (nickname: 'See Above') 
#> For an introduction to spatstat, type 'beginner'
x <- c(1,2,3,3,4)
e <- ewcdf(x)

这是通常的 ecdf,在 x=1 时以 1/5 的值跳跃,在 x=2 时以 1/5 跳跃,在 x=3 时以 2*1/5 跳跃,在 x=4 时以 1/5 跳跃:

plot(e)

现在您将权重定义为:

w <- x/sum(x)
w
#> [1] 0.07692308 0.15384615 0.23076923 0.23076923 0.30769231

因此,ewcdf 将在 x=1 时以 1/13 的值跳跃,在 x=2 时以 2/13 跳跃,在 x=3 时以 2*3/13 跳跃,在 x=4 时以 4/13 跳跃(通常的 ecdf 以红色覆盖):

plot(ewcdf(x, w, normalise = FALSE), axes = FALSE)
axis(1)
axis(2, at = (0:13)/13, labels = c("0", paste(1:13, 13, sep = "/")), las = 2 )
abline(h = cumsum(c(1,2,6,4)/13), lty = 3, col = "gray")
plot(e, add = TRUE, col = "red")


推荐阅读