How to get the difference between two robust regressions (based on repeated measures) and statistically analyse it?

1 次查看(过去 30 天)
I have been struggling with this problem for already a couple of long weeks. Perhaps someone can give me some help or suggestions.
Description
I collected data from two different populations of 6 samples each at 5 different time point. In order to analyse the progression pattern of each population over time, I performed a robust regression on each set. Briefly, I have an array with the set of values representing the days I gathered the data [x]; and two more arrays containing the values characterizing each subject repeated 5 times [v] and [d]. I used the following code to plot the robust regression, in this case to run the robust regression on the array [v]:
x=[0 0 0 0 0 0 28 28 28 28 28 28 56 56 56 56 56 56 84 84 84 84 84 84 112 112 112 112 112 112];
v=[1.000000 1.000000 1.000000 1.000000 1.000000 NaN 0.777491 1.071769 0.649429 0.612013 0.568944 NaN 1.115822 0.624034 0.659042 0.583451 0.437539 NaN 1.156354 0.721808 0.574364 0.556517 0.448168 NaN 0.771199 1.259949 0.486212 0.642605 0.439475 NaN];
d=[1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.889396 0.818145 0.992733 0.967640 0.561485 0.714877 0.840673 0.849952 1.214985 1.095830 0.470337 0.611467 0.961033 0.779437 1.240590 0.800760 0.476940 0.733969 0.746624 0.664785 1.002410 0.829174 0.420633 0.719057];
b(1) = 1;
[b(2),stats] = robustfit(x,v - 1,[],[],'off');
scatter(x,v,'filled'); grid on; hold on;
plot(x,b(1)+b(2)*x,'g','LineWidth',2)
legend('Data','Robust Regression')
%[b,stats] = robustfit(x,v);
Question
Ultimately, what I really want is statistically know how different the two regression are. For that, I was suggested to subtract [v] from [d] and check how different from 0 that result would be. I am struggling with this task.
Very naïvely, I already tried to just subtract the arrays and run the regression again on the resultant array. However, I realised that any order of my values within the arrays changes the result, obviously. I was thinking perhaps I could calculate the average per time point for each population and work with those values, but the standard errors of mean are so big, that I think it is important to consider them for this analysis (which is something I do not know how to include). In summary, does MATLAB have any toolbox or function that I can use to run a statistic test offering what I need? Otherwise, can anyone help me to code this problem?
Bonus question
I was using the Curve Fitting Tool from MATLAB to individually analyse the robust regressions of my populations and I realized that a robust Rational fit (numerator=0 and denominator=1) is a lot better, both according to goodness of fit and also biological interpretation of results, when compared to a robust Polynomial fit (degree=1). Is it possible to solve my previous question using the Rational fitting instead of a simple linear fit?
Thanks a lot everybody!

回答(1 个)

Ben Drebing
Ben Drebing 2017-12-20
You could take the norm of difference of the two fits. This can give you a pretty good indicator of their similarity. The closer their norm is to 0, the close the lines are to one another. Going along with your example:
[b_1, ~] = robustfit(x,v-1,[],[],'off');
[b_2, ~] = robustfit(x,d-1,[],[],'off');
y_1 = 1 + b_1 * unique(x);
y_2 = 1 + b_2 * unique(x);
d = norm(y_1 - y_2) % The close this value is to 0, the closer the fits are to one another.
  3 个评论
Carlos Goncalves Moreira
I am still stuck with this problem, so any suggestion or idea to solve it, even using a completly different approach, is very welcome! Thanks a lot community.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Descriptive Statistics 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by