89 MODULE PROCEDURE standard_score_sp, standard_score_dp
166 MODULE PROCEDURE classified_standard_score_sp, classified_standard_score_dp
178 FUNCTION standard_score_sp(data, mask)
184 real(sp),
dimension(:),
intent(in) :: data
185 logical,
dimension(:),
optional,
intent(in) :: mask
186 real(sp),
dimension(size(data, dim = 1)) :: standard_score_sp
189 logical,
dimension(size(data, dim = 1)) :: maske
192 if (
present(mask))
then
193 if (
size(mask) .ne.
size(data)) stop .ne.
'***Error: standard_score_sp: size(mask) size(data)'
200 if (count(maske) .LE. 2) stop
'***Error: standard_score_sp: less than 2 elements avaiable'
202 standard_score_sp = (
data(:) -
average(
data, mask = maske)) /
stddev(
data, mask = maske)
204 END FUNCTION standard_score_sp
207 FUNCTION standard_score_dp(data, mask)
213 real(dp),
dimension(:),
intent(in) :: data
214 logical,
dimension(:),
optional,
intent(in) :: mask
215 real(dp),
dimension(size(data, dim = 1)) :: standard_score_dp
218 logical,
dimension(size(data, dim = 1)) :: maske
221 if (
present(mask))
then
222 if (
size(mask) .ne.
size(data)) stop .ne.
'***Error: standard_score_dp: size(mask) size(data)'
229 if (count(maske) .LE. 2) stop
'***Error: standard_score_dp: less than 2 elements avaiable'
231 standard_score_dp = (
data(:) -
average(
data, mask = maske)) /
stddev(
data, mask = maske)
233 END FUNCTION standard_score_dp
237 FUNCTION classified_standard_score_sp(data, classes, mask)
244 real(sp),
dimension(:),
intent(in) :: data
245 integer,
dimension(:),
intent(in) :: classes
246 logical,
dimension(:),
optional,
intent(in) :: mask
247 real(sp),
dimension(size(data, dim = 1)) :: classified_standard_score_sp
250 integer(i4) :: iclass, ielem
251 integer(i4) :: number_of_classes
253 integer(i4),
dimension(size(data, dim = 1)) :: unique_classes
254 real(sp) :: class_mean
255 real(sp) :: class_stddev
256 logical,
dimension(size(data, dim = 1)) :: maske
257 logical,
dimension(size(data, dim = 1)) :: mask_class_maske
261 if (
present(mask))
then
262 if (
size(mask) .ne.
size(data)) stop .ne.
'***Error: classified_standard_score_sp: size(mask) size(data)'
269 if (count(maske) .LE. 2) stop
'***Error: classified_standard_score_sp: less than 2 elements avaiable'
272 classified_standard_score_sp = 0.0_sp
275 unique_classes = classes
276 call unista(unique_classes, number_of_classes)
280 do iclass = 1, number_of_classes
282 mask_class_maske = (maske .AND. (classes==unique_classes(iclass)))
283 class_mean =
average(
data, mask = mask_class_maske)
284 class_stddev =
stddev(
data, mask = mask_class_maske)
286 do ielem = 1,
size(
data, dim = 1)
287 if (.NOT. mask_class_maske(ielem)) cycle
288 classified_standard_score_sp(ielem) = (
data(ielem) - class_mean) / class_stddev
292 END FUNCTION classified_standard_score_sp
295 FUNCTION classified_standard_score_dp(data, classes, mask)
302 real(dp),
dimension(:),
intent(in) :: data
303 integer,
dimension(:),
intent(in) :: classes
304 logical,
dimension(:),
optional,
intent(in) :: mask
305 real(dp),
dimension(size(data, dim = 1)) :: classified_standard_score_dp
308 integer(i4) :: iclass, ielem
309 integer(i4) :: number_of_classes
310 integer(i4),
dimension(size(data, dim = 1)) :: unique_classes
311 real(dp) :: class_mean
312 real(dp) :: class_stddev
313 logical,
dimension(size(data, dim = 1)) :: maske
314 logical,
dimension(size(data, dim = 1)) :: mask_class_maske
317 if (
present(mask))
then
318 if (
size(mask) .ne.
size(data)) stop .ne.
'***Error: classified_standard_score_dp: size(mask) size(data)'
325 if (count(maske) .LE. 2) stop
'***Error: classified_standard_score_dp: less than 2 elements avaiable'
328 classified_standard_score_dp = 0.0_dp
331 unique_classes = classes
332 call unista(unique_classes, number_of_classes)
336 do iclass = 1, number_of_classes
338 mask_class_maske = (maske .AND. (classes==unique_classes(iclass)))
339 class_mean =
average(
data, mask = mask_class_maske)
340 class_stddev =
stddev(
data, mask = mask_class_maske)
342 do ielem = 1,
size(
data, dim = 1)
343 if (.NOT. mask_class_maske(ielem)) cycle
344 classified_standard_score_dp(ielem) = (
data(ielem) - class_mean) / class_stddev
348 END FUNCTION classified_standard_score_dp
Standard deviation of a vector.
Merge-sort unique inverse ranking.
Calculates the classified standard score (e.g. classes are months).
Calculates the standard score / normalization (anomaly) / z-score.
Define number representations.
integer, parameter sp
Single Precision Real Kind.
integer, parameter i4
4 Byte Integer Kind
integer, parameter dp
Double Precision Real Kind.
Sort and ranking routines.
Routines for calculating the normalization (anomaly)/standard score/z score and the deseasonalized (s...