拉依达准则--(3σ准则)Matlab实现

达依拉准则介绍:

拉依达准则是指先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。这种判别处理原理及方法仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数充分大为前提的,当测量次数少的情形用准则剔除粗大误差是不够可靠的。因此,在测量次数较少的情况下,最好不要选用该准则。

使用原理

设对被测量进行等精度测量,独立得到x1,x2…,xn,算出其算术平均值x及剩余误差vi=xi-x(i=1,2,…,n),并按贝塞尔公式算出标准偏差σ,若某个测量值xi的剩余误差vb(1<=i<=n),满足下式
|vi|=|xi-x|>3σ
则认为xb是含有粗大误差值的坏值,应予剔除。
在整理试验数据时,往往会遇到这样的情况,即在一组试验数据里,发现少数几个偏差特别大的可疑数据,这类数据称为Outlier或Exceptional Data,他们往往是由于过失误差引起。

  • Matlab代码实现:
a=xlsread('附件一:已结束项目任务数据.xls',1,'B2:B836');
%%
[h,p]=lillietest
### 使用 MATLAB 实现拉依达准则 拉依达准则是一种基于统计学的异常值检测方法,通常用于剔除数据中的粗大误差。该方法假设测量数据服从正态分布,并通过计算标准差来判断哪些数据点属于异常值[^2]。 以下是实现拉依达准则的核心步骤及其对应的 MATLAB 代码: #### 数据加载与预处理 如果需要从 Excel 文件中读取数据,可以使用 `readtable` 或 `xlsread` 函数完成此操作。以下是一个简单的例子,展示如何从 Excel 文件中提取数据并存储到矩阵中[^1]。 ```matlab % 加载 Excel 数据 filename = &#39;data.xlsx&#39;; % 替换为实际文件名 sheet = 1; % 表格编号 xlRange = &#39;A1:A100&#39;; % 数据范围 data = xlsread(filename, sheet, xlRange); % 将数据转换为列向量 dataVector = data(:); ``` #### 计算均值和标准差 为了应用拉依达准则,需先计算数据集的均值和标准差。这些统计量是识别异常值的关键指标[^3]。 ```matlab meanValue = mean(dataVector); % 计算均值 stdDeviation = std(dataVector); % 计算标准差 threshold = 3 * stdDeviation; % 设置阈值(3σ) ``` #### 异常值检测 利用上述计算得到的均值和标准差,可以通过比较每个数据点与其距离均值的距离是否超过设定的阈值来判定其是否为异常值[^4]。 ```matlab outliers = abs(dataVector - meanValue) > threshold; % 输出异常值索引 outlierIndices = find(outliers); % 删除或标记异常值 filteredData = dataVector(~outliers); ``` #### 完整示例代码 下面提供了一个完整的 MATLAB 脚本,展示了如何结合 Excel 数据读取功能以及拉依达准则进行异常值检测。 ```matlab function filteredData = applyLaiDaCriterion() % 参数设置 filename = &#39;example_data.xlsx&#39;; sheet = 1; xlRange = &#39;A1:A100&#39;; % 步骤1:读取Excel数据 rawData = xlsread(filename, sheet, xlRange); % 步骤2:初始化变量 dataVector = rawData(:); meanValue = mean(dataVector); stdDeviation = std(dataVector); threshold = 3 * stdDeviation; % 步骤3:检测异常值 outliers = abs(dataVector - meanValue) > threshold; outlierIndices = find(outliers); % 步骤4:过滤掉异常值 filteredData = dataVector(~outliers); % 显示结果 fprintf(&#39;原始数据长度:%d\n&#39;, length(rawData)); fprintf(&#39;异常值数量:%d\n&#39;, sum(outliers)); end ``` --- ###
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值