Skip to content

Commit e607229

Browse files
committed
add more test for robust hat matrix based regression estimator
1 parent 4a2bcf8 commit e607229

3 files changed

Lines changed: 66 additions & 25 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# v0.11.5 (Upcoming Release)
22

33
- Initial implementation of the robust hat matrix regression estimator
4+
- Add more test to robust hat matrix regression estimator
45
- Introduce `view` in LTS and LMS.
56

7+
68
# v0.11.4
79

810
- More explicit return types, drop `Dict` with `Dict{String, Any}` or `Dict{String, Vector}`

src/robhatreg.jl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,12 @@ function m(mat::AbstractMatrix{T}, u::AbstractVector{T})::AbstractMatrix where {
2525
for i in 1:L
2626
y[i, 1] = u[i]
2727
end
28-
result = m(mat, y)
29-
return result
28+
return m(mat, y)
3029
end
3130

3231
function m(m1::AbstractMatrix{T}, m2::AbstractMatrix{T})::AbstractMatrix where {T<:Real}
33-
n1, _ = size(m1)
34-
_, p2 = size(m2)
32+
n1 = size(m1, 1)
33+
p2 = size(m2, 2)
3534
newmat = zeros(Float64, n1, p2)
3635
for i in 1:n1
3736
for j in 1:p2

test/testrobhatreg.jl

Lines changed: 61 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,74 @@
11

2+
@testset "Robust Hat Matrix based Robust Regression" verbose = true begin
23

3-
@testset "Robust Hat Matrix based Robust Regression" begin
4-
# Create simple data
5-
rng = MersenneTwister(12345)
6-
n = 50
7-
x = collect(1:n)
8-
e = randn(rng, n) .* 2.0
9-
y = 5 .+ 5 .* x .+ e
4+
@testset "Random data" begin
5+
# Create simple data
6+
rng = MersenneTwister(12345)
7+
n = 50
8+
x = collect(1:n)
9+
e = randn(rng, n) .* 2.0
10+
y = 5 .+ 5 .* x .+ e
1011

11-
# Contaminate some values
12-
y[n] = y[n] * 2.0
13-
y[n-1] = y[n-1] * 2.0
14-
y[n-2] = y[n-2] * 2.0
15-
y[n-3] = y[n-3] * 2.0
16-
y[n-4] = y[n-4] * 2.0
12+
# Contaminate some values
13+
y[n] = y[n] * 2.0
14+
y[n-1] = y[n-1] * 2.0
15+
y[n-2] = y[n-2] * 2.0
16+
y[n-3] = y[n-3] * 2.0
17+
y[n-4] = y[n-4] * 2.0
1718

18-
df = DataFrame(x=x, y=y)
19+
df = DataFrame(x=x, y=y)
1920

20-
reg = createRegressionSetting(@formula(y ~ x), df)
21-
result = robhatreg(reg)
21+
reg = createRegressionSetting(@formula(y ~ x), df)
22+
result = robhatreg(reg)
2223

23-
betas = result["betas"]
24+
betas = result["betas"]
2425

25-
atol = 1.0
26+
atol = 1.0
2627

27-
@test isapprox(betas[1], 5.0, atol=atol)
28-
@test isapprox(betas[2], 5.0, atol=atol)
29-
end
28+
@test isapprox(betas[1], 5.0, atol=atol)
29+
@test isapprox(betas[2], 5.0, atol=atol)
30+
end
31+
32+
@testset "Phone data" begin
33+
df = phones
34+
reg = createRegressionSetting(@formula(calls ~ year), df)
35+
result = robhatreg(reg)
36+
37+
betas = result["betas"]
38+
39+
atol = 0.001
3040

41+
@test isapprox(betas[1], -54.967349441923226, atol=atol)
42+
@test isapprox(betas[2], 1.1406353489513064, atol=atol)
43+
end
3144

45+
@testset "Large Data" begin
46+
X = randn(10000, 10)
47+
y = randn(10000)
3248

49+
result = robhatreg(X, y)
3350

51+
betas = result["betas"]
52+
53+
atol = 0.1
54+
55+
for i in 1:10
56+
@test isapprox(betas[i], 0.0, atol=atol)
57+
end
58+
end
59+
60+
@testset "Single Y outlier" begin
61+
@testset "LAD - Algorithm - Exact" begin
62+
df2 = DataFrame(
63+
x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
64+
y=[2, 4, 6, 8, 10, 12, 14, 16, 18, 1000],
65+
)
66+
reg2 = createRegressionSetting(@formula(y ~ x), df2)
67+
result2 = lad(reg2)
68+
betas2 = result2["betas"]
69+
@test betas2[1] == 0.0
70+
@test betas2[2] == 2.0
71+
end
72+
end
73+
end
3474

0 commit comments

Comments
 (0)