ECG-Kit 1.0
(4,222 bytes)
function [Bk,intk,sigmayykmaxrew_k,sigmattkmaxrew_k,Hopt] = extractmcdregres(resMcd,T,y,kmax,n,q,k,h,cutoffWeights)
%EXTRACTMCDREGRES is an auxiliary function for cross-validation with RPCR and RSIMPLS.
% It extracts mcd-regression coefficients for a certain k based on
% the raw estimate of the slope and intercept of the regression with kmax coefficients.
% Input arguments:
% resMCD : the results of the mcdregression on the data minus observation i for kmax components.
% kmax : the maximal number of components
% T : the k scores from ROBPCA
% k : the number of components.
%
% Output :
% Bk : the slope for k components.
% intk : the intercept for k components.
% Hopt : remark that only for k < kmax a hopt is provided. For kmax Hopt needs to be calculated outside this function.
% sigmayykmaxrew_k and sigmattkmaxrew_k : estimates of covariance matrices that are needed in other functions.
%
% This function is part of LIBRA: the Matlab Library for Robust Analysis,
% available at:
% http://wis.kuleuven.be/stat/robust.html
%
% Written by Sanne Engelen
% Last Update: 08/10/2004
geg = [T,y];
j = k;
mutkmaxraw_k = resMcd.Mu(1:j);
muykmaxraw_k = resMcd.Mu((kmax+1):(kmax + q));
sigmattkmaxraw_k = resMcd.Sigma(1:j,1:j);
sigmaytkmaxraw_k = resMcd.Sigma((kmax+1):(kmax + q),1:j);
sigmatykmaxraw_k = resMcd.Sigma(1:j,(kmax + 1):(kmax + q));
sigmayykmaxraw_k = resMcd.Sigma((kmax + 1):(kmax + q),(kmax + 1):(kmax + q));
% perform csteps:
Sigmaraw_k = [sigmattkmaxraw_k, sigmatykmaxraw_k ; sigmaytkmaxraw_k, sigmayykmaxraw_k];
Muraw_k = [mutkmaxraw_k;muykmaxraw_k]';
prevdet = 0;
if j ~= kmax
geg_k = [T(:,1:j),y];
for noCsteps = 1:10
[sortMD,indsm] = sort(libra_mahalanobis(geg_k,Muraw_k,'cov',Sigmaraw_k));
Sigmaraw_k = cov(geg_k(indsm(1:h),:));
Muraw_k = mean(geg_k(indsm(1:h),:));
obj = det(Sigmaraw_k);
if noCsteps >= 20 |abs(obj - prevdet) < 10^(-4)
if noCsteps >= 20
disp('no convergence in csteps')
end
break
end
prevdet = obj;
end
Hopt = indsm(1:h);
end
mukmax_k = Muraw_k;
mutkmax_k = Muraw_k(1:j)';
muykmax_k = Muraw_k((j+1):(j + q))';
sigmakmax_k = Sigmaraw_k;
sigmattkmax_k = Sigmaraw_k(1:j,1:j);
sigmaytkmax_k = Sigmaraw_k((j+1):(j + q),1:j);
sigmatykmax_k = Sigmaraw_k(1:j,(j + 1):(j + q));
sigmayykmax_k = Sigmaraw_k((j + 1):(j + q),(j + 1):(j + q));
sigmattinvkmax_k = inv(sigmattkmax_k);
Braw_k = sigmattinvkmax_k*sigmatykmax_k;
intraw_k = (muykmax_k - (sigmaytkmax_k*sigmattinvkmax_k*mutkmax_k))';
% reweighting:
rewweights=zeros(n,1);
rewfitted=T(:,1:j)*Braw_k + repmat(intraw_k,n,1);
rewresid=y-rewfitted;
rewE=sigmayykmax_k-Braw_k'*sigmattkmax_k*Braw_k;
for noObs=1:n
if (sqrt(rewresid(noObs,1:q)*inv(rewE)*rewresid(noObs,1:q)')) <= cutoffWeights
rewweights(noObs)=1;
end
end
rewclasscov=cov(geg(rewweights==1,:));
rewclasscenter=mean(geg(rewweights==1,:));
mukmaxrew_k = rewclasscenter;
mutkmaxrew_k = rewclasscenter(1:j)';
muykmaxrew_k = rewclasscenter((j+1):(j + q))';
sigmakmaxrew_k = rewclasscov;
sigmattkmaxrew_k = rewclasscov(1:j,1:j);
sigmaytkmaxrew_k = rewclasscov((j+1):(j + q),1:j);
sigmatykmaxrew_k = rewclasscov(1:j,(j + 1):(j + q));
sigmayykmaxrew_k = rewclasscov((j + 1):(j + q),(j + 1):(j + q));
sigmattinvkmaxrew_k = inv(sigmattkmaxrew_k);
Bk = sigmattinvkmaxrew_k*sigmatykmaxrew_k;
intk = (muykmaxrew_k - (sigmaytkmaxrew_k*sigmattinvkmaxrew_k*mutkmaxrew_k))';%
rewclasscov=cov(geg(rewweights==1,:));
rewclasscenter=mean(geg(rewweights==1,:));
mukmaxrew_k = rewclasscenter;
mutkmaxrew_k = rewclasscenter(1:j)';
muykmaxrew_k = rewclasscenter((j+1):(j + q))';
sigmakmaxrew_k = rewclasscov;
sigmattkmaxrew_k = rewclasscov(1:j,1:j);
sigmaytkmaxrew_k = rewclasscov((j+1):(j + q),1:j);
sigmatykmaxrew_k = rewclasscov(1:j,(j + 1):(j + q));
sigmayykmaxrew_k = rewclasscov((j + 1):(j + q),(j + 1):(j + q));
sigmattinvkmaxrew_k = inv(sigmattkmaxrew_k);
Bk = sigmattinvkmaxrew_k*sigmatykmaxrew_k;
intk = (muykmaxrew_k - (sigmaytkmaxrew_k*sigmattinvkmaxrew_k*mutkmaxrew_k))';