1
1
# Store both grid and density for KDE over the real line
2
- mutable struct UnivariateKDE{R<: Range } <: AbstractKDE
2
+ mutable struct UnivariateKDE{R<: AbstractRange } <: AbstractKDE
3
3
x:: R
4
4
density:: Vector{Float64}
5
5
end
@@ -80,7 +80,7 @@ const Weights = Union{UniformWeights, RealVector, StatsBase.Weights}
80
80
81
81
82
82
# tabulate data for kde
83
- function tabulate (data:: RealVector , midpoints:: Range , weights:: Weights = default_weights (data))
83
+ function tabulate (data:: RealVector , midpoints:: R , weights:: Weights = default_weights (data)) where R <: AbstractRange
84
84
npoints = length (midpoints)
85
85
s = step (midpoints)
86
86
@@ -131,7 +131,7 @@ function conv(k::UnivariateKDE, dist::UnivariateDistribution)
131
131
end
132
132
133
133
# main kde interface methods
134
- function kde (data:: RealVector , weights:: Weights , midpoints:: Range , dist:: UnivariateDistribution )
134
+ function kde (data:: RealVector , weights:: Weights , midpoints:: R , dist:: UnivariateDistribution ) where R <: AbstractRange
135
135
k = tabulate (data, midpoints, weights)
136
136
conv (k,dist)
137
137
end
@@ -143,8 +143,8 @@ function kde(data::RealVector, dist::UnivariateDistribution;
143
143
kde (data,weights,midpoints,dist)
144
144
end
145
145
146
- function kde (data:: RealVector , midpoints:: Range ;
147
- bandwidth= default_bandwidth (data), kernel= Normal, weights= default_weights (data))
146
+ function kde (data:: RealVector , midpoints:: R ;
147
+ bandwidth= default_bandwidth (data), kernel= Normal, weights= default_weights (data)) where R <: AbstractRange
148
148
bandwidth > 0.0 || error (" Bandwidth must be positive" )
149
149
dist = kernel_dist (kernel,bandwidth)
150
150
kde (data,weights,midpoints,dist)
@@ -162,10 +162,10 @@ end
162
162
# B. W. Silverman (1986)
163
163
# sections 3.4.3 (pp. 48-52) and 3.5 (pp. 61-66)
164
164
165
- function kde_lscv (data:: RealVector , midpoints:: Range ;
165
+ function kde_lscv (data:: RealVector , midpoints:: R ;
166
166
kernel= Normal,
167
167
bandwidth_range:: Tuple{Real,Real} = (h= default_bandwidth (data); (0.25 * h,1.5 * h)),
168
- weights= default_weights (data))
168
+ weights= default_weights (data)) where R <: AbstractRange
169
169
170
170
ndata = length (data)
171
171
k = tabulate (data, midpoints, weights)
0 commit comments