⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sixlin.pro

📁 basic median filter simulation
💻 PRO
字号:
pro sixlin,xx,yy,a,siga,b,sigb,weight=weight;+; NAME:;       SIXLIN; PURPOSE:;       Compute linear regression coefficients by six different methods.; EXPLANATION:;       Adapted from the FORTRAN program (Rev. 1.1)  supplied by Isobe, ;       Feigelson, Akritas, and Babu Ap. J. Vol. 364, p. 104 (1990).   ;       Suggested when there is no understanding about the nature of the ;       scatter about a linear relation, and NOT when the errors in the ;       variable are calculable.;; CALLING SEQUENCE:;       SIXLIN, xx, yy, a, siga, b, sigb, [WEIGHT = ]  ;; INPUTS:;       XX - vector of X values;       YY - vector of Y values, same number of elements as XX;; OUTPUTS:;       A - Vector of 6 Y intercept coefficients;       SIGA - Vector of standard deviations of 6 Y intercepts;       B - Vector of 6 slope coefficients;       SIGB - Vector of standard deviations of slope coefficients;;       The output variables are computed using linear regression for each of ;       the following 6 cases:;               (0) Ordinary Least Squares (OLS) Y vs. X (c.f. linfit.pro);               (1) Ordinary Least Squares  X vs. Y;               (2) Ordinary Least Squares Bisector;               (3) Orthogonal Reduced Major Axis;               (4) Reduced Major-Axis ;               (5) Mean ordinary Least Squares;; OPTIONAL INPUT KEYWORD:;      WEIGHT -  vector of weights, same number of elements as XX and YY;                For 1 sigma Gausssian errors, the weights are 1/sigma^2 but;                the weight vector can be more general.   Default is no ;                weighting. ; NOTES:;       Isobe et al. make the following recommendations;;       (1) If the different linear regression methods yield similar results;               then quoting OLS(Y|X) is probably the most familiar.;;       (2) If the linear relation is to be used to predict Y vs. X then;               OLS(Y|X) should be used.   ;;       (3) If the goal is to determine the functional relationship between;               X and Y then the OLS bisector is recommended.;; REVISION HISTORY:;       Written   Wayne Landsman          February, 1991         ;       Corrected sigma calculations      February, 1992;       Converted to IDL V5.0   W. Landsman   September 1997;       Added WEIGHT keyword   J. Moustakas   Februrary 2007;- compile_opt idl2 On_error, 2                                   ;Return to Caller if N_params() LT 5 then begin       print,'Syntax - SIXLIN, xx, yy, a, siga, b, sigb, {WEIGHT =]'       return  endif b = dblarr(6) &  siga = b & sigb =b x = double(xx)      ;Keep input X and Y vectors unmodified y = double(yy) rn = N_elements(x) if rn LT 2 then $    message,'Input X and Y vectors must contain at least 2 data points' if rn NE N_elements(y) then $    message,'Input X and Y vectors must contain equal number of data points' if (n_elements(weight) eq 0L) then weight = replicate(1.0,rn) else begin    if (rn ne n_elements(weight)) then $      message,'Input X and WEIGHT vectors must contain equal number of data points' endelse ; Compute averages and sums sumw = total(weight)   xavg = total( weight * x)/sumw yavg = total( weight * y)/sumw x = x - xavg y = y - yavg sxx = total( weight * x^2) syy = total( weight * y^2) sxy = total( weight * x*y) if sxy EQ 0. then $      message,'SXY is zero, SIXLIN is terminated' if sxy LT 0. then sign = -1.0 else sign = 1.0; Compute the slope coefficients b[0] = sxy / sxx b[1] = syy / sxy b[2] = (b[0]*b[1] - 1.D + sqrt((1.D + b[0]^2)*(1.D +b[1]^2)))/(b[0] + b[1] ) b[3] = 0.5 * ( b[1] - 1.D/b[0] + sign*sqrt(4.0D + (b[1]-1.0/b[0])^2)) b[4] = sign*sqrt( b[0]*b[1] ) b[5] = 0.5 * ( b[0] + b[1] ); Compute Intercept Coefficients a = yavg - b*xavg;  Prepare for computation of variances gam1 = b[2] / ( (b[0] + b[1]) *   $         sqrt( (1.D + b[0]^2)*(1.D + b[1]^2)) ) gam2 = b[3] / (sqrt( 4.D*b[0]^2 + ( b[0]*b[1] - 1.D)^2)) sum1 = total( weight * ( x*( y - b[0]*x ) )^2) sum2 = total( weight * ( y*( y - b[1]*x ) )^2) sum3 = total( weight * x * y * ( y - b[0]*x) * (y - b[1]*x ) ) cov = sum3 / ( b[0]*sxx^2 ); Compute variances of the slope coefficients sigb[0] = sum1 / sxx^2 sigb[1] = sum2 / sxy^2 sigb[2] = (gam1^2) * ( ( (1.D + b[1]^2) ^2 )*sigb[0] +  $                  2.D*(1.D + b[0]^2) * (1.D + b[1]^2)*cov + $                  (  (1.D + b[0]^2)^2)*sigb[1] ) sigb[3] = (gam2^2)*( sigb[0]/b[0]^2 + 2.D*cov + b[0]^2*sigb[1] ) sigb[4] = 0.25*(b[1]*sigb[1]/b[1] + $                     2.D*cov + b[0]*sigb[1]/b[1] ) sigb[5] = 0.25*(sigb[0] + 2.D*cov + sigb[1] ); Compute variances of the intercept coefficients siga[0] = total( weight * ( ( y - b[0]*x) * (1.D - sumw*xavg*x/sxx) )^2 ) siga[1] = total( weight * ( ( y - b[1]*x) * (1.D - sumw*xavg*y/sxy) )^2 )  siga[2] = total( weight * ( (x * (y - b[0]*x) * (1.D + b[1]^2) / sxx + $                  y * (y - b[1]*x) * (1.D + b[0]^2) / sxy)*  $                  gam1 * xavg * sumw - y + b[2] * x) ^ 2) siga[3] = total( weight * ( ( x * ( y - b[0]*x) / sxx + $                   y * ( y - b[1]*x) * b[0]^2/ sxy) * gam2 * $                   xavg * sumw / sqrt( b[0]^2) - y + b[3]*x) ^ 2 ) siga[4] = total( weight * ( ( x * ( y - b[0] * x) * sqrt( b[1] / b[0] ) / sxx + $                   y * ( y - b[1] * x) * sqrt( b[0] / b[1] ) / sxy) * $                  0.5 * sumw * xavg - y + b[4] * x)^2 ) siga[5] = total( weight * ( (x * ( y - b[0] * x) / sxx +  $                  y * ( y - b[1] * x) / sxy)*    $                  0.5 * sumw * xavg - y + b[5]*x )^2 ); Convert variances to standard deviation sigb = sqrt(sigb) siga = sqrt(siga)/sumw  return end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -