Zscore a matrix with NaN

48 vues (au cours des 30 derniers jours)
Joelle Martin
Joelle Martin le 19 Oct 2015
Réponse apportée : jkr le 21 Juin 2017
I have matrix A, and I need to find a zscore value (with the intention of running a PCA) of a matrix that has NaN values. I need to have matlab ignore the NaNs while solving for the zscore value. How can I do this? I tried Zscore = zscore(~isnan(A)) but it didn't work.
Thanks for your help!

Réponse acceptée

Star Strider
Star Strider le 19 Oct 2015
Modifié(e) : Star Strider le 19 Oct 2015
You can create your own function to compute the Z-scores omitting NaN values (I believe the 'omitnan' option began in R2014b). The result vector retains the NaN values while it computes the Z-score without them:
zscor_xnan = @(x) bsxfun(@rdivide, bsxfun(@minus, x, mean(x,'omitnan')), std(x, 'omitnan'));
q = rand(10,2);
q([3 5 7],1) = NaN;
Zscore = zscor_xnan(q);
  1 commentaire
Patrick
Patrick le 22 Juil 2016
Modifié(e) : Patrick le 22 Juil 2016
can you perhaps elaborate a little bit. I'm new but here's what I had for the function (using MatLab 2015)
function zcor_xnan = @(x) bsxfun(@rdivide, bsxfun(@minus, x, mean(x,'omitnan')), std(x, 'omitnan'));
end
Here is what I have in my script
if true
% code
q = rand(10,2);
q([3 5 7],1) = NaN;
Zscore = zscor_xnan(q);
end
Really sorry I know this is a very infantile question but I rarely use functions.

Connectez-vous pour commenter.

Plus de réponses (1)

jkr
jkr le 21 Juin 2017
A simple approach for a vector 'x':
zscore = (x - nanmean(x))/nanstd(x);

Catégories

En savoir plus sur NaNs dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by