robust_sigma.pro
来自「basic median filter simulation」· PRO 代码 · 共 69 行
PRO
69 行
FUNCTION ROBUST_SIGMA,Y, ZERO=REF;;+; NAME:; ROBUST_SIGMA ;; PURPOSE:; Calculate a resistant estimate of the dispersion of a distribution.; EXPLANATION:; For an uncontaminated distribution, this is identical to the standard; deviation.;; CALLING SEQUENCE:; result = ROBUST_SIGMA( Y, [ /ZERO ] );; INPUT: ; Y = Vector of quantity for which the dispersion is to be calculated;; OPTIONAL INPUT KEYWORD:; /ZERO - if set, the dispersion is calculated w.r.t. 0.0 rather than the; central value of the vector. If Y is a vector of residuals, this; should be set.;; OUTPUT:; ROBUST_SIGMA returns the dispersion. In case of failure, returns ; value of -1.0;; PROCEDURE:; Use the median absolute deviation as the initial estimate, then weight ; points using Tukey's Biweight. See, for example, "Understanding Robust; and Exploratory Data Analysis," by Hoaglin, Mosteller and Tukey, John; Wiley & Sons, 1983.;; REVSION HISTORY: ; H. Freudenreich, STX, 8/90; Replace MED() call with MEDIAN(/EVEN) W. Landsman December 2001;;- EPS = 1.0E-20 IF KEYWORD_SET(REF) THEN Y0=0. ELSE Y0 = MEDIAN(Y,/EVEN); First, the median absolute deviation MAD about the median: MAD = MEDIAN( ABS(Y-Y0), /EVEN )/0.6745; If the MAD=0, try the MEAN absolute deviation: IF MAD LT EPS THEN MAD = AVG( ABS(Y-Y0) )/.80 IF MAD LT EPS THEN RETURN, 0.0; Now the biweighted value: U = (Y-Y0)/(6.*MAD) UU = U*U Q = WHERE(UU LE 1.0, COUNT) IF COUNT LT 3 THEN BEGIN PRINT,'ROBUST_SIGMA: This distribution is TOO WEIRD! Returning -1' SIGGMA = -1. RETURN,SIGGMA ENDIF NUMERATOR = TOTAL( (Y[Q]-Y0)^2 * (1-UU[Q])^4 ) N = N_ELEMENTS(Y) DEN1 = TOTAL( (1.-UU[Q])*(1.-5.*UU[Q]) ) SIGGMA = N*NUMERATOR/(DEN1*(DEN1-1.)) IF SIGGMA GT 0. THEN RETURN, SQRT(SIGGMA) ELSE RETURN, 0. END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?