1
- function avar (k:: T , X:: AbstractMatrix{F} ; prewhite= false ) where {T<: HAC ,F<: AbstractFloat }
2
- if prewhite
3
- Z, D = fit_var (X)
4
- else
5
- Z = X
6
- end
1
+ function avar (k:: K , X:: AbstractMatrix{F} ; prewhite= false ) where {K<: HAC ,F<: Real }
2
+ Z, D = finalize_prewhite (X, Val (prewhite))
3
+ T, p = size (Z)
7
4
wlock = k. wlock[1 ]
8
5
setkernelweights! (k, X)
9
6
k. bw .= _optimalbandwidth (k, Z, prewhite)
10
7
k. wlock .= wlock
11
- idx = CovarianceMatrices. covindices (k, size (Z, 1 ))
12
- κ = [CovarianceMatrices. kernel (k, j ./ k. bw[1 ]) for j ∈ idx]
13
- V = zeros (F, size (Z, 2 ), size (Z, 2 ))
8
+ V = zeros (F, p, p)
14
9
Q = similar (V)
15
- kernelestimator! (V, Q, Z, κ)
16
- if prewhite
17
- v = inv (I - D' )
18
- return v * V * v'
19
- else
20
- return V
21
- end
10
+ kernelestimator! (k, V, Q, Z)
11
+ v = inv (one (F)* I - D' )
12
+ return v * V * v'
22
13
end
23
14
24
- function kernelestimator! (V, Q, Z, κ)
15
+ finalize_prewhite (X, :: Val{true} ) = fit_var (X)
16
+ finalize_prewhite (X, :: Val{false} ) = X, ZeroMat ()
17
+
18
+ struct ZeroMat end
19
+ Base.:- (J:: UniformScaling , Z:: ZeroMat ) = J
20
+ Base.:+ (J:: UniformScaling , Z:: ZeroMat ) = J
21
+ LinearAlgebra. adjoint (Z:: ZeroMat ) = Z
22
+
23
+ function kernelestimator! (k:: K , V:: AbstractMatrix{F} , Q, Z) where {K<: HAC , F<: Real }
25
24
# # V is the final variance
26
25
# # Q is the temporary matrix
27
26
# # Z is the data matrix
28
27
# # κ is the kernel vector
29
- T, k = size (Z)
28
+ T, _ = size (Z)
29
+ idx = covindices (k, T)
30
+ bw = convert (F, k. bw[1 ])
30
31
# # Calculate the variance at lag 0
31
32
mul! (Q, Z' , Z)
32
33
copy! (V, Q)
33
34
# # Calculate Γ₁, Γ₂, ..., Γⱼ
34
- @inbounds for j ∈ 1 : length (κ )
35
+ @inbounds for j ∈ eachindex (idx )
35
36
Zₜ = view (Z, 1 : (T - j), :)
36
37
Zₜ₊₁ = view (Z, (1 + j): T, :)
37
38
mul! (Q, Zₜ' , Zₜ₊₁)
38
- @. V += κ[j] * Q
39
- @. V += κ[j] * Q'
39
+ κ = kernel (k, j/ bw)
40
+ @. V += κ * Q
41
+ @. V += κ * Q'
40
42
end
41
43
return V ./ T
42
44
end
@@ -46,7 +48,7 @@ avarscaler(K::HAC, X; prewhite=false) = size(X, 1)
46
48
covindices (k:: T , n) where {T<: QuadraticSpectral } = 1 : n
47
49
covindices (k:: T , n) where {T<: Bartlett } = 1 : (floor (Int, k. bw[1 ]))
48
50
covindices (k:: HAC , n) = 1 : floor (Int, k. bw[1 ])
49
-
51
+ covindices (k :: T , n) where {T <: HR } = 1 : 0
50
52
# -----------------------------------------------------------------------------
51
53
# Kernels
52
54
# -----------------------------------------------------------------------------
198
200
# -----------------------------------------------------------------------------
199
201
# Fit function
200
202
# -----------------------------------------------------------------------------
201
- Base. @propagate_inbounds function fit_var (A:: AbstractMatrix{T} ) where {T}
203
+ Base. @propagate_inbounds function fit_var (A:: AbstractMatrix{T} ) where T
202
204
fi = firstindex (A, 1 )
203
205
li = lastindex (A, 1 )
204
206
Y = view (A, (fi + 1 ): li, :)
@@ -209,7 +211,7 @@ Base.@propagate_inbounds function fit_var(A::AbstractMatrix{T}) where {T}
209
211
end
210
212
211
213
212
- Base. @propagate_inbounds function fit_ar (Z:: AbstractMatrix{T} ) where {T}
214
+ Base. @propagate_inbounds function fit_ar (Z:: AbstractMatrix{T} ) where T
213
215
# # Estimate
214
216
# #
215
217
# # y_{t,j} = ρ y_{t-1,j} + ϵ
238
240
# -----------------------------------------------------------------------------
239
241
# Prewhiter
240
242
# -----------------------------------------------------------------------------
241
- function prewhiter (M:: AbstractMatrix{T} , prewhite:: Bool ) where {T<: AbstractFloat }
243
+ function prewhiter (M:: AbstractMatrix{T} , prewhite:: Bool ) where {T<: Real }
242
244
if prewhite
243
245
return fit_var (M)
244
246
else
0 commit comments