Matlab如何根据残差批量删除回归中的异常值

其中一组数据,只有少量的异常值(如图1),还手动标记个案编号,手动删除的。但当样本量很大的时候,手动标记异常值已经不现实了(如图2)。

于是,可以使用如下代码批量剔除异常值(快速找到解决办法途径,还是ChatGPT啊,虽然每次给的代码不一定完全准确,但按图索骥总是解决问题的)

% 【step1]导入数据,做回归,查看残差图

[data,txt,raw] = xlsread('mydata.xlsx','Sheet1');
x = data(:,1);   n = size(x,1);  X = [ones(n,1),x];
y = data(:,2);   
[b,bint,r,rint,s] = regress(y,X,0.05);   % b为beta0和beta1系数,bint为置信区间,r为残差向量,rint为残差置信区间;s包括决定系数r^2,F值,F检验的p值,剩余方差
 rcoplot(r,rint) % 绘制残差图

% 【step2】根据残差剔除异常数据
stdr = std(r); meanr = mean(r);
outliers = find(abs(r-meanr)>2*stdr); %得到一组标记异常值的变量; 标记出与均值的距离大于2倍标准差的残差;数字2可以根据自己需求替换,如1-对异常值更严格,3-对异常值更放松
X(outliers,:) = [ ]; %剔除X中相应的异常值
y(outliers,:) = [ ];
[b,bint,r,rint,s] = regress(y, X,0.05); %剔除异常值后,回归效果会改善
 rcoplot(r,rint) % 重新绘制残差图

  

                                      图1                                                                    图2

PS:

发现了另一个有意思的链接,使用 fitlm 函数 ,以便于在一元线性回归中去掉常数项。

链接:https://ww2.mathworks.cn/help/stats/fitlm.html 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值