Skip to content

Commit 3cc6fb4

Browse files
committed
Several bugfixes
1 parent 13bb4cd commit 3cc6fb4

File tree

4 files changed

+15
-17
lines changed

4 files changed

+15
-17
lines changed

src/DynamicFactorModels.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ using Logging
4242
using StatsAPI: aic, aicc, bic
4343

4444
import Statistics: mean, var, cov
45-
import StatsAPI: params, params!, fit!, loglikelihood, dof, nobs
45+
import StatsAPI: fit!, loglikelihood, dof, nobs
4646
import ProximalOperators: prox!
4747

4848
export

src/fit/utilities.jl

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ function init!(ε::SpatialMovingAverage, method::Symbol, ξ::AbstractMatrix)
194194
return nothing
195195
end
196196

197-
function params(model::DynamicFactorModel)
197+
function get_params(model::DynamicFactorModel)
198198
n = size(data(model), 1)
199199
R = nfactors(model)
200200

@@ -210,12 +210,12 @@ function params(model::DynamicFactorModel)
210210

211211
# parameters
212212
θ = zeros(n_params)
213-
params!(θ, model)
213+
get_params!(θ, model)
214214

215215
return θ
216216
end
217217

218-
function params!::AbstractVector, model::DynamicFactorModel)
218+
function get_params!::AbstractVector, model::DynamicFactorModel)
219219
idx = 1
220220

221221
# loadings
@@ -284,7 +284,7 @@ function params!(θ::AbstractVector, model::DynamicFactorModel)
284284

285285
return nothing
286286
end
287-
function params!(model::DynamicFactorModel, θ::AbstractVector)
287+
function set_params!(model::DynamicFactorModel, θ::AbstractVector)
288288
idx = 1
289289

290290
# loadings
@@ -310,8 +310,7 @@ function params!(model::DynamicFactorModel, θ::AbstractVector)
310310
idx += offset
311311
# variance
312312
offset = length(cov(process(model)))
313-
vec(cov(process(model)).mat) .= view(θ, idx:(idx + offset - 1))
314-
cov(process(model)).chol.factors .= cholesky(Hermitian(cov(process(model)).mat)).factors
313+
vec(cov(process(model)).data) .= view(θ, idx:(idx + offset - 1))
315314
idx += offset
316315
elseif process(model) isa UnrestrictedUnitRoot
317316
# variance
@@ -325,8 +324,7 @@ function params!(model::DynamicFactorModel, θ::AbstractVector)
325324
idx += offset
326325
# variance
327326
offset = length(cov(process(model)))
328-
vec(cov(process(model)).mat) .= view(θ, idx:(idx + offset - 1))
329-
cov(process(model)).chol.factors .= cholesky(Hermitian(cov(process(model)).mat)).factors
327+
vec(cov(process(model)).data) .= view(θ, idx:(idx + offset - 1))
330328
idx += offset
331329
elseif process(model) isa NelsonSiegelUnitRoot
332330
# variance

src/interface.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,15 +370,15 @@ function model_tuning_cv!(model::DynamicFactorModel, space::Dict, regularizer::F
370370

371371
# fit on train sample
372372
fit!(train_model, regularizer = regularizer(params))
373-
θ = params(train_model)
373+
θ = get_params(train_model)
374374

375375
# evaluate on test samples
376376
loss = zero(eltype(data(model)))
377377
for (t, test_model) in pairs(test_models)
378378
# out-of-sample data
379379
y = view(data(model), :, (Ttrain + t):(Ttrain + t + periods - 1))
380380
# loss
381-
params!(test_model, θ)
381+
set_params!(test_model, θ)
382382
loss += sum(loss_function, y - forecast(test_model, periods))
383383
end
384384

@@ -415,7 +415,7 @@ function forecast(model::DynamicFactorModel, periods::Integer)
415415
# filter
416416
(a, _, _, _) = filter(model, predict = true)
417417
a_hat = similar(a[end])
418-
forecasts = similar(data(model), size(model)[1], periods)
418+
forecasts = similar(data(model), size(data(model), 1), periods)
419419

420420
# forecast mean
421421
μ_hat = forecast(mean(model), periods)

src/utilities.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ end
3838
Select a sample `sample` of the data from the dynamic factor process `F`.
3939
"""
4040
function select_sample(F::UnrestrictedStationaryIdentified, sample::AbstractUnitRange)
41-
UnrestrictedStationary((size(loadings(F), 1), length(sample), size(F)),
41+
UnrestrictedStationary((size(loadings(F), 1), length(sample), nfactors(F)),
4242
dependence = :identified, type = eltype(factors(F)))
4343
end
4444
function select_sample(F::UnrestrictedStationaryFull, sample::AbstractUnitRange)
45-
UnrestrictedStationary((size(loadings(F), 1), length(sample), size(F)),
45+
UnrestrictedStationary((size(loadings(F), 1), length(sample), nfactors(F)),
4646
dependence = :full, type = eltype(factors(F)))
4747
end
4848
function select_sample(F::UnrestrictedUnitRoot, sample::AbstractUnitRange)
49-
UnrestrictedUnitRoot((size(loadings(F), 1), length(sample), size(F)),
49+
UnrestrictedUnitRoot((size(loadings(F), 1), length(sample), nfactors(F)),
5050
type = eltype(factors(F)))
5151
end
5252
function select_sample(F::NelsonSiegelStationary, sample::AbstractUnitRange)
@@ -63,7 +63,7 @@ Simulate the dynamic factors from the dynamic factor process `F` `S` times using
6363
number generator `rng`.
6464
"""
6565
function simulate(F::AbstractFactorProcess, S::Integer; rng::AbstractRNG = Xoshiro())
66-
R = size(loadings(F), 2)
66+
R = nfactors(F)
6767
f = similar(factors(F), R, S)
6868
dist = MvNormal(cov(F))
6969
for (s, fs) in pairs(eachcol(f))
@@ -186,7 +186,7 @@ function filter(model::DynamicFactorModel; predict::Bool = false)
186186
F = similar(y, typeof(P1))
187187

188188
# initialize storage
189-
ZtFinv = similar(P1)
189+
ZtFinv = similar(Z')
190190
att = similar(a1)
191191
Ptt = similar(P1)
192192

0 commit comments

Comments
 (0)