Skip to content

Commit 891a3ce

Browse files
authored
use prefix sums in estimators (#11)
* refactor: use prefix sums in scalar estimators * refactor: use shared prefix sums in vector estimators
1 parent 5b2d305 commit 891a3ce

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

src/estimation.jl

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,23 @@ function estimators(
2222

2323
Z_T = sum(X; dims=2)
2424
∑X = sum(X; dims=1)
25+
cs_∑X = cumsum(vec(∑X))
2526
Z̄_T = mean(Z_T)
2627
= Z̄_T / T
2728
= (N) * (T + 1) * T^(-3) * (mean(Z_T .^ 2) - T / (T + 1) * (Z̄_T + Z̄_T^2))
2829
= 0.0
2930
for iter in 1:div(T, Δ)
30-
+= (N) / T * (sum(∑X[(1 + (iter - 1) * Δ):(iter * Δ)]) / (N) - Δ * m̂)^2
31+
lo = 1 + (iter - 1) * Δ
32+
hi = iter * Δ
33+
block_sum = lo == 1 ? cs_∑X[hi] : cs_∑X[hi] - cs_∑X[lo - 1]
34+
+= (N) / T * (block_sum / (N) - Δ * m̂)^2
3135
end
3236
W2Δ = 0.0
3337
for iter in 1:div(T, 2 * Δ)
34-
W2Δ +=
35-
(N) / T *
36-
(sum(∑X[(1 + (iter - 1) * 2 * Δ):(iter * 2 * Δ)]) / (N) - 2 * Δ * m̂)^2
38+
lo = 1 + (iter - 1) * 2 * Δ
39+
hi = iter * 2 * Δ
40+
block_sum = lo == 1 ? cs_∑X[hi] : cs_∑X[hi] - cs_∑X[lo - 1]
41+
W2Δ += (N) / T * (block_sum / (N) - 2 * Δ * m̂)^2
3742
end
3843
= 2 * W2Δ -
3944

@@ -52,6 +57,7 @@ function estimators(
5257

5358
Z_T = sum(X; dims=2)
5459
∑X = sum(X; dims=1)
60+
cs_∑X = cumsum(vec(∑X))
5561
Z̄_T = mean(Z_T)
5662
= Z̄_T / T
5763
= (N) * (T + 1) * T^(-3) * (mean(Z_T .^ 2) - T / (T + 1) * (Z̄_T + Z̄_T^2))
@@ -62,13 +68,17 @@ function estimators(
6268
end
6369
= 0.0
6470
for iter in 1:div(T, Δ)
65-
+= (N) / T * (sum(∑X[(1 + (iter - 1) * Δ):(iter * Δ)]) / (N) - Δ * m̂)^2
71+
lo = 1 + (iter - 1) * Δ
72+
hi = iter * Δ
73+
block_sum = lo == 1 ? cs_∑X[hi] : cs_∑X[hi] - cs_∑X[lo - 1]
74+
+= (N) / T * (block_sum / (N) - Δ * m̂)^2
6675
end
6776
W2Δ = 0.0
6877
for iter in 1:div(T, 2 * Δ)
69-
W2Δ +=
70-
(N) / T *
71-
(sum(∑X[(1 + (iter - 1) * 2 * Δ):(iter * 2 * Δ)]) / (N) - 2 * Δ * m̂)^2
78+
lo = 1 + (iter - 1) * 2 * Δ
79+
hi = iter * 2 * Δ
80+
block_sum = lo == 1 ? cs_∑X[hi] : cs_∑X[hi] - cs_∑X[lo - 1]
81+
W2Δ += (N) / T * (block_sum / (N) - 2 * Δ * m̂)^2
7282
end
7383
push!(ŵ, 2 * W2Δ - WΔ)
7484
end

0 commit comments

Comments
 (0)