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

📄 stabcull.m

📁 Modeling and Forecasting Electricity Loads and Prices: A Statistical Approach" by Rafa&#322 Weron, p
💻 M
字号:
function [alpha,sigma,beta,mu]=stabcull(x)
%STABCULL Quantile parameter estimates of a stable distribution.
%	[ALPHA,SIGMA,BETA,MU]=STABCULL(X) returns the estimated (McCulloch's 
%   method) parameters ALPHA, SIGMA, BETA, MU of a stable distribution 
%   vector X.
%
%   Reference(s):
%	[1] J.H.McCulloch (1986) "Simple Consistent Estimators of Stable
%	Distribution Parameters", Commun. Statist. - Simul. 15(4) 1109-1136
%	[2] R.Weron (2004) "Computationally intensive Value at Risk 
%   calculations", in "Handbook of Computational Statistics: Concepts and 
%   Methods", eds. J.E. Gentle, W. Haerdle, Y. Mori, Springer, Berlin, 
%   911-950. 

%   Written by Szymon Borak and Rafal Weron (2000.12.15, rev. 2002.12.04)
%   Copyright (c) 2000-2006 by Rafal Weron

% Compute quantiles
x = sort(x);
x05 = prctile(x,5);
x25 = prctile(x,25);
x50 = prctile(x,50);
x75 = prctile(x,75);
x95 = prctile(x,95);

% Compute quantile statistics
va = (x95-x05)./(x75-x25);
vb = (x95+x05-2*x50)./(x95-x05);
vs = x75-x25;

% Define interpolation matrices (see [1])
tva = [2.439 2.5 2.6 2.7 2.8 3.0 3.2 3.5 4.0 5.0 6.0 8.0 10.0 15.0 25.0];
tvb = [0.0, 0.1, 0.2, 0.3, 0.5, 0.7, 1.0];
ta = [2.0 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1.0 0.9 0.8 0.7 0.6 0.5];
tb = [0.0, 0.25, 0.5, 0.75, 1.0];

psi1 = [2.000, 2.000, 2.000, 2.000, 2.000, 2.000, 2.000;
      1.916, 1.924, 1.924, 1.924, 1.924, 1.924, 1.924;
      1.808, 1.813, 1.829, 1.829, 1.829, 1.829, 1.829;
      1.729, 1.730, 1.737, 1.745, 1.745, 1.745, 1.745;
      1.664, 1.663, 1.663, 1.668, 1.676, 1.676, 1.676;
      1.563, 1.560, 1.553, 1.548, 1.547, 1.547, 1.547;
      1.484, 1.480, 1.471, 1.460, 1.448, 1.438, 1.438;
      1.391, 1.386, 1.378, 1.364, 1.337, 1.318, 1.318;
      1.279, 1.273, 1.266, 1.250, 1.210, 1.184, 1.150;
      1.128, 1.121, 1.114, 1.101, 1.067, 1.027, 0.973;
      1.029, 1.021, 1.014, 1.004, 0.974, 0.935, 0.874;
      0.896, 0.892, 0.887, 0.883, 0.855, 0.823, 0.769;
      0.818, 0.812, 0.806, 0.801, 0.780, 0.756, 0.691;
      0.698, 0.695, 0.692, 0.689, 0.676, 0.656, 0.595;
      0.593, 0.590, 0.588, 0.586, 0.579, 0.563, 0.513];

psi2 = [0.000, 2.160, 1.000, 1.000, 1.000, 1.000, 1.000;
      0.000, 1.592, 3.390, 1.000, 1.000, 1.000, 1.000;
      0.000, 0.759, 1.800, 1.000, 1.000, 1.000, 1.000;
      0.000, 0.482, 1.048, 1.694, 1.000, 1.000, 1.000;
      0.000, 0.360, 0.760, 1.232, 2.229, 1.000, 1.000;
      0.000, 0.253, 0.518, 0.823, 1.575, 1.000, 1.000;
      0.000, 0.203, 0.410, 0.632, 1.244, 1.906, 1.000;
      0.000, 0.165, 0.332, 0.499, 0.943, 1.560, 1.000;
      0.000, 0.136, 0.271, 0.404, 0.689, 1.230, 2.195;
      0.000, 0.109, 0.216, 0.323, 0.539, 0.827, 1.917;
      0.000, 0.096, 0.190, 0.284, 0.472, 0.693, 1.759;
      0.000, 0.082, 0.163, 0.243, 0.412, 0.601, 1.596;
      0.000, 0.074, 0.147, 0.220, 0.377, 0.546, 1.482;
      0.000, 0.064, 0.128, 0.191, 0.330, 0.478, 1.362;
      0.000, 0.056, 0.112, 0.167, 0.285, 0.428, 1.274];

psi3 = [1.908, 1.908, 1.908, 1.908, 1.908;
      1.914, 1.915, 1.916, 1.918, 1.921;
      1.921, 1.922, 1.927, 1.936, 1.947;
      1.927, 1.930, 1.943, 1.961, 1.987;
      1.933, 1.940, 1.962, 1.997, 2.043;
      1.939, 1.952, 1.988, 2.045, 2.116;
      1.946, 1.967, 2.022, 2.106, 2.211;
      1.955, 1.984, 2.067, 2.188, 2.333;
      1.965, 2.007, 2.125, 2.294, 2.491;
      1.980, 2.040, 2.205, 2.435, 2.696;
      2.000, 2.085, 2.311, 2.624, 2.973;
      2.040, 2.149, 2.461, 2.886, 3.356;
      2.098, 2.244, 2.676, 3.265, 3.912;
      2.189, 2.392, 3.004, 3.844, 4.775;
      2.337, 2.635, 3.542, 4.808, 6.247;
      2.588, 3.073, 4.534, 6.636, 9.144];
  
  
psi4 = [0.0,    0.0,    0.0,    0.0,  0.0;  
      0.0, -0.017, -0.032, -0.049, -0.064;
      0.0, -0.030, -0.061, -0.092, -0.123;
      0.0, -0.043, -0.088, -0.132, -0.179;
      0.0, -0.056, -0.111, -0.170, -0.232;
      0.0, -0.066, -0.134, -0.206, -0.283;
      0.0, -0.075, -0.154, -0.241, -0.335;
      0.0, -0.084, -0.173, -0.276, -0.390;
      0.0, -0.090, -0.192, -0.310, -0.447;
      0.0, -0.095, -0.208, -0.346, -0.508;
      0.0, -0.098, -0.223, -0.383, -0.576;
      0.0, -0.099, -0.237, -0.424, -0.652;
      0.0, -0.096, -0.250, -0.469, -0.742;
      0.0, -0.089, -0.262, -0.520, -0.853;
      0.0, -0.078, -0.272, -0.581, -0.997;
      0.0, -0.061, -0.279, -0.659, -1.198];

% Compute estimates by interpolationg through the tables
[xrow,xcol] = size(x);
if (xrow == 1), xcol = 1; end;
for n = 1:xcol, 
  tvai1 = max([1 find(tva <= va(n))]);
  tvai2 = min([15 find(tva >= va(n))]);
  tvbi1 = max([1 find(tvb <= abs(vb(n)))]);
  tvbi2 = min([7 find(tvb >= abs(vb(n)))]);
  dista = (tva(tvai2)-tva(tvai1));
    if dista ~= 0,
    dista = (va(n)-tva(tvai1))/dista;
  end;
  distb = (tvb(tvbi2)-tvb(tvbi1));
  if distb ~= 0,
    distb = (abs(vb(n))-tvb(tvbi1))/distb;
  end;
  psi1b1 = dista*psi1(tvai2,tvbi1)+(1-dista)*psi1(tvai1,tvbi1);
  psi1b2 = dista*psi1(tvai2,tvbi2)+(1-dista)*psi1(tvai1,tvbi2);
  alpha(n) = distb*psi1b2+(1-distb)*psi1b1;
  psi2b1 = dista*psi2(tvai2,tvbi1)+(1-dista)*psi2(tvai1,tvbi1);
  psi2b2 = dista*psi2(tvai2,tvbi2)+(1-dista)*psi2(tvai1,tvbi2);
  beta(n) = sign(vb(n))*(distb*psi2b2+(1-distb)*psi2b1);
  tai1 = max([1 find(ta >= alpha(n))]);
  tai2 = min([16 find(ta <= alpha(n))]);
  tbi1 = max([1 find(tb <= abs(beta(n)))]);
  tbi2 = min([5 find(tb >= abs(beta(n)))]);
  dista = (ta(tai2)-ta(tai1));
  if dista ~= 0,
    dista = (alpha(n)-ta(tai1))/dista;
  end;
  distb = (tb(tbi2)-tb(tbi1));
  if distb ~= 0,
    distb = (abs(beta(n))-tb(tbi1))/distb;
  end;
  psi3b1 = dista*psi3(tai2,tbi1)+(1-dista)*psi3(tai1,tbi1);
  psi3b2 = dista*psi3(tai2,tbi2)+(1-dista)*psi3(tai1,tbi2);
  sigma(n) = vs(n)/(distb*psi3b2+(1-distb)*psi3b1);
  psi4b1 = dista*psi4(tai2,tbi1)+(1-dista)*psi4(tai1,tbi1);
  psi4b2 = dista*psi4(tai2,tbi2)+(1-dista)*psi4(tai1,tbi2);
  zeta = sign(beta(n))*sigma(n)*(distb*psi4b2+(1-distb)*psi4b1) + x50 ;
  if (abs(alpha(n)-1) < 0.05 )
	mu(n) = zeta;
  else
	mu(n) = zeta - beta(n)* sigma(n) * tan(0.5 * pi *alpha(n));
  end;
end;

% Correct estimates for out of range values
alpha(alpha <= 0) = 10^(-10)+0*alpha(alpha <= 0);
alpha(alpha > 2) = 2+0*alpha(alpha > 2);
sigma(sigma <= 0) = 10^(-10)+0*sigma(sigma <= 0);
beta(beta < -1) = -1+0*beta(beta < -1);
beta(beta > 1) = 1+0*beta(beta > 1);

⌨️ 快捷键说明

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