Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在MATLAB中仅找到相关点

我有一个MATLAB函数,可在样本中查找特征点。不幸的是,它仅在大约90%的时间内有效。但是,当我知道应该看样品中的哪个位置时,可以将其增加到几乎100%。因此,我想知道MATLAB中是否有一个函数可以让我找到大多数结果所在的范围,从而可以重新计算特征点。我有一个可以存储所有结果的向量,正确的结果应在-24.000至24.000之间的3%范围内。错误的结果总是低于正确的范围。不幸的是,我的统计背景很生疏,所以我不确定如何称呼它。有人可以提示我要什么吗?是否在MATLAB中内置了一个函数,该函数可以使我获得尽可能小的范围,例如90%的结果位于该范围内。

编辑:很抱歉,如果我不明确我的问题。向量中的所有内容只能在-24.000到24.000之间。我的结果中大约90%的范围大约为1.44([24-(-24)] * 3%= 1.44)。这些很有可能是正确的结果。剩余的10%不在该范围内,并且始终较低(为什么我不确定采用均值是个好主意)。这10%是错误的,是由于我输入数据中出现的错误造成的。要找到剩余的10%,我想重复我的计算,但是现在我只想检查较小的范围。因此,我的目标是确定我的正确范围在哪里。删除我在该范围之外找到的值。然后重新计算我的值,而不是在-24.000和24.000之间的范围内,而是在一个小范围内重新计算,我已经找到了90%的值。


回答:
您正在寻找的相关点是百分位数

% generate sample data data = [randn(900,1) ; randn(50,1)*3 + 5; ; randn(50,1)*3 - 5]; subplot(121), hist(data) subplot(122), boxplot(data) % find 5th, 95th percentiles (range that contains 90% of the data) limits = prctile(data, [5 95]) % find data in that range reducedData = data(limits(1) < data & data < limits(2)); 存在其他检测异常值的方法 ,例如IQR异常值测试三个标准偏差规则 ,以及许多其他方法:

%% three standard deviation rule z = 3; bounds = z * std(data) reducedData = data( abs(data-mean(data)) < bounds ); 和

%% IQR outlier test Q = prctile(data, [25 75]); IQ = Q(2)-Q(1); %a = 1.5; % mild outlier a = 3.0; % extreme outlier bounds = [Q(1)-a*IQ , Q(2)+a*IQ] reducedData = data(bounds(1) < data & data < bounds(2));
顺便说一句,如果要获取与曲线下90%面积对应的z值( |X|
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:24


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.