do not regress if any Y is zero
Afficher commentaires plus anciens
Hi, I am using regress to perform linear regression on a large nc file (containing lat, lon, time, and temperature). So for each lat, lon, temperature is regressed over 30 years (one measurement each year).
In some years, some temperatures are 0 K, in those cases I want the loop to not regress, so the final mean slope does not include these.
Here is the important part of my code:
I am not getting an error but also not getting any difference in whether i include y(y==0) = NaN;, so I think there may be a better way. I had understood that regress ignores these autmatically, but that also appears to not be the case.
% initialise time parameters
time_begin = [1981, 1, 1, 0,0,0];
time_end = [2010,12,31,23,0,0];
years = (time_begin(1):time_end(1))';
nyears = length(years);
% create storage and regress
TXx = randi(100, 288, 192, 30);
lat = rand(192, 1);
lon = rand(288, 1);
time = rand(30,1);
M = numel(lon);
N = numel(lat);
slope = zeros(M, N);
intercept = zeros(M, N);
T = numel(time);
x = ([ones(T, 1) years]);
% Regress each lat/lon location
for i = 1 : M
for j = 1 : N
% Get all time instances of each lat/lon location
y = squeeze(TXx(i, j, :));
y(y==0) = NaN;
% Create regression problem and solve
c = regress(y, x);
intercept(i, j) = c(1);
slope(i, j) = c(2);
end
end
Réponses (1)
Matt J
le 23 Fév 2019
How about
c = regress(y(y~=0), x(y~=0));
7 commentaires
aine gormley
le 23 Fév 2019
Modifié(e) : aine gormley
le 23 Fév 2019
aine gormley
le 23 Fév 2019
aine gormley
le 23 Fév 2019
Modifié(e) : aine gormley
le 23 Fév 2019
Matt J
le 24 Fév 2019
If only one y is non-zero there is no way to derive a slope. You cannot fit a line when there is fewer than 2 data points.
aine gormley
le 24 Fév 2019
Catégories
En savoir plus sur Get Started with Curve Fitting Toolbox dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!