@@ -29,7 +29,7 @@ kernel_dist(::Type{D},w::Real) where {D} = (s = w/std(D(0.0,1.0)); D(0.0,s))
29
29
30
30
31
31
# Silverman's rule of thumb for KDE bandwidth selection
32
- function default_bandwidth (data:: RealVector , alpha:: Float64 = 0.9 )
32
+ function default_bandwidth (data:: AbstractVector{<:Real} , alpha:: Float64 = 0.9 )
33
33
# Determine length of data
34
34
ndata = length (data)
35
35
ndata <= 1 && return alpha
@@ -53,7 +53,7 @@ function default_bandwidth(data::RealVector, alpha::Float64 = 0.9)
53
53
return alpha * width * ndata^ (- 0.2 )
54
54
end
55
55
56
- function default_weights (data:: RealVector )
56
+ function default_weights (data:: AbstractVector{<:Real} )
57
57
UniformWeights (length (data))
58
58
end
59
59
72
72
73
73
# default kde range
74
74
# Should extend enough beyond the data range to avoid cyclic correlation from the FFT
75
- function kde_boundary (data:: RealVector , bandwidth:: Real )
75
+ function kde_boundary (data:: AbstractVector{<:Real} , bandwidth:: Real )
76
76
lo, hi = extrema (data)
77
77
lo - 4.0 * bandwidth, hi + 4.0 * bandwidth
78
78
end
@@ -92,11 +92,11 @@ UniformWeights(n) = UniformWeights{n}()
92
92
Base. sum (x:: UniformWeights ) = 1.
93
93
Base. getindex (x:: UniformWeights{N} , i) where {N} = 1 / N
94
94
95
- const Weights = Union{UniformWeights, RealVector , StatsBase. Weights}
95
+ const Weights = Union{UniformWeights, AbstractVector{ <: Real } , StatsBase. Weights}
96
96
97
97
98
98
# tabulate data for kde
99
- function tabulate (data:: RealVector , midpoints:: R , weights:: Weights = default_weights (data)) where R<: AbstractRange
99
+ function tabulate (data:: AbstractVector{<:Real} , midpoints:: R , weights:: Weights = default_weights (data)) where R<: AbstractRange
100
100
npoints = length (midpoints)
101
101
s = step (midpoints)
102
102
@@ -147,26 +147,26 @@ function conv(k::UnivariateKDE, dist::UnivariateDistribution)
147
147
end
148
148
149
149
# main kde interface methods
150
- function kde (data:: RealVector , weights:: Weights , midpoints:: R , dist:: UnivariateDistribution ) where R<: AbstractRange
150
+ function kde (data:: AbstractVector{<:Real} , weights:: Weights , midpoints:: R , dist:: UnivariateDistribution ) where R<: AbstractRange
151
151
k = tabulate (data, midpoints, weights)
152
152
conv (k,dist)
153
153
end
154
154
155
- function kde (data:: RealVector , dist:: UnivariateDistribution ;
155
+ function kde (data:: AbstractVector{<:Real} , dist:: UnivariateDistribution ;
156
156
boundary:: Tuple{Real,Real} = kde_boundary (data,std (dist)), npoints:: Int = 2048 , weights= default_weights (data))
157
157
158
158
midpoints = kde_range (boundary,npoints)
159
159
kde (data,weights,midpoints,dist)
160
160
end
161
161
162
- function kde (data:: RealVector , midpoints:: R ;
162
+ function kde (data:: AbstractVector{<:Real} , midpoints:: R ;
163
163
bandwidth= default_bandwidth (data), kernel= Normal, weights= default_weights (data)) where R<: AbstractRange
164
164
bandwidth > 0.0 || error (" Bandwidth must be positive" )
165
165
dist = kernel_dist (kernel,bandwidth)
166
166
kde (data,weights,midpoints,dist)
167
167
end
168
168
169
- function kde (data:: RealVector ; bandwidth= default_bandwidth (data), kernel= Normal,
169
+ function kde (data:: AbstractVector{<:Real} ; bandwidth= default_bandwidth (data), kernel= Normal,
170
170
npoints:: Int = 2048 , boundary:: Tuple{Real,Real} = kde_boundary (data,bandwidth), weights= default_weights (data))
171
171
bandwidth > 0.0 || error (" Bandwidth must be positive" )
172
172
dist = kernel_dist (kernel,bandwidth)
248
248
# B. W. Silverman (1986)
249
249
# sections 3.4.3 (pp. 48-52) and 3.5 (pp. 61-66)
250
250
251
- function kde_lscv (data:: RealVector , midpoints:: R ;
251
+ function kde_lscv (data:: AbstractVector{<:Real} , midpoints:: R ;
252
252
kernel= Normal,
253
253
bandwidth_range:: Tuple{Real,Real} = (h= default_bandwidth (data); (0.25 * h,1.5 * h)),
254
254
weights= default_weights (data)) where R<: AbstractRange
@@ -289,7 +289,7 @@ function kde_lscv(data::RealVector, midpoints::R;
289
289
UnivariateKDE (k. x, dens)
290
290
end
291
291
292
- function kde_lscv (data:: RealVector ;
292
+ function kde_lscv (data:: AbstractVector{<:Real} ;
293
293
boundary:: Tuple{Real,Real} = kde_boundary (data,default_bandwidth (data)),
294
294
npoints:: Int = 2048 ,
295
295
kernel= Normal,
0 commit comments