为 ewcdf {spatstat} [R] 设置权重
Set weights for ewcdf {spatstat} [R]
我想使用 Kolmogorov–Smirnov 距离比较参考分布 d_1
与按大小 w_1
绘制的样本 d_2
。
鉴于 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]
我不太明白你想在这里做什么。
你为什么期望 ewcdf(d_1)
和 ewcdf(d_2, w_2, normalise=F)
给
i=1000
的结果相同?第一个是通常的 ecdf,它跳转到
输入向量的唯一值,其跳跃大小由
该值重复的次数(更多的联系 - 更大的跳跃)。第二
一个跳到相同的唯一值,其高度由以下总和决定
您提供的权重。
给出相同的结果是 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=2 时跳值 2*1/5
x=3 和 1/5 在 x=4:
plot(e)
现在您将权重定义为:
w <- x/sum(x)
w
#> [1] 0.07692308 0.15384615 0.23076923 0.23076923 0.30769231
因此 ewcdf 将以 1/13 at x=1, 2/13 at x=2, 2*3/13 at
x=3 和 4/13 at x=4(通常的 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")
您的代码会生成一些数据 d1
和相关的数字权重 w1
。然后将这些数据视为参考人群。该代码从这个值 d1
的总体中随机抽取 样本 d2
,抽样概率与相关权重 w1
成正比。从样本中,您可以计算采样值 d2
的加权经验分布函数 f_d_2
,权重与原始采样概率成反比。这个函数 f_d_2
是根据 Horvitz-Thompson 原理对原始人口分布函数的正确估计。但它并不完全等于原始人口分布,因为它是一个样本。 Kolmogorov-Smirnov 检验统计量不应为零;它应该是一个很小的值。
我想使用 Kolmogorov–Smirnov 距离比较参考分布 d_1
与按大小 w_1
绘制的样本 d_2
。
鉴于 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]
我不太明白你想在这里做什么。
你为什么期望 ewcdf(d_1)
和 ewcdf(d_2, w_2, normalise=F)
给
i=1000
的结果相同?第一个是通常的 ecdf,它跳转到
输入向量的唯一值,其跳跃大小由
该值重复的次数(更多的联系 - 更大的跳跃)。第二
一个跳到相同的唯一值,其高度由以下总和决定
您提供的权重。
给出相同的结果是 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=2 时跳值 2*1/5 x=3 和 1/5 在 x=4:
plot(e)
现在您将权重定义为:
w <- x/sum(x)
w
#> [1] 0.07692308 0.15384615 0.23076923 0.23076923 0.30769231
因此 ewcdf 将以 1/13 at x=1, 2/13 at x=2, 2*3/13 at x=3 和 4/13 at x=4(通常的 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")
您的代码会生成一些数据 d1
和相关的数字权重 w1
。然后将这些数据视为参考人群。该代码从这个值 d1
的总体中随机抽取 样本 d2
,抽样概率与相关权重 w1
成正比。从样本中,您可以计算采样值 d2
的加权经验分布函数 f_d_2
,权重与原始采样概率成反比。这个函数 f_d_2
是根据 Horvitz-Thompson 原理对原始人口分布函数的正确估计。但它并不完全等于原始人口分布,因为它是一个样本。 Kolmogorov-Smirnov 检验统计量不应为零;它应该是一个很小的值。