Функция mode()
используется для определения режима хранения объекта, в этом случае сохраняется как режим "numeric"
. Эта функция не используется для поиска наиболее «часто встречаемого» наблюдаемого значения в наборе данных, то есть она не используется для поиска статистического режима. См. ?mode
, чтобы узнать больше о том, что эта функция делает в R, и почему она бесполезна для вашей проблемы.
Для дискретных данных режим является наиболее частым наблюдаемым значением из набора:
> set.seed(1) ## reproducible example
> dat <- sample(1:5, 100, replace = TRUE) ## dummy data
> (tab <- table(dat)) ## tabulate the frequencies
dat
1 2 3 4 5
13 25 19 26 17
> which.max(tab) ## which is the mode?
4
4
> tab[which.max(tab)] ## what is the frequency of the mode?
4
26
Для непрерывных данных режим - это значение данных, при котором функция плотности вероятности (PDF) достигает максимума. Поскольку ваши данные, как правило, являются выборкой из некоторого непрерывного распределения вероятностей, мы не знаем PDF, но мы можем оценить его по гистограмме или, что лучше, по оценке плотности ядра.
Возвращаясь к данным радужной оболочки, вот пример определения режима по непрерывным данным:
> sepalwd <- with(iris, density(Sepal.Width)) ## kernel density estimate
> plot(sepalwd)
> str(sepalwd)
List of 7
$ x : num [1:512] 1.63 1.64 1.64 1.65 1.65 ...
$ y : num [1:512] 0.000244 0.000283 0.000329 0.000379 0.000436 ...
$ bw : num 0.123
$ n : int 150
$ call : language density.default(x = Sepal.Width)
$ data.name: chr "Sepal.Width"
$ has.na : logi FALSE
- attr(*, "class")= chr "density"
> with(sepalwd, which.max(y)) ## which value has maximal density?
[1] 224
> with(sepalwd, x[which.max(y)]) ## use the above to find the mode
[1] 3.000314
См. ?density
для получения дополнительной информации. По умолчанию density()
оценивает оценку плотности ядра в n = 512
местах с равным интервалом. Если это слишком грубо для вас, увеличьте количество оцененных и возвращенных мест:
> sepalwd2 <- with(iris, density(Sepal.Width, n = 2048))
> with(sepalwd, x[which.max(y)])
[1] 3.000314
В этом случае это не меняет результат.