Этот вопрос мотивирован моим вопросом о метаанализе . Но я полагаю, что это также было бы полезно при обучении контекстов, в которых вы хотите создать набор данных, который точно отражает существующий опубликованный набор данных.
Я знаю, как генерировать случайные данные из данного распределения. Так, например, если я читаю о результатах исследования, которое имело:
- среднее значение 102,
- стандартное отклонение 5,2, и
- размер выборки 72.
Я мог бы сгенерировать аналогичные данные, используя rnorm
R. Например,
set.seed(1234)
x <- rnorm(n=72, mean=102, sd=5.2)
Конечно, среднее значение и SD не будут точно равны 102 и 5.2 соответственно:
round(c(n=length(x), mean=mean(x), sd=sd(x)), 2)
## n mean sd
## 72.00 100.58 5.25
В целом меня интересует, как симулировать данные, которые удовлетворяют набору ограничений. В приведенном выше случае составляющими являются размер выборки, среднее значение и стандартное отклонение. В других случаях могут быть дополнительные ограничения. Например,
- минимум и максимум в данных или базовой переменной могут быть известны.
- известно, что переменная принимает только целочисленные значения или только неотрицательные значения.
- данные могут включать несколько переменных с известными взаимными корреляциями.
Вопросов
- В общем, как я могу симулировать данные, которые точно удовлетворяют набору ограничений?
- Есть ли статьи, написанные по этому поводу? Есть ли в R программы, которые это делают?
- Для примера, как можно и нужно моделировать переменную, чтобы она имела определенное среднее значение и sd?
источник
x<-rnorm(72);x<-5.2*(x-mean(x))/sd(x)+102
делает трюк.Ответы:
В целом, чтобы среднее значение и дисперсия в вашей выборке были в точности равны предварительно заданному значению, вы можете соответствующим образом изменить и масштабировать переменную. В частности, если - образец, то новые переменныеX1,X2,...,Xn
где - среднее значение выборки, а - выборочная дисперсия такова, что среднее значение выборки для равно а их выборочная дисперсия равна точно . Аналогично построенный пример может ограничить диапазон -s 2 X =1X¯¯¯¯=1n∑ni=1Xi Zяс2с1s2X=1n−1∑ni=1(Xi−X¯¯¯¯)2 Zi c2 c1
создаст набор данных который ограничен интервалом .B1,...,Bn (a,b)
Примечание. Эти типы сдвига / масштабирования, как правило, изменяют семейство данных, даже если исходные данные принадлежат семейству масштабов местоположения.
В контексте нормального распределения
mvrnorm
функцияR
позволяет моделировать нормальные (или многомерные нормальные) данные с заранее определенным образцом средней / ковариацией путем установкойempirical=TRUE
. В частности, эта функция моделирует данные из условного распределения нормально распределенной переменной, учитывая, что среднее значение выборки и (со) дисперсия равна предварительно заданному значению . Обратите внимание, что получающиеся маргинальные распределения не являются нормальными, как указал @whuber в комментарии к основному вопросу.Вот простой одномерный пример, где среднее значение выборки (из выборки ) ограничено равным 0, а стандартное отклонение выборки равно 1. Мы можем видеть, что первый элемент гораздо больше похож на равномерное распределение, чем нормальное распределение:n=4
источник
Что касается вашего запроса на документы, есть:
Это не совсем то, что вы ищете, но может служить зерном для мельницы.
Есть еще одна стратегия, о которой никто, кажется, не упомянул. Можно генерировать (псевдо) случайных данных из набора размера , чтобы весь набор удовлетворял ограничениям, при условии, что оставшиеся данных фиксированы в соответствующих значениях. Требуемые значения должны быть решаемы с помощью системы уравнений, алгебры и некоторого количества коленчатого смазочного материала.N−k N k k k
Например, чтобы сгенерировать набор из данных из нормального распределения, который будет иметь заданное среднее значение выборки, , и дисперсию , вам нужно будет зафиксировать значения двух точек: и . Поскольку среднее значение выборки: должно быть: Пример дисперсии: таким образом (после замены вышеуказанного на , срыв / распределение и перестановка ... ) мы получили:N x¯ s2 y z
R
Есть несколько вещей, чтобы понять об этом подходе. Во-первых, это не гарантирует работу. Например, возможно, что ваши исходные данные таковы, что не существует значений и , из-за которых дисперсия полученного набора будет равна . Рассмотреть возможность:N−2 y z s2
Во-вторых, в то время как стандартизация делает предельные распределения всех ваших вариантов более равномерными, этот подход влияет только на последние два значения, но делает их предельные распределения перекошенными:
В-третьих, полученный образец может выглядеть не совсем нормально; может показаться, что у него есть «выбросы» (т. е. точки, полученные из процесса генерации данных, отличного от остальных), поскольку это, по сути, так. Это менее вероятно, будет проблемой с большими размерами выборки, так как статистика выборки из сгенерированных данных должна сходиться к требуемым значениям и, следовательно, нуждается в меньшей корректировке. С небольшими выборками вы всегда можете объединить этот подход с алгоритмом принятия / отклонения, который повторяет попытку, если сгенерированный образец имеет статистику формы (например, асимметрию и эксцесс), которые находятся за пределами допустимых границ (см., Комментарий @ cardinal ), или расширяете этот подход для генерации выборки с фиксированным средним, дисперсией, асимметрией иkurtosis (я оставлю алгебру до вас, хотя). Кроме того, вы можете сгенерировать небольшое количество выборок и использовать одну с наименьшей (скажем) статистикой Колмогорова-Смирнова.
источник
Общий метод - «Метод отклонения», при котором вы просто отклоняете результаты, которые не соответствуют вашим ограничениям. Если у вас нет какого-либо руководства (например, MCMC), то вы можете генерировать множество случаев (в зависимости от вашего сценария), которые отклоняются!
Там, где вы ищете что-то вроде среднего и стандартного отклонения, и вы можете создать метрику расстояния для определения расстояния до цели, вы можете использовать оптимизацию для поиска входных переменных, которые дают желаемый результат. ценности.
В качестве ужасного примера, где мы будем искать случайный равномерный вектор длиной 100, который имеет среднее значение = 0 и стандартное отклонение = 1.
источник
Пакет Runuran R содержит много методов для генерации случайных переменных. Он использует библиотеки C из проекта UNU.RAN (Универсальный генератор неоднородных случайных чисел). Мои собственные знания в области генерации случайных вариаций ограничены, но рунурская виньетка дает хороший обзор. Ниже приведены доступные методы в пакете Runuran, взятые из виньетки:
Непрерывные распределения:
Дискретные распределения:
Многомерные распределения:
Пример:
Для быстрого примера, предположим, что вы хотите сгенерировать нормальное распределение, ограниченное от 0 до 100:
Эта
urnorm()
функция является удобной функцией-оберткой. Я считаю, что за кулисами он использует метод полиномиальной интерполяции обратного CDF, но я не уверен. Для чего-то более сложного, скажем, дискретного нормального распределения, ограниченного от 0 до 100:источник
Кажется, есть пакет R, отвечающий вашим требованиям, опубликованный только вчера! симстуди Кит Голдфельд
источник
Это ответ, приходящий так поздно, что он, по-видимому, не имеет смысла, но всегда есть решение MCMC для этого вопроса. А именно, чтобы спроецировать общую плотность образца на многообразии, определяемом ограничениями, например, Единственная проблема заключается в моделировании значений по этому многообразию, т. е. в поиске параметризации правильного измерения. Статья Bornn, Shephard и Solgi, опубликованная в 2015 году, исследует эту проблему (с интересным, если не окончательным ответом ). n ∑ i = 1 xi=μ0
источник
Этот ответ рассматривает другой подход к случаю, когда вы хотите, чтобы переменные лежали в указанном диапазоне и дополнительно определяли среднее значение и / или дисперсию.
Ограничим наше внимание единичным интервалом . Давайте используем взвешенное среднее для общности, поэтому зафиксируем некоторые веса с помощью или установите если вы хотите стандартное взвешивание. Предположим, что величины и представляют желаемую (взвешенную) среднюю и (взвешенную) дисперсию соответственно. Верхняя граница необходима, потому что это максимально возможная дисперсия на единичном интервале. Нам интересно нарисовать некоторые переменные из с этими моментными ограничениями.[0,1] wk∈[0,1] ∑Nk=1wk=1 wk=1/N μ∈(0,1) 0<σ2<μ(1−μ) σ2 x1,...,xN [0,1]
Сначала мы нарисуем некоторые переменные из любого распределения, например . Это распределение будет влиять на форму окончательного распределения. Затем мы ограничим их единичным интервалом с помощью логистической функции:y1,...,yN N(0,1) [0,1]
Однако, прежде чем мы это сделаем, как видно из приведенного выше уравнения, мы преобразуем с переводом и масштабом . Это аналогично первому уравнению в ответе @ Macro. Хитрость заключается в том, чтобы выбрать и чтобы преобразованные переменные имели желаемый момент (ы). То есть нам требуется одно или оба из следующих условий:yk h v h v x1,...,xN
Аналитически инвертировать эти уравнения для и не представляется возможным, но сделать это численно просто, особенно потому, что производные по и легко вычислить; это займет всего несколько итераций метода Ньютона.v h v h
В качестве первого примера, скажем, мы заботимся только об ограничении взвешенного среднего значения, а не о дисперсии. Fix , , , . Тогда для базовых распределений , и мы получаем следующие гистограммы, соответственно, и такие, что среднее значение переменных составляет точно (даже для маленьких ):v = 1 w k = 1 / N N = 200000 N ( 0 , 1 ) N ( 0 , 0,1 ) Unif ( 0 , 1 ) 0,8 Nμ=0.8 v=1 wk=1/N N=200000 N(0,1) N(0,0.1) Unif(0,1) 0.8 N
Далее, давайте ограничим среднее и дисперсию. Возьмите , , и рассмотрите три желаемых стандартных отклонения . Используя одно и то же базовое распределение , вот гистограммы для каждого:w k = 1 / N N = 2000 σ = 0,1 , 0,05 , 0,01 N ( 0 , 1 )μ=0.2 wk=1/N N=2000 σ=0.1,0.05,0.01 N(0,1)
Обратите внимание, что они могут выглядеть немного бета-распределенными, но это не так.
источник
В моем ответе здесь я перечислил три пакета R для этого:
источник