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

📄 iridge.m

📁 一个很有用的EM算法程序包
💻 M
字号:
function [B, S, h, peff] = iridge(Cxx, Cyy, Cxy, dof, options);%IRIDGE  Individual ridge regressions with generalized cross-validation.%%   [B, S, h, peff] = IRIDGE(Cxx, Cyy, Cxy, dof) returns a regularized%   estimate B of the coefficient matrix for the multivariate multiple%   regression model Y = X*B + noise(S).  Each column B(:,k) of B is%   computed by a ridge regression as B(:,k) = Mxx_hk Cxy(:,k), where%   Mxx_hk is a regularized inverse of Cxx,%%             Mxx_h = inv(Cxx + hk^2 * I).%%   For each column k of B, an individual regularization parameter%   ('ridge parameter') hk is selected as the minimizer of the%   generalized cross-validation function. The matrix Cxx is an%   estimate of the covariance matrix of the independent variables X,%   Cyy is an estimate of the covariance matrix of the dependent%   variables Y, and Cxy is an estimate of the cross-covariance matrix%   of the independent variables X and the dependent variables Y. The%   scalar dof is the number of degrees of freedom that were available%   for the estimation of the covariance matrices.%%   The input structure OPTIONS contains optional parameters for the%   algorithm:%%     Field name         Parameter                                   Default%%     OPTIONS.relvar_res Minimum relative variance of residuals.       5e-2%                        From the parameter OPTIONS.relvar_res, a%                        lower bound for the regularization parameter%                        is constructed, in order to prevent GCV from%                        erroneously choosing too small a %                        regularization parameter (see GCVRIDGE).%%   The OPTIONS structure is also passed to GCVRIDGE.%     %   IRIDGE returns an estimate B of the matrix of regression%   coefficients. Also returned are an estimate S of the residual%   covariance matrix, a vector h containing the regularization%   parameters hk for the columns of B, and the scalar peff, an%   estimate of the effective number of adjustable parameters in each%   column of B.% %   IRIDGE computes the estimates of the coefficient matrix and of the%   residual covariance matrix from the covariance matrices Cxx, Cyy,%   and Cxy by solving the regularized normal equations. The normal%   equations are solved via an eigendecomposition of the covariance%   matrix Cxx. However, if the data matrices X and Y are directly%   available, a method based on a direct factorization of the data%   matrices will usually be more efficient and more accurate.%%   See also: MRIDGE, GCVRIDGE.    error(nargchk(4, 5, nargin))     % check number of input arguments     px           = size(Cxx, 1);  py           = size(Cyy, 1);  if size(Cxx, 2) ~= px | size(Cyy, 2) ~= py | any(size(Cxy) ~= [px, py])     error('Incompatible sizes of covariance matrices.')  end  % ==============           process options        ========================  if nargin < 5 | isempty(options)    options    = [];    fopts      = [];  else    fopts      = fieldnames(options);  end      if strmatch('relvar_res', fopts)    relvar_res = options.relvar_res;   else    relvar_res = 5e-2;  end    % =================           end options        =========================  if nargout > 1    S_out      = 1==1;  else    S_out      = 0==1;  end    if nargout == 4    peff_out   = 1==1;  else    peff_out   = 0==1;  end      % eigendecomposition of Cxx  rmax         = min(dof, px);     % maximum possible rank of Cxx  [V, d, r]    = peigs(Cxx, rmax);    % Fourier coefficients. (The following expression for the Fourier  % coefficients is only correct if Cxx = X'*X and Cxy = X'*Y for  % some, possibly scaled and augmented, data matrices X and Y; for  % general Cxx and Cxy, all eigenvectors V of Cxx must be included,  % not just those belonging to nonzero eigenvalues.)  F            = repmat(ones(r, 1)./sqrt(d), 1, px) .* V' * Cxy;  % Part of residual covariance matrix that does not depend on the  % regularization parameter h:  if (dof > r)     S0         = Cyy - F'*F;  else    S0         = sparse(py, py);  end      % approximate minimum squared residual  trSmin       = relvar_res * diag(Cyy);  % initialize output  h            = zeros(py, 1);  B            = zeros(px, py);  if S_out    S          = zeros(py, py);  end  if peff_out    peff       = zeros(py, 1);  end    for k = 1:py                        % compute an individual ridge regression for each y-variable        % find regularization parameter that minimizes the GCV object function    h(k)       = gcvridge(F(:,k), d, S0(k,k), dof, r, trSmin(k), options);        % k-th column of matrix of regression coefficients    B(:,k)     = V * (sqrt(d)./(d + h(k)^2) .* F(:,k));    if S_out      % assemble estimate of covariance matrix of residuals      for j = 1:k	diagS  = ( h(j)^2 * h(k)^2 ) ./ ( (d + h(j)^2) .* (d + h(k)^2) );	S(j,k) = S0(j,k) + F(:,j)' * (diagS .* F(:,k));	S(k,j) = S(j,k);      end    end    if peff_out       % effective number of adjusted parameters in this column      % of B: peff = trace(Mxx_h Cxx)      peff(k)  = sum(d ./ (d + h(k)^2));    end      end

⌨️ 快捷键说明

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