MATLAB多元线性回归剔除异常点的代码

残差图如下、有两万多个数据、如何进行异常点的剔除、我是用MATLAB做的
93479 27.1 27.0
93481 27.1 27.1
93481 27.1 27.1
93396 27.1 27.1
93258 27.0 27.1
93258 27.0 27.0
93275 27.0 27.1
93245 27.0 27.1
93245 27.0 27.1
93559 27.1 27.1
93559 27.1 27.1
60943 27.1 27.1
60943 27.1 27.1
这是一小部分数据、第一列Y、二三分别是X1、X2如何编写一个MATLAB代码剔除

第1个回答  2012-12-07
你画的是哪个变量的残差图,不是有3个变量吗,异常值的标准是什么,这些你都没说清。追问

第一列是因变量、画的是第一列的残差图吧
计算出来的结果
b =
1.0e+004 *
9.5391
0.0110
-0.0162

bint =
1.0e+004 *
9.5339 9.5442
0.0104 0.0115
-0.0166 -0.0158

stats =
1.0e+004 *
0.0001 3.3275 0 2.6805

追答

你是线性拟合:Y=a*X1+b*X2+c,?
你的异常值的标准是什么?或者说你的思路所遇到的问题。

追问

剔除残差图中的数据我已经做好了
这是我的剔除语句
I=find(abs(x(:,5))>=180);
x(I,:)=[];
但是在拟合的时候发现数据没有剔除、仅在绘制残差图的时候剔除了
拟合的代码是
y_1=b(1)+b(2)*x2+b(3)*x3;
wucha=(y-y_1)./y;
plot(y_1','g');
hold on
plot(y','r')
legend('拟合','测量')
title('所有数据测量值与拟合值的比较')
figure
请问我要如何修改这程序才能将异常值剔除再进行拟合

追答

我还是不太明白你是什么意思?我大概猜一下
你首先对原始数据做线性规划,得出变量Y的残差,然后你根据残差是否大于180来剔除异常值。
剔除完了以后会得到一个新的原始数据,然后你再对其做线性规划,这样肯定是把异常值的影响消减了。
这样我不觉得会有什么问题啊。

本回答被提问者采纳
相似回答