2012-03-13 1 views
1

Функция mode -функция в Matlab возвращает значение, которое чаще всего встречается в наборе данных. Но ", когда несколько значений происходят одинаково часто, режим возвращает наименьшее из этих значений."Адаптация функции режима для поддержки центральных значений (Matlab)

Это не очень полезно для того, для чего я его использую, я бы предпочел, чтобы он возвращал медианное или среднее арифметическое при отсутствии модального значения (поскольку они, по крайней мере, несколько находятся в середине распределения). В противном случае результаты использования mode слишком велики на нижней стороне шкалы (у меня есть много уникальных значений в моем распределении).

Есть ли элегантный способ сделать mode выгоднее использовать центральные значения в наборе данных (при отсутствии истинного модального значения)?


кстати .: я знаю, что я мог бы использовать [M,F] = mode(X, ...), чтобы вручную проверить наиболее часто встречающееся значение (и вычислить медиану или среднее значение при необходимости). Но это похоже на неловкое решение, так как я почти полностью переписал все, что должно делать mode. Я надеюсь, что есть более элегантное решение.

ответ

0

Похоже, что вы хотите получить третий выходной аргумент от mode. EG:

x = [1 1 1 2 2 2 3 3 3 4 4 4 5 6 7 8]; 
[m,f,c] = mode(x); 
valueYouWant = median(c{1}); 

Или (с медианой занимает среднее значений, когда есть четное число записей), в тех случаях, когда четное число значений может иметь такое же максимальное число вхождений, возможно, сделать что-то вроде это:

valueYouWant = c{1}(ceil(length(c{1})/2)) 
+0

Теперь я использую 'roundn' для постепенного округления входных значений, если не найдено окончательного модального значения. Если после 5 проходов все еще не найдено уникального модального значения, используется медиана (как в вашем примере). Так работает как шарм, спасибо! –

Смежные вопросы