Как сгенерировать распределение данных, значит, SD, перекос и эксцесс в R? - PullRequest
37 голосов
/ 26 января 2011

Можно ли сгенерировать распределения в R, для которых известны Среднее, SD, перекос и эксцесс?До сих пор кажется, что лучшим способом было бы создать случайные числа и преобразовать их соответственно.Если есть пакет, предназначенный для генерации определенных дистрибутивов, который можно адаптировать, я еще не нашел его.Спасибо

Ответы [ 8 ]

33 голосов
/ 26 января 2011

В пакете SuppDists есть дистрибутив Johnson. Джонсон даст вам распределение, которое соответствует либо моментам, либо квантилям. Другие комментарии верны, что 4 момента не делает раздачу. Но Джонсон обязательно попробует.

Вот пример подгонки Джонсона к некоторым образцам данных:

require(SuppDists)

## make a weird dist with Kurtosis and Skew
a <- rnorm( 5000, 0, 2 )
b <- rnorm( 1000, -2, 4 )
c <- rnorm( 3000,  4, 4 )
babyGotKurtosis <- c( a, b, c )
hist( babyGotKurtosis , freq=FALSE)

## Fit a Johnson distribution to the data
## TODO: Insert Johnson joke here
parms<-JohnsonFit(babyGotKurtosis, moment="find")

## Print out the parameters 
sJohnson(parms)

## add the Johnson function to the histogram
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")

Окончательный сюжет выглядит так:

enter image description here

Вы можете увидеть небольшую проблему, которую другие указывают на то, что 4 момента не полностью отражают распределение.

Удачи!

EDIT Как указала Хэдли в комментариях, форма Джонсона выглядит отстраненной. Я провел быстрый тест и подгонял распределение Джонсона, используя moment="quant", которое соответствует распределению Джонсона, используя 5 квантилей вместо 4 моментов. Результаты выглядят намного лучше:

parms<-JohnsonFit(babyGotKurtosis, moment="quant")
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")

, который производит следующее:

enter image description here

У кого-нибудь есть идеи, почему Джонсон кажется предвзятым, когда подходит, используя моменты?

12 голосов
/ 27 января 2011

Это интересный вопрос, который на самом деле не имеет хорошего решения.Я предполагаю, что, хотя вы не знаете других моментов, у вас есть представление о том, как должен выглядеть дистрибутив.Например, он унимодален.

Существует несколько различных способов решения этой проблемы:

  1. Предполагается базовое распределение и моменты совпадения.Для этого существует множество стандартных R-пакетов.Недостатком является то, что многомерное обобщение может быть неясным.

  2. Седловые приближения.В этой статье:

    Гиллеспи, К.С. и Реншоу, Е. Улучшенное приближение седловой точки. Математические биологические науки , 2007.

    Мы смотрим на восстановлениеpdf / pmf, когда даны только первые несколько минут.Мы обнаружили, что этот подход работает, когда асимметрия не слишком велика.

  3. Разложения Лагерра:

    Мустафа Х. и Димитракопулоса Р. Обобщенные разложения Лагерра многомерных плотностей вероятностей с моментами . Компьютеры и математика с приложениями , 2010.

    Результаты в этой статье кажутся более многообещающими, но я не кодировал их.

8 голосов
/ 23 октября 2014

Этот вопрос был задан более 3 лет назад, поэтому я надеюсь, что мой ответ не приходит слишком поздно.

Там - это способ однозначно идентифицировать распределение при знании некоторых моментов. Таким способом является метод Максимальная энтропия . Распределение, полученное в результате этого метода, является распределением, которое максимизирует ваше незнание о структуре распределения, с учетом того, что вы знаете . Любой другой дистрибутив, который также имеет моменты, которые вы указали, но не является распределением MaxEnt, неявно предполагает большую структуру, чем то, что вы вводите. Функцией максимизации является информационная энтропия Шеннона, $ S [p (x)] = - \ int p (x) log p (x) dx $. Зная среднее значение, sd, асимметрию и эксцесс, переведите как ограничения на первый, второй, третий и четвертый моменты распределения соответственно.

Проблема в том, чтобы максимизировать S с учетом ограничений: 1) $ \ int x p (x) dx = "первый момент" $, 2) $ \ int x ^ 2 p (x) dx = "второй момент" $, 3) ... и так далее

Я рекомендую книгу «Харт, Дж. Максимальная энтропия и экология: теория изобилия, распределения и энергетики» (Oxford University Press, New York, 2011). »

Вот ссылка, которая пытается реализовать это в R: https://stats.stackexchange.com/questions/21173/max-entropy-solver-in-r

3 голосов
/ 16 октября 2018

Одним из решений для вас может быть библиотека PearsonDS. Это позволяет использовать комбинацию первых четырех моментов с ограничением, что эксцесс> перекос ^ 2 + 1.

Чтобы сгенерировать 10 случайных значений из этого распределения, попробуйте:

library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)
3 голосов
/ 22 января 2013

Я согласен, вам нужна оценка плотности для репликации любого распределения. Однако, если у вас есть сотни переменных, как это обычно бывает в симуляции Монте-Карло, вам потребуется компромисс.

Один из предложенных подходов следующий:

  1. Используйте преобразование Флейшмана, чтобы получить коэффициент для данного перекоса и эксцесса. Флейшман берет перекос и эксцесс и дает вам коэффициенты
  2. Генерация N нормальных переменных (среднее = 0, стандартная = 1)
  3. Преобразование данных в (2) с коэффициентами Флейшмана для преобразования нормальных данных в заданный перекос и эксцесс
  4. На этом шаге используйте данные из шага (3) и преобразуйте их в желаемое среднее значение и стандартное отклонение (стандартное отклонение), используя new_data = желаемое среднее + (данные из шага 3) * желаемое стандартное значение

Полученные в результате шага 4 данные будут иметь желаемое среднее значение, стандартное отклонение, асимметрию и эксцесс.

Предостережения:

  1. Fleishman не будет работать для всех комбинаций асимметрии и kurtois
  2. Вышеуказанные шаги предполагают некоррелированные переменные. Если вы хотите сгенерировать коррелированные данные, вам потребуется шаг до преобразования Флейшмана
2 голосов
/ 26 января 2011

Эти параметры на самом деле не полностью определяют распределение.Для этого вам нужна плотность или эквивалентная функция распределения.

1 голос
/ 11 января 2019

Метод энтропии - хорошая идея, но если у вас есть образцы данных, вы используете больше информации по сравнению с использованием только моментов!Поэтому момент подгонки часто менее стабилен.Если у вас нет больше информации о том, как выглядит дистрибутив, энтропия - это хорошая концепция, но если у вас есть больше информации, например, о поддержке, используйте ее!Если ваши данные искажены и положительны, то лучше использовать логнормальную модель.Если вы также знаете, что верхний хвост конечен, то не используйте логнормальное распределение, но, возможно, бета-распределение с 4 параметрами.Если ничего не известно о опорных или хвостовых характеристиках, то, возможно, хорошо подходит масштабированная и смещенная логнормальная модель.Если вам нужна большая гибкость в отношении куртоза, то, например, logT с масштабированием + смещением часто подойдет.Также может помочь, если вы знаете, что подгонка должна быть почти нормальной, если это так, тогда используйте модель, которая включает нормальное распределение (часто так или иначе), иначе вы можете, например, использовать обобщенное секуще-гиперболическое распределение.Если вы хотите сделать все это, то в какой-то момент модель будет иметь несколько других случаев, и вы должны убедиться, что нет пробелов или плохих эффектов перехода.

0 голосов
/ 26 января 2011

Как написали выше @David и @Carl, есть несколько пакетов, предназначенных для генерации различных дистрибутивов, см., Например, Представление задач распределения вероятностей в CRAN .

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

См. конкретный пример здесь , где я вычислил альфа- и бета-параметры требуемого бета-распределения на основе среднего значения и стандартного отклонения.

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