Разметка осей на гистограмме R и графиках плотности;несколько наложений графиков плотности - PullRequest
2 голосов
/ 12 февраля 2012

У меня есть две проблемы.

Проблема 1 : в настоящее время я использую приведенный ниже код для создания гистограммы, наложенной на график плотности:

hist(x,prob=T,col="gray")
axis(side=1, at=seq(0,100, 20), labels=seq(0,100,20))
lines(density(x))

Я вставил данные (то есть x выше) здесь .

У меня есть две проблемы с кодом в его нынешнем виде:

  • последний тик и метка (100) оси X не отображаются на гистограмме / графике. Как я могу их надеть?
  • Я бы хотел, чтобы ось y имела счетчик или частоту, а не плотность, но я бы хотел сохранить график плотности в качестве наложения на гистограмму. Как я могу это сделать?

Задача 2 : используя решение, аналогичное задаче 1, теперь я хочу наложить три графика плотности (не гистограммы), снова с частотой на оси y вместо плотности. Три набора данных находятся по адресу:

  1. http://pastebin.com/z5X7yTLS

  2. http://pastebin.com/Qg8mHg6D

  3. http://pastebin.com/aqfC42fL

Ответы [ 2 ]

5 голосов
/ 12 февраля 2012

Вот ваши первые 2 вопроса:

    myhist <- hist(x,prob=FALSE,col="gray",xlim=c(0,100))
    dens <- density(x)
    axis(side=1, at=seq(0,100, 20), labels=seq(0,100,20))
    lines(dens$x,dens$y*(1/sum(myhist$density))*length(x))

Гистограмма имеет ширину ячейки 5, которая также равна 1/sum(myhist$density), тогда как density(x)$x - это небольшие скачки, около 0,2 в вашем случае (512 четных шагов). sum(density(x)$y) - это какое-то странное число, которое определенно не равно 1, но это потому, что оно идет небольшими шагами, а при делении на интервал x оно составляет примерно 1: sum(density(x)$y)/(1/diff(density(x)$x)[1]). Вам не нужно делать это позже, потому что он уже сопоставлен со своими нечетными значениями x. Масштаб 1) для ширины ячейки hist() и 2) для частоты x length(x), как говорит DWin. Тик последней оси стал видимым после установки аргумента xlim.

Чтобы решить вашу проблему 2, настройте график с правильными размерами (xlim и ylim), с помощью type = "n", затем нарисуйте 3 линии для плотностей, масштабированных с использованием чего-то похожего на линию плотности выше. Однако подумайте, хотите ли вы, чтобы эти полунепрерывные линии отражали высоту воображаемых столбцов с шириной бина 5 ... Вы видите, как это может привести к тому, что линии плотности будут преувеличивать значения в любой конкретной точке?

enter image description here

0 голосов
/ 24 июля 2012

Хотя это старая ветка, если кто-нибудь ее поймает. Я бы только подумал, что это «хорошая идея» - отказаться от перевода плотности y для подсчета шкал на основе того, что пытается сделать пользователь.

Есть вполне веские причины для использования частоты в качестве значения y. В частности, одна мысль, которая приходит на ум, состоит в том, что использование счетчиков для значения шкалы y может дать аналитику хорошее представление о том, с чего начать «поиск данных» для стратификации гетерогенных данных, если смешанная модель распределения не может быть применена разумно или интуитивно.

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

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