@@ -76,7 +76,7 @@ function tabulate(data::RealVector, weights::RealVector, midpoints::Range)
76
76
ainc = 1.0 / (sum (weights)* s* s)
77
77
78
78
# weighted discretization (cf. Jones and Lotwick)
79
- for x in data
79
+ for (i,x) in enumerate ( data)
80
80
k = searchsortedfirst (midpoints,x)
81
81
j = k- 1
82
82
if 1 <= j <= npoints- 1
@@ -122,31 +122,36 @@ function conv(k::UnivariateKDE, dist::UnivariateDistribution)
122
122
UnivariateKDE (k. x, dens)
123
123
end
124
124
125
+ function uniformweights (data)
126
+ n = length (data)
127
+ fill (1 / n, n)
128
+ end
129
+
125
130
# main kde interface methods
126
- function kde (data:: RealVector , midpoints:: Range , dist:: UnivariateDistribution )
127
- k = tabulate (data, midpoints)
131
+ function kde (data:: RealVector , weights :: RealVector , midpoints:: Range , dist:: UnivariateDistribution )
132
+ k = tabulate (data, weights, midpoints)
128
133
conv (k,dist)
129
134
end
130
135
131
136
function kde (data:: RealVector , dist:: UnivariateDistribution ;
132
- boundary:: (@compat Tuple{Real,Real}) = kde_boundary (data,std (dist)), npoints:: Int = 2048 )
137
+ boundary:: (@compat Tuple{Real,Real}) = kde_boundary (data,std (dist)), npoints:: Int = 2048 , weights = uniformweights (data) )
133
138
134
139
midpoints = kde_range (boundary,npoints)
135
- kde (data,midpoints,dist)
140
+ kde (data,weights, midpoints,dist)
136
141
end
137
142
138
143
function kde (data:: RealVector , midpoints:: Range ;
139
- bandwidth= default_bandwidth (data), kernel= Normal)
144
+ bandwidth= default_bandwidth (data), kernel= Normal, weights = uniformweights (data) )
140
145
bandwidth > 0.0 || error (" Bandwidth must be positive" )
141
146
dist = kernel_dist (kernel,bandwidth)
142
- kde (data,midpoints,dist)
147
+ kde (data,weights, midpoints,dist)
143
148
end
144
149
145
150
function kde (data:: RealVector ; bandwidth= default_bandwidth (data), kernel= Normal,
146
- npoints:: Int = 2048 , boundary:: (@compat Tuple{Real,Real}) = kde_boundary (data,bandwidth))
151
+ npoints:: Int = 2048 , boundary:: (@compat Tuple{Real,Real}) = kde_boundary (data,bandwidth), weights = uniformweights (data) )
147
152
bandwidth > 0.0 || error (" Bandwidth must be positive" )
148
153
dist = kernel_dist (kernel,bandwidth)
149
- kde (data,dist;boundary= boundary,npoints= npoints)
154
+ kde (data,dist;boundary= boundary,npoints= npoints,weights = weights )
150
155
end
151
156
152
157
# Select bandwidth using least-squares cross validation, from:
0 commit comments