How to calaculate This standard deviation correction factor in Matlab?
Ältere Kommentare anzeigen
Hello guys,
i want to normalize my dta matrix by using the below formula.
could anyone help me to write the approriate piece of code for that, if that possible?

where g(i,j) is the value for feature i in sample j, sd(g(i)) is the standard deviation across samples for feature i, sd10(g) is the 10-percentile value of standard deviations across features.
My data matrix is looks like this which have 8 features and 16 samples in this example

I appreciate any help!
17 Kommentare
chocho
am 12 Jan. 2020
chocho
am 12 Jan. 2020
darova
am 13 Jan. 2020
Can you provide your attempts? What have you tried? What about for loop?
darova
am 13 Jan. 2020
I made some changes
xx = importdata('Dataset.txt','\t');
x = xx.data;
Norm = x*0;
std10 = 0.1*std(x);
[m,n]=size(x);
for i1 = 1:m
for i2 = 1:n
Norm(i1,i2) = x(i1,i2)/(std(x(i1,:)))+std10);
end
end
Guillaume
am 13 Jan. 2020
Seems simple enough to calculate except I've no idea what "the 10-percentile value of standard deviations across features" mean. Standard deviation turns an array into a scalar, percentile also turns an array into a scalar. Hence you can neither take the percentile of a standard deviation, nor the standard deviation of a percentile.
The rest is trivial and certainly doesn't need a loop.
chocho
am 13 Jan. 2020
chocho
am 13 Jan. 2020
darova
am 13 Jan. 2020
Try
std10 = 0.1*std(x(:));
chocho
am 13 Jan. 2020
chocho
am 13 Jan. 2020
chocho
am 13 Jan. 2020
darova
am 13 Jan. 2020
Impossible
Can you attach the data?
chocho
am 13 Jan. 2020
chocho
am 13 Jan. 2020
Steven Lord
am 13 Jan. 2020
If the data is that large, how about posting a smaller subset of the data (say a dozen or so rows) and telling us what you would expect the answer to be for that smaller subset of data.
For example, let's take this sample dataset. What would you expect
to be for it?
rng default % Make sure we can each create the same A
A = randn(12, 8);
chocho
am 13 Jan. 2020
Antworten (1)
Guillaume
am 13 Jan. 2020
I think you first need to clarify what is meant by "the 10-percentile value of standard deviations across features". I very much doubt it's the 10th of the standard deviation and obviously it's going to greatly influence your results.
However, since we don't know, here is the implementation with 1/10 of the standard deviation:
%input: g a NxM matrix, where rows are samples, columns are feature
result = g ./ (std(g, 0, 1) + 0.1*std(g, 0, 'all')); %R2018b or later
%result = g ./ (std(g, 0, 1) + 0.1*std(g(:))); %R2016b or later
%result = bsxfun(@rdivide, g, std(g, 0, 1) + 0.1*std(g(:))); %prior to R2016b
2 Kommentare
chocho
am 13 Jan. 2020
Kategorien
Mehr zu 2-D and 3-D Plots finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!