@@ -74,6 +74,12 @@ function initkrig(model::KrigingModel, data)
74
74
ncon = nconstraints (model, nvar)
75
75
nrow = nobs * nvar + ncon
76
76
77
+ # make sure data is compatible with model
78
+ nfeat = ncol (data) - 1
79
+ if nfeat != nvar
80
+ throw (ArgumentError (" $nfeat data column(s) provided to $nvar -variate Kriging model" ))
81
+ end
82
+
77
83
# pre-allocate memory for LHS
78
84
LHS = Matrix {V} (undef, nrow, nrow)
79
85
@@ -168,10 +174,14 @@ end
168
174
169
175
predict (fitted:: FittedKriging , var:: AbstractString , gₒ) = predict (fitted, Symbol (var), gₒ)
170
176
177
+ predict (fitted:: FittedKriging , var:: Symbol , gₒ) = predict (fitted, (var,), gₒ) |> first
178
+
171
179
predict (fitted:: FittedKriging , vars, gₒ) = predictmean (fitted, weights (fitted, gₒ), vars)
172
180
173
181
predictprob (fitted:: FittedKriging , var:: AbstractString , gₒ) = predictprob (fitted, Symbol (var), gₒ)
174
182
183
+ predictprob (fitted:: FittedKriging , var:: Symbol , gₒ) = predictprob (fitted, (var,), gₒ) |> first
184
+
175
185
function predictprob (fitted:: FittedKriging , vars, gₒ)
176
186
w = weights (fitted, gₒ)
177
187
μ = predictmean (fitted, w, vars)
@@ -182,29 +192,15 @@ end
182
192
183
193
predictmean (fitted:: FittedKriging , weights:: KrigingWeights , vars) = krigmean (fitted, weights, vars)
184
194
185
- predictmean (fitted:: FittedKriging , weights:: KrigingWeights , var:: Symbol ) = first (predictmean (fitted, weights, (var,)))
186
-
187
195
function krigmean (fitted:: FittedKriging , weights:: KrigingWeights , vars)
188
196
d = fitted. state. data
189
197
λ = weights. λ
190
198
k = size (λ, 2 )
191
- n = length (vars)
192
-
193
- @assert (k == n || k == 1 ) " invalid number of variables for Kriging model"
194
199
195
200
cols = Tables. columns (values (d))
196
-
197
- if k == n
198
- @inbounds map (1 : k) do j
199
- sum (1 : n) do p
200
- λₚ = @view λ[p: k: end , j]
201
- zₚ = Tables. getcolumn (cols, vars[p])
202
- sum (i -> λₚ[i] ⦿ zₚ[i], eachindex (λₚ, zₚ))
203
- end
204
- end
205
- else # k == 1
206
- @inbounds map (1 : n) do p
207
- λₚ = @view λ[:, 1 ]
201
+ @inbounds map (1 : k) do j
202
+ sum (1 : k) do p
203
+ λₚ = @view λ[p: k: end , j]
208
204
zₚ = Tables. getcolumn (cols, vars[p])
209
205
sum (i -> λₚ[i] ⦿ zₚ[i], eachindex (λₚ, zₚ))
210
206
end
@@ -223,10 +219,7 @@ function predictvar(fitted::FittedKriging, weights::KrigingWeights, gₒ)
223
219
σ² = krigvar (fun, weights, RHS, gₒ)
224
220
225
221
# treat numerical issues
226
- σ²₊ = max .(zero (σ²), σ²)
227
-
228
- # treat scalar case
229
- length (σ²₊) == 1 ? first (σ²₊) : σ²₊
222
+ max .(zero (σ²), σ²)
230
223
end
231
224
232
225
krigvar (fun:: Variogram , weights:: KrigingWeights , RHS, gₒ) = covvar (fun, weights, RHS, gₒ)
0 commit comments