Простая обработка данных - PullRequest
       9

Простая обработка данных

4 голосов
/ 05 февраля 2011

Допустим, я получил этот набор данных. После сортировки раздачу можно оформить как ниже.

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]

plot for the data

Мой вопрос: как мне найти те значения, которые находятся в среднем диапазоне, и записать индексы? Используете нормальное распространение или что-то еще? Ценю вашу помощь!

Изображение для Джонаса 'enter image description here

Ответы [ 2 ]

6 голосов
/ 05 февраля 2011

Если ваш средний диапазон равен [-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(:) используется здесь, чтобы гарантировать, что quantile обрабатывает M как вектор.Вы можете принять соглашение, что все векторы в ваших программах являются векторами столбцов, тогда большинство функций автоматически обрабатывает их правильно.

Обновление:
Теперь, для очень короткого описанияквантили таковы: это точки, взятые из интегральной функции распределения (cdf) случайной величины.(Теперь ваш M считается своего рода cdf, поскольку он не уменьшается и может быть нормализован для суммирования до 1).Теперь «просто« квантиль .5 ваших данных »означает, что 50% значений ниже, чем этот квантиль».Более подробную информацию о квантилях можно найти, например, здесь .

1 голос
/ 05 февраля 2011

Если вы не знаете априори каков ваш средний диапазон, но вы знаете, что хотите отбросить выбросы как в начале, так и в конце нашей кривой, и если у вас есть Панель инструментов статистики: вы можете сделать надежную линейную регрессию с вашими данными, используя 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')

the plot

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
...