Расчет режима для номинальных и непрерывных переменных в [R] - PullRequest
3 голосов
/ 16 февраля 2011

Может ли кто-нибудь помочь мне с этим?

Если я бегу:

> mode(iris$Species)
[1] "numeric"
> mode(iris$Sepal.Width)
[1] "numeric"

Тогда я получаю "numeric" в ответ

Приветствия

M

Ответы [ 2 ]

9 голосов
/ 16 февраля 2011

Функция 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

В этом случае это не меняет результат.

2 голосов
/ 16 февраля 2011

см. ?mode: mode предоставляет вам режим хранения. Если вы хотите значение с максимальным количеством, используйте таблицу.

> Sample <- sample(letters[1:5],50,replace=T)
> tmp <- table(Sample)
> tmp
Sample
 a  b  c  d  e 
 9 12  9  7 13 
> tmp[which(tmp==max(tmp))]
 e 
13 

Пожалуйста, прочитайте файлы справки, если функция не выполняет то, что, по вашему мнению, должна.

Некоторые дополнительные пояснения:

max(tmp) - максимум tmp

tmp == max(tmp) дает логический вектор с длиной tmp, указывающий, равно ли значение максимальному (tmp).

which(tmp == max(tmp)) возвращает индекс значений в векторе, которые TRUE. Эти индексы вы используете для выбора значения в tmp, которое является максимальным значением.

См. Файлы справки ?which, ?max и вводные руководства для R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...