【问题标题】:Simple data processing简单的数据处理
【发布时间】:2011-06-21 19:05:06
【问题描述】:

假设我得到了这组数据。排序后可以绘制出如下所示的分布。

M=[-99  -99 -44.5   -7.375  -5.5    -1.666666667    -1.333333333    -1.285714286    0.436363636 2.35    3.3 4.285714286 5.052631579 6.2 7.076923077 7.230769231 7.916666667 9.7 10.66666667 16.16666667 17.4    19.2    19.6    20.75   24.25   34.5    49.5]

我的问题是如何找出那些在中间范围内的值并记录索引。使用正态分布还是其他?感谢您的帮助!

乔纳斯的照片

【问题讨论】:

  • 您对什么是“中间”范围的选择肯定是相当主观的。
  • 与其说“中间”范围,我认为说“方差有限的一系列值”可能会更好。实际上,范围应该随着不同的数据集而变化。

标签: matlab function matrix distribution


【解决方案1】:

假设您的中间范围是 [-10 10] 那么索引将是:

> find(-10< M & M< 10)
ans =

    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18

请注意,您也可以通过逻辑索引来访问这些值,例如:

> M(-10< M & M< 10)
ans =

 Columns 1 through 15:

  -7.37500  -5.50000  -1.66667  -1.33333  and so on ...

要获得中档,只需:

> q= quantile(M(:), [.25 .75])
q =

   -1.3214
   17.0917

> find(q(1)< M & M< q(2))
ans =

    8    9   10   11   12   13   14   15   16   17   18   19   20

还要注意,这里使用了M(:),以确保quantileM 视为向量。您可以采用程序中的所有向量都是列向量的约定,然后大多数函数会自动正确处理它们。

更新:
现在,对于分位数的简短描述是:它们是从随机变量的累积分布函数 (cdf) 中提取的点。 (现在你的M 被假定为cdf 的一种,因为它是非递减的并且可以归一化为1)。现在“只是”数据的分位数 0.5“意味着 50% 的值低于此分位数”。有关分位数的更多详细信息,请参见 here

【讨论】:

  • 嗨吃。感谢您的回答。但是你能解释一下分位数函数中的 [.25 .75] 吗?非常感谢!
  • @appi:更新了我的答案。请不要犹豫,添加有关您的问题的详细信息。但我认为它们需要与编程相关。在stats.stackexchange.com 上有一个更好的论坛可以讨论与统计相关的问题。谢谢
  • 感谢您的解释和网站,吃。
【解决方案2】:

如果您不知道先验您的中间范围是多少,但您知道要丢弃曲线起点和终点的异常值,并且如果您有在 Statistics Toolbox 中,您可以使用 ROBUSTFIT 对您的数据进行稳健的线性回归,并且只保留内点。

M=[-99 -99 -44.5 -7.375 -5.5 -1.666666667 -1.333333333 -1.285714286 0.436363636 2.35 3.3 4.285714286 5.052631579 6.2 7.076923077 7.230769231 7.916666667 9.7 10.66666667 16.16666667 17.4 19.2 19.6 20.75 24.25 34.5 49.5];

%# robust linear regression
x = find(isfinite(M)); %# eliminate NaN or Inf
[u,s]=robustfit(x,M(x));

%# inliers have a weight > 0.25 (raise this value to be stricter)
inlierIdx = s.w > 0.25;
middleRangeX = x(inlierIdx)
middleRangeValues = M(x(inlierIdx))

%# plot with the regression in red and the good values in green
plot(x,M(x),'-b.',x,u(1)+u(2)*x,'r')
hold on,plot(middleRangeX,middleRangeValues,'*r')

middleRangeX =
  Columns 1 through 21
     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19    20    21    22    23    24
  Column 22
    25
middleRangeValues =
  Columns 1 through 10
       -7.375         -5.5      -1.6667      -1.3333      -1.2857      0.43636         2.35          3.3       4.2857       5.0526
  Columns 11 through 20
          6.2       7.0769       7.2308       7.9167          9.7       10.667       16.167         17.4         19.2         19.6
  Columns 21 through 22
        20.75        24.25

【讨论】:

  • 感谢您的回答,乔纳斯!
  • 嗨乔纳斯。我按照你的算法修改了我的程序。我得到的m值是m = [ - 99 -44.50 -16.33 -1.66 -1.57 0.81 0.91 1.51 2.04 2.78 3.30 4.28 5.05 6.20 7.07 7.23 7.28 7.91 9.70 10.66 10.66 16.1917.4019.20 19.60 20.75 24.25 IF]。 inlierIdx 设置为 0.25。但是,我得到的 middleRangeX 和 dimmdleRangeValues 都是空的。回归图显示在问题的正下方,因为我不知道如何在此处的评论栏中插入图片。我试图找出原因,但失败了。你能指出我在哪里犯了错误吗?谢谢!
  • @appi:有趣的是,如果输入中有Infrobustfit 会失败。我已经修改了代码,以便它可以处理您的新数据。
  • 我试过你的修改版本。是的,它有效!虽然不知道为什么会这样,但还是要谢谢你的解释。
  • @appi:第二行(我在这里获得具有有限条目的数据向量的索引)允许专门对有限数据执行拟合。或者你的意思是你不明白为什么稳健的最小二乘法有效?无论如何,如果事实证明我的解决方案是您问题的最佳答案,请考虑接受它。
猜你喜欢
  • 2019-07-13
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2016-03-20
  • 2014-10-06
  • 2018-06-29
相关资源
最近更新 更多