Изменение параметра «Adjust» (R) «Adjust» в R приводит к тому, что область под кривой плотности значительно больше 1 - PullRequest
0 голосов
/ 31 октября 2018

плотность () Документация

trapz () Документация

Насколько я понимаю, площадь под кривой плотности равна 1 по определению, в противном случае это на самом деле не плотность.

Я писал код для создания GMM (модели гауссовой смеси) с некоторыми ограничениями и хотел сравнить вывод с моделью плотности. Я работаю с данными с большим количеством компонентов, некоторые из которых имеют очень узкие стандартные отклонения. Функция плотности () по умолчанию выглядела так, как будто она несколько сглаживала плотность моих эмпирических данных, поэтому я решил уменьшить пропускную способность. Плотность () включает параметр 'настроить', который, согласно документации, является коэффициентом пропускной способности ядер в плотности (). Я опустил значение до 0,1, а затем продолжил строить свой код моделирования. Когда пришло время протестировать модель, казалось, что она не может подняться до пика в данных. После долгого времени поиска ошибок в моем коде (не было очевидных после нескольких часов проверки и исправления) и переписывания алгоритма и получения того же результата, я протестировал область под кривой модели, которую я сгенерировал. Это было 1, но визуально намного ниже кривой, сгенерированной density(x = x, adjust = 0.1). Поэтому я решил проверить площадь под кривой плотности (). 6,28 для моих данных. Я был довольно удивлен этим - я сразу же отклонил идею, что AUC функции плотности () был чем-то отличным от 1.

Этот эффект повторяется с простой смесью на моем компьютере. Во-первых, пример, показывающий, что AUC для плотности образца составляет ~ 1 с параметром регулировки в 1.

require(stats)
require(pracma)
set.seed(1)
gaussianMix <- c(rnorm(n = 5000, 
                       mean = -50, 
                       sd = 50), 
                 rnorm(n = 100000, 
                       mean = 0, 
                       sd = 10),
                 rnorm(n = 10000,
                       mean = 50,
                       sd = 100)
                 )

mixtureDensity <- density(x = gaussianMix,
                          adjust = 1)

plot(mixtureDensity)

area <- trapz(mixtureDensity$x,
              mixtureDensity$y)
area

1.001025

Теперь с помощью и отрегулируйте параметр 0,1

require(stats)
require(pracma)
set.seed(1)
gaussianMix <- c(rnorm(n = 5000, 
                       mean = -50, 
                       sd = 50), 
                 rnorm(n = 100000, 
                       mean = 0, 
                       sd = 10),
                 rnorm(n = 10000,
                       mean = 50,
                       sd = 100)
                 )

mixtureDensity <- density(x = gaussianMix,
                          adjust = 0.1)

plot(mixtureDensity)

area <- trapz(mixtureDensity$x,
              mixtureDensity$y)
area

5.655676

Я что-то упускаю из виду? Почему коэффициент регулировки полосы пропускания приводит к тому, что AUC намного больше 1? Это достаточно легко объяснить, разделив вывод параметра density () $ y на вычисленную площадь под кривой, но было очень неприятно понять, что я смотрю на кривую «плотности» с AUC более 5.

1 Ответ

0 голосов
/ 01 ноября 2018

Вы что-то упускаете, хотя, может быть, это не очевидно. Посмотрите на график плотности: он очень угловой, совсем не гладкий. Вы не оцениваете это на достаточном количестве баллов. Если вы добавите n = 16384 к вашему density() вызову, вы оцените его в 32 раза больше очков, и оценка площади приблизится к 1.

mixtureDensity <- density(x = gaussianMix,
                          adjust = 0.1, n = 16384)

trapz(mixtureDensity$x, mixtureDensity$y)

# [1] 1.00003

Отредактировано, чтобы добавить: я думал, что это была просто ошибка интеграции, вызывающая проблему, но на самом деле это больше, чем это. Здесь я наложил 3 оценки плотности: n = 512 (по умолчанию, черным), n = 1024 (синим) и n = 16384 (красным):

enter image description here

Большие значения n воспроизводят красное. Так что на самом деле это выглядит так, как будто оценки плотности не верны, это не просто плохо дискретизировано.

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