MATLAB使用统计法卡方分布表剔除异常数据处理

2025-09-26 02:50:58

1、使用xlsread读入样本数据 。

A12=xlsread('样本数据.xlsx','sheet1');

检查是否读入。

MATLAB使用统计法卡方分布表剔除异常数据处理

2、赋值和计算需要进行数据处理的数据行数。

程序:

HanData1=A12(:,[1:3]);             

x1=(1:length(HanData1))';

handle_x1=x1;                                     % length(HanData)为行数

n1=size(x1,1);                                       % n=size(x,1)为行数

计算。

MATLAB使用统计法卡方分布表剔除异常数据处理

3、然后对数据归一化处理,计算协方差矩阵,对每列归一化后的数据求均值。

程序:

for i=1:size(HanData1,2)                                  % size(HanData,2)为列数

  guiHanData1(:,i)=(HanData1(:,i)-mean(HanData1(:,i)))/std(HanData1(:,i));   % 对数据归一化处理

  S1=cov(guiHanData1);                                    % 计算协方差矩阵

  mHanData1(:,i)=mean(guiHanData1(:,i));   % 对每列归一化后的数据求均值

end

运行结果。

MATLAB使用统计法卡方分布表剔除异常数据处理

4、然后计算每行数据的卡方分布因子。

MATLAB程序如下:

m1=zeros(n1,1);

for i=1:n1

    m1(i)=(guiHanData1(i,:)-mHanData1)*inv(S1)*(guiHanData1(i,:)-mHanData1)';    % 计算每行数据的卡方分布因子

end

运行后结果如下图。

MATLAB使用统计法卡方分布表剔除异常数据处理

5、索引卡方分布因子大于预设卡方分布因子大于10的行标,预设值越大则删除的数据越少,可查看卡方分布表。

程序:

out1=find(m1>10);          

计算结果。

MATLAB使用统计法卡方分布表剔除异常数据处理

6、取出卡方分布因子大于预设卡方分布因子大于10的所在行的数据保存至outData,即将要剔除的数据。

outData1=HanData1(out1,:);    

运行。                                 

MATLAB使用统计法卡方分布表剔除异常数据处理

7、剔除卡方分布因子大于预设卡方分布因子大于10的所在行的数据。

HanData1(out1,:)=[];

handle_x1(out1,:)=[];     

运行结果如下。                         

MATLAB使用统计法卡方分布表剔除异常数据处理

8、将数据处理的效果用图形显示出来。

MATLAB程序如下:

%画图

figure('NumberTitle', 'off', 'Name', '数据处理');

subplot(2,2,1);

plot(handle_x1,HanData1(:,3),'o',x1(out1),outData1,'ro','LineWidth',2.5);

% hold on

% plot(x(out),outData,'ro');

grid on

xlabel('自变量');

ylabel('因变量');

legend('正常值','异常值')

title('样本数据处理');

%**************************************************************** 

运行后图形效果如下。

MATLAB使用统计法卡方分布表剔除异常数据处理

9、完整的“MATLAB使用统计法卡方分布表剔除异常数据处理”程序代码如下:

A12=xlsread('样本数据.xlsx','sheet1');  %读入样本数据   

%*******剔除不正常数据*************************************** 

HanData1=A12(:,[1:3]);             

x1=(1:length(HanData1))';handle_x1=x1;    % length(HanData)为行数

    n1=size(x1,1);                                                % n=size(x,1)为行数

for i=1:size(HanData1,2)                % size(HanData,2)为列数

  guiHanData1(:,i)=(HanData1(:,i)-mean(HanData1(:,i)))/std(HanData1(:,i));   % 对数据归一化处理

    S1=cov(guiHanData1);                                  % 计算协方差矩阵

mHanData1(:,i)=mean(guiHanData1(:,i));     % 对每列归一化后的数据求均值

end

m1=zeros(n1,1);

for i=1:n1    

m1(i)=(guiHanData1(i,:)-mHanData1)*inv(S1)*(guiHanData1(i,:)-mHanData1)';    

% 计算每行数据的卡方分布因子

end

out1=find(m1>10);                        

% 索引卡方分布因子大于预设卡方分布因子大于10的行标,预设值越大则删除的数据越少,可查看卡方分布表

outData1=HanData1(out1,:);                                                   

 % 取出卡方分布因子大于预设卡方分布因子大于10的所在行的数据保存至outData,即将要剔除的数据

HanData1(out1,:)=[]; handle_x1(out1,:)=[];                                

% 剔除卡方分布因子大于预设卡方分布因子大于10的所在行的数据

%画图

figure('NumberTitle', 'off', 'Name', '数据处理');

subplot(2,2,1);

plot(handle_x1,HanData1(:,3),'o',x1(out1),outData1,'ro','LineWidth',2.5);

% hold on

% plot(x(out),outData,'ro');

grid on

xlabel('自变量');

ylabel('因变量');

legend('正常值','异常值')

title('样本数据处理');

%**************************************************************** 

MATLAB使用统计法卡方分布表剔除异常数据处理

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢