MATLAB Answers


Linear regression on a semi-log scale


I'm trying to plot a linear regression line on a semi-log scale.

Y-axis Linear Received power in dB

X-axis Log distance in m

The program and data I'm using as as follows:


D=10; %Max meaurement distance

d1=(1:Inc:D); %1m to max measurment distance (D) in Increments (Inc)

RXPdata1=[-45.0983; -53.3746; -54.4132; -56.8286; -59.2905; -60.2743; -60.6919; -59.4938; -64.0525; -62.6163]; %Measured data in dB

semilogx(d1,(RXPdata1(:,1)),'-or') %Plot measured data

hold on

%Graph Set up

title ('Plot showing measured data')

xlabel('Distance (m) [Log scale]')

ylabel('Recieved Power (dB)')

legend ('Measured Data','Location','EastOutside')

axis([0 10 -70 -35]);

hold on

grid on

Can anyone help?



Log in to comment.



No products are associated with this question.

1 Answer

Answer by Miroslav Balda on 11 Jun 2013
 Accepted Answer

The following code solves your problem:

% James.m
%  JAMES   Linear regression on a semilog scale
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%       2013-06-11
% Miroslav Balda
% miroslav AT balda DOT cz
D=10;           %   Max meaurement distance
d1=(1:Inc:D);   %   1m to max measurment distance (D) in Increments (Inc)
RXPdata1=[-45.0983; -53.3746; -54.4132; -56.8286; -59.2905; -60.2743;... 
   -60.6919; -59.4938; -64.0525; -62.6163]; %    Measured data in dB
semilogx(d1,(RXPdata1(:,1)),'-or')          %    Plot measured data
hold on
%                %   Graph Set up
title ('Plot showing measured data','FontSize',14, 'FontWeight','bold')
xlabel('Distance (m) [Log scale]','FontSize',10, 'FontWeight','bold')
ylabel('Recieved Power (dB)','FontSize',10, 'FontWeight','bold')
axis([0 10 -70 -35]);
hold on
grid on
              %   Regression
logd1 = log10(d1');
A     = [ones(size(RXPdata1)),logd1];
c = A\RXPdata1
y = A*c;
plot(d1,y,'o-', d1,y,'*-')
legend ('Measured Data','Lin. Regression','Location','EastOutside')

It is all. Good luck!




Many many thanks, this has saved me hours of work!!!



Me again, any chance you could help me out again. If trying to find the following variables for the line:

- where the line intersects 0 (or it is 1?) - the gradient - the regression coefficient

Thanks in advance.


Log in to comment.

Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!