plot(density(rexp(100))
Очевидно, что вся плотность слева от нуля представляет собой смещение.
Я хочу обобщить некоторые данные для статистиков, и я хочу избежать вопросов о том, почему неотрицательные данные имеют плотность слева от нуля. Графики для проверки рандомизации; Я хочу показать распределение переменных по группам лечения и контроля. Распределения часто экспоненциальные. Гистограммы хитры по разным причинам.
Быстрый поиск в Google дает мне работу статистиков по неотрицательным ядрам, например: это .
Но было ли что-нибудь реализовано в R? Из реализованных методов, являются ли какие-либо из них «лучшими» в некоторой степени для описательной статистики?
РЕДАКТИРОВАТЬ: даже если from
команда может решить мою текущую проблему, было бы неплохо знать, внедрил ли кто-нибудь ядра на основе литературы по неотрицательной оценке плотности
источник
plot(density(rexp(100), from=0))
?Ответы:
Одно из решений, заимствованное из подходов к краевому взвешиванию пространственной статистики, состоит в том, чтобы обрезать плотность слева в ноль, но увеличить вес данных, которые ближе всего к нулю. Идея состоит в том, что каждое значение «распространяется» на ядро общей площади единицы с центром в x ; любая часть ядра, которая могла бы пролиться на отрицательную территорию, удаляется, и ядро перенормируется в единичную область.Икс Икс
Например, с гауссовым ядром , перенормировочный весКчас( у, х ) = опыт( - 12( ( у- х ) / ч )2) / 2 π--√
где - кумулятивная функция распределения нормального изменения среднего значения x и стандартного отклонения h . Сравнимые формулы доступны для других ядер.Φ Икс час
Код R
density
ФункцияR
будет жаловаться , что сумма весов не равен единице, так как он хочет , чтобы интеграл по всех действительных чисел равным единице, в то время как этот подход делает интеграл над положительными числами , равными единице. В качестве проверки последний интеграл оценивается как сумма Римана.источник
Альтернативой является подход Куперберга и его коллег, основанный на оценке плотности с использованием сплайнов для аппроксимации логарифмической плотности данных. Я покажу пример, используя данные из ответа @ whuber, который позволит сравнить подходы.
Для этого вам понадобится пакет logspline ; установите его, если это не так:
Загрузите пакет и оцените плотность, используя
logspline()
функцию:Далее я предполагаю, что объект
d
из ответа @ whuber присутствует в рабочей области.Полученный график показан ниже, а плотность сплайн-логарифмов показана красной линией
Кроме того, поддержка плотности может быть указана с помощью аргументов
lbound
иubound
. Если мы хотим предположить, что плотность равна 0 слева от 0, и в 0 есть разрыв, мы могли бы использоватьlbound = 0
в вызовеlogspline()
, например,Выводит следующую оценку плотности (показанную здесь с исходным
m
подбором лог-сплайна, так как предыдущий рисунок уже был занят).Получившийся сюжет показан ниже
x
x
источник
logspline
? Для меня плотность как ограниченной, так и неограниченной версии сводится к нулю приx = 0
.Чтобы сравнить распределения по группам (которые вы называете целью в одном из ваших комментариев), почему бы не сделать что-то попроще? Графики параллельных блоков работают хорошо, если N большое; графики с параллельными полосами работают, если N мало (и оба хорошо показывают выбросы, что, по вашим словам, является проблемой в ваших данных).
источник
В качестве комментариев Стефана вы можете использовать
from = 0
и, кроме того, вы можете представить свои значения под кривой плотности с помощьюrug (x)
источник
from=0
выглядит так, как будто он просто подавляет построение графиков для значений ниже 0; это не корректирует вычисления для того факта, что часть распределения была размазана ниже 0.from
команды дает график, который выглядит так, как будто он имеет пик справа от нуля. Но если вы посмотрите на гистограммы с постоянно меньшими ячейками, многие данные покажут пик AT нулевым. Этоfrom
просто графический трюк.from=0
что что-то подавляет. Он просто начинает «сетку» с нуля.density(rexp(100), from=0)
не имеет ничего общего с графикой