Fixed bug in Weibull prior.

Fixed inconsistencies in the ordering of the hyperparameters (shape and scale).
time-shift
Stéphane Adjemian (Hermes) 2016-02-11 21:35:29 +01:00
parent 3c7e60b744
commit 0459d1bcd4
5 changed files with 16 additions and 14 deletions

View File

@ -58,6 +58,8 @@ switch shape
m = m*(hyperparameters(4)-hyperparameters(3)) + hyperparameters(3) ; m = m*(hyperparameters(4)-hyperparameters(3)) + hyperparameters(3) ;
end end
case 2 case 2
% a = hyperparameters(1) [shape parameter]
% b = hyperparameters(2) [scale parameter]
if hyperparameters(1)<1 if hyperparameters(1)<1
m = 0; m = 0;
else else
@ -85,12 +87,12 @@ switch shape
m = m + hyperparameters(3) ; m = m + hyperparameters(3) ;
end end
case 8 case 8
% s = hyperparameters(1) [scale parameter] % k = hyperparameters(1) [shape parameter]
% k = hyperparameters(2) [shape parameter] % s = hyperparameters(2) [scale parameter]
if hyperparameters(2)<=1 if hyperparameters(1)<=1
m = 0; m = 0;
else else
m = hyperparameters(1)*((hyperparameters(2)-1)/hyperparameters(2))^(1/hyperparameters(2)); m = hyperparameters(2)*((hyperparameters(1)-1)/hyperparameters(1))^(1/hyperparameters(1));
end end
if length(hyperparameters)>2 if length(hyperparameters)>2
% Add location parameter % Add location parameter
@ -212,7 +214,7 @@ end
%$ % Weibull density %$ % Weibull density
%$ try %$ try
%$ m1 = compute_prior_mode([1 1],8); %$ m1 = compute_prior_mode([1 1],8);
%$ m2 = compute_prior_mode([1 2 1],8); % Wolfram Alpha: WeibullDistribution[2,1] %$ m2 = compute_prior_mode([2 1 1],8); % Wolfram Alpha: WeibullDistribution[2,1]
%$ t(1) = true; %$ t(1) = true;
%$ catch %$ catch
%$ t(1) = false; %$ t(1) = false;

View File

@ -9,8 +9,8 @@ function [a, b] = gamma_specification(mu, sigma2, lb, name) % --*-- Unitary te
% - name [string] Name of the parameter (or random variable). % - name [string] Name of the parameter (or random variable).
% %
% OUTPUTS % OUTPUTS
% - a [double] First hyperparameter of the Gamma density. % - a [double] First hyperparameter of the Gamma density (shape).
% - b [double] Second hyperparameter of the Gamma density. % - b [double] Second hyperparameter of the Gamma density (scale).
% Copyright (C) 2015 Dynare Team % Copyright (C) 2015 Dynare Team
% %

View File

@ -4,8 +4,8 @@ function [ldens,Dldens,D2ldens] = lpdfgweibull(x,a,b,c) % --*-- Unitary tests -
% %
% INPUTS % INPUTS
% - x [double] m*n matrix of points where the (logged) density will be evaluated, % - x [double] m*n matrix of points where the (logged) density will be evaluated,
% - a [double] m*n matrix of First Weibull distribution parameters, % - a [double] m*n matrix of First Weibull distribution parameters (shape parameter, k),
% - b [double] m*n matrix of Second Weibull distribution parameters, % - b [double] m*n matrix of Second Weibull distribution parameters (scale parameter, λ),
% - c [double] m*n matrix of Third Weibull distribution parameters (location parameter, default is 0). % - c [double] m*n matrix of Third Weibull distribution parameters (location parameter, default is 0).
% %
% OUTPUTS % OUTPUTS

View File

@ -1,4 +1,4 @@
function [scale, shape] = weibull_specification(mu, sigma2, lb, name) % --*-- Unitary tests --*-- function [shape, scale] = weibull_specification(mu, sigma2, lb, name) % --*-- Unitary tests --*--
% Returns the hyperparameters of the Weibull distribution given the expectation and variance. % Returns the hyperparameters of the Weibull distribution given the expectation and variance.
% %
@ -95,7 +95,7 @@ scale = mu/gamma(1+1/shape);
%$ disp(sprintf('... mu=%s and s2=%s', num2str(mu(j,i)),num2str(s2(j,i)))) %$ disp(sprintf('... mu=%s and s2=%s', num2str(mu(j,i)),num2str(s2(j,i))))
%$ end %$ end
%$ if ~isnan(mu(j,i)) && ~isnan(s2(j,i)) && ~isinf(mu(j,i)) && ~isinf(s2(j,i)) %$ if ~isnan(mu(j,i)) && ~isnan(s2(j,i)) && ~isinf(mu(j,i)) && ~isinf(s2(j,i))
%$ [scale, shape] = weibull_specification(mu(j,i), s2(j,i)); %$ [shape, scale] = weibull_specification(mu(j,i), s2(j,i));
%$ if isnan(scale) %$ if isnan(scale)
%$ t = false; %$ t = false;
%$ else %$ else
@ -105,7 +105,7 @@ scale = mu/gamma(1+1/shape);
%$ t = false; %$ t = false;
%$ end %$ end
%$ end %$ end
%$ if ~t %$ if ~t && debug
%$ failed1 = [failed1; mu(j,i) s2(j,i)]; %$ failed1 = [failed1; mu(j,i) s2(j,i)];
%$ failed1_ = [failed1_; shapes(i) scales(j)]; %$ failed1_ = [failed1_; shapes(i) scales(j)];
%$ error('UnitTest','Cannot compute scale and shape hyperparameters for mu=%s and s2=%s', num2str(mu(j,i)), num2str(s2(j,i))) %$ error('UnitTest','Cannot compute scale and shape hyperparameters for mu=%s and s2=%s', num2str(mu(j,i)), num2str(s2(j,i)))

View File

@ -3,8 +3,8 @@ function [ldens,Dldens,D2ldens] = lpdfgam(x,a,b);
% %
% INPUTS % INPUTS
% x [double] m*n matrix of locations, % x [double] m*n matrix of locations,
% a [double] m*n matrix or scalar, First GAMMA distribution parameters, % a [double] m*n matrix or scalar, First GAMMA distribution parameters (shape),
% b [double] m*n matrix or scalar, Second GAMMA distribution parameters, % b [double] m*n matrix or scalar, Second GAMMA distribution parameters (scale),
% %
% OUTPUTS % OUTPUTS
% ldens [double] m*n matrix of logged GAMMA densities evaluated at x. % ldens [double] m*n matrix of logged GAMMA densities evaluated at x.