Предположим, мне нужно x случайных чисел, которые в сумме дают единицу, и это распределение является экспоненциальным. Когда я использую

x<-c(10,100,1000)

a<-rexp(x[3],rate=1)

a<-a/sum(a)

Это изменит распределение, верно?

Так знает ли кто-нибудь способ, чтобы вероятности по-прежнему распределялись экспоненциально? Я знаю, что тогда они больше не будут полностью независимыми.

Большое спасибо!

1
JmO 3 Ноя 2018 в 14:16

2 ответа

Лучший ответ

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


Прямое доказательство

Пусть X 1 ,…, X n для некоторого конечного n будут случайными величинами, значения которых вы хотите сгенерировать. У вас есть два требования:

  1. X i ~ Exp (λ) для некоторого λ> 0 и i = 1,…, n.
  2. X < суб > 1 + ... + X < югу > п = 1 .

Хотя каждое из двух индивидуальных требований легко выполнить, невозможно выполнить оба одновременно. Причина в том, что функция плотности вероятности экспоненциального распределения имеет вид положительный на [0, ∞). Это означает, что каждый X i достигает значений больше 1 с положительной вероятностью, что означает, что требование 2 не всегда выполняется. Фактически, это выполняется с нулевой вероятностью.


Распределение вероятности, подразумеваемое нормализацией

Теперь вы предлагаете интуитивно понятный подход, чтобы начать с требования 1 и выполнить нормализацию Z i = X i / (X 1 +… + X n ) для каждого i = 1,…, n. Однако некоторые распределения хорошо себя ведут при преобразованиях, таких как сложение, умножение и особенно деление, потому что случайные знаменатели редко поддаются обработке. В этом случае возникает дополнительная сложность, связанная с зависимостью числителя и знаменателя Z i .

Тем не менее, название точного распределения Z i на самом деле известно, и это Распределение Дирихле. Чтобы убедиться в этом, обратите внимание, что X i ~ Gamma ( 1, λ), где λ действует как параметр скорости. Затем мы рассмотрим определение распределения Дирихле: мы начинаем с Y i ~ Gamma (α i , θ) для i = 1,…, n, а затем, как вы предлагаете, определите W i = Y < sub> i / (Y 1 +… + Y n ). Тогда (W 1 ,…, W n ) ~ Дирихле (α i ,…, α n ). Однако в случае требования 1 мы имеем, что α i = 1 для каждого i = 1,…, n. Таким образом, ваш подход приводит к (Z 1 ,…, Z n ) ~ Dirichlet (1,…, 1).

Затем вы можете моделировать значения из него, например, с помощью пакета MCMCpack:

library(MCMCpack)
rdirichlet(1, c(1, 1, 1))
#           [,1]      [,2]       [,3]
# [1,] 0.2088649 0.7444334 0.04670173
sum(rdirichlet(1, c(1, 1, 1)))
# [1] 1

Теперь посмотрим на функцию плотности вероятности Дирихле (1, ..., 1) вы можете заметить, что он на самом деле постоянный (когда положительный). Так что в некотором смысле вы можете рассматривать его как многомерный однородный. Это имеет смысл, если вы подумаете об этом на секунду (например, подумайте, если точки на x + y = 1, x + y + z = 1).

Однако многомерное распределение, будучи в некоторой степени однородным, не означает чего-то подобного с точки зрения маржинальных распределений. Фактически, можно показать, что они являются бета-версией (1, n-1).

На Z i ограничено [0,1]

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

Кумулятивная функция распределения X i ~ Exp (λ) равна 1-exp (-λx). Итак, тогда P (X i <= 1) = 1-exp (-λ), который равен 1 только в пределе λ-> ∞, но в этом случае X сходится к 0 в распределении. Таким образом, у нас не может быть невырожденная экспоненциальная случайная величина, ограниченная [0,1]. Однако обратите внимание, что для больших фиксированных значений λ 1-exp (-λ) близко к 1, и можно ошибочно думать, что X i на самом деле ограничено [0,1].

Пара банальных демонстраций. Во-первых, Z i (следуя распределению Дирихле) ограничено [0,1].

data <- replicate({
  x <- rexp(5)
  z <- x[1] / sum(x)}, n = 100000)
range(data)
# [1] 1.060492e-06 9.633081e-01
plot(density(data, bw = 0.01))

enter image description here

Во-вторых, X ~ Exp (1) явно принимает значения выше 1.

x <- rexp(10000)
range(x)
# [1] 7.737341e-05 1.005980e+01
mean(x < 1)
# [1] 0.6391
plot(density(x))

enter image description here


Масштабирование с положительным коэффициентом

Было несколько комментариев, предлагающих использовать факт, что экспоненциальное распределение закрыто при масштабировании положительный множитель, так что если X ~ Exp (λ), то kX ~ Exp (λ / k). Это, конечно, правда, но в данном случае это не применимо. Причина в том, что k = X 1 +… + X n не является константой (это означает, что k отличается для разных реализаций X i ) и по этой причине kX ~ Exp (λ / k) не выполняется. Теперь, если мы будем рассматривать k как константу (например, 5), тогда не будет никакой гарантии, что Z i = X i / 5 будет удовлетворять вашему требованию 2. Фактически , ограничение будет выполняться с вероятностью 0.

Чтобы иметь четкое представление о том, что происходит, и не вводить себя в заблуждение эмпирическими «доказательствами» @MauritsEvers, вот еще несколько деталей.

Пусть (Ω, F, P) - вероятностное пространство. Тогда X i : Ω-> R; т.е. X i - это функция, принимающая значения X i (ω) в R, с результатами ω (представьте их как значения set.seed) из Ω. Теперь у нас действительно есть то свойство, что для константы k kX i ~ Exp (λ / k). Под константой, однако, подразумевается, что независимо от реализованного результата ω из Ω, значение k всегда одно и то же, как если бы k: Ω-> R было постоянной функцией. @MauritsEvers предлагает k = X 1 +… + X n . Это, однако, рассматривается как функция, не является постоянной и зависит от результата ω.

Вот несколько тривиальных примеров, демонстрирующих, как эта логика не работает: let k = 1 / X i . Тогда kX i = 1, что является вырожденной случайной величиной, а не экспоненциальной. Аналогично, если X ~ N (0,1), то kX = 1, а не kX ~ N (0,1 / X ^ 2), что "следует" из того факта, что X ~ N (0,1) дает kX ~ N (0, k ^ 2) для постоянной k.


Ошибочная логика

Теперь можно сказать, что источником этой ошибочной логики, описанной выше, является неправильная обработка вероятностных концепций + работа непосредственно с смоделированными значениями в R. @MauritsEvers утверждает, что если мы запустим

n <- 3
x <- rexp(n)
k <- sum(x)

Тогда реализованную сумму k можно использовать как константу k, упомянутую выше, и ожидать, что kX i ~ Exp (?). Проверка корректности взятия n <- 1, как в приведенном выше примере, уже показывает, что что-то не так с аргументами такого рода, поскольку тогда x / k просто 1 - вырожденная случайная величина, а не экспоненциальный. Утверждается, что k <- sum(x) - правильный выбор, потому что это ряд уже наблюдаемых реализаций. На самом деле это причина, по которой этот выбор недействителен. В обозначениях, сделанных ранее, мы имеем k (ω) = X 1 (ω) +… + X n (ω), так что k не является постоянной функцией.

Другой способ взглянуть на это состоит в том, что если мы видим x каким-то образом случайным, тогда k будет таким же случайным , как и сумма x. Теперь и x, и k являются числами, реализациями, но мы не знаем ни одного из их значений, прежде чем попросим R вывести их. Определение константы k таково, что мы всегда знаем ее значение, независимо от ω или set.seed.

Наконец, в качестве упражнения для бакалавров можно рассмотреть возможность рассмотрения CDF kX i :

P (kX i <= x) = P (X i <= x / k) = 1-ехр (-λx / k)

И, следовательно, kX i ~ Exp (λ / k), как и ожидалось. Теперь возьмите n <- 2. В этом случае мы имеем дело с

P (X 1 / (X 1 + X 2 ) <= x)

И мы больше не можем так легко избавиться от сложного знаменателя. Конечно, мы можем определить константу k = X 1 (ω) +… + X n (ω) для некоторого фиксированного ω из Ω. Но тогда Z i = X i / (X 1 (ω) +… + X n (ω) ) больше не ограничиваются [0,1], и требование 2 снова не выполняется.


Ложные эмпирические "доказательства"

Наконец, можно спросить, почему эмпирическое «доказательство» @MauritsEvers частично (поскольку моделирование + подгонка + проверка гипотез далеко от теоретического доказательства) утверждает, что Z i действительно следует экспоненциальному распределению.

Решающим элементом этого «доказательства» было взятие lambda <- 1 и n <- 1000, относительно больших значений. В этом случае мы имеем

Z i = X i / (X 1 +… + X n ) ≈ X i / n * n / (X 1 +… + X n ).

Второй член в правой части по закону больших чисел переходит в λ - фиксированное число, а первый член, как мы знаем, следует за Exp (λn). Итак, для большого n мы получаем приближение Z i как λExp (λn). Однако исходный вопрос не в аппроксимациях или предельных распределениях.


Резюме

Можно выделить следующие три случая:

  1. Малая п. (Z 1 ,…, Z n ) следует распределению Дирихле (1,…, 1), а маргинальные распределения не эквивалентны экспоненциальным. Аппроксимация их экспоненциальными дает произвольно плохие результаты.
  2. Большой п. (Z 1 ,…, Z n ) по-прежнему следует распределению Дирихле (1,…, 1), и маржинальные распределения по-прежнему не эквивалентны экспоненциальным. Однако их приближение экспоненциальными должно дать вполне обоснованные результаты для практических целей.
  3. Предельный случай, когда n-> ∞. По мере увеличения n каждый Z i становится все ближе и ближе к λExp (λn). Однако, как мы видели, λExp (λn) стремится к вырожденной случайной величине, тождественно равной нулю.
2
Julius Vainora 3 Дек 2018 в 20:56

От ?rexp

rexp(n, rate = 1)
   [...]
   n: number of observations. If ‘length(n) > 1’, the length is
      taken to be the number required.

Так

x<-c(10,100,1000)
a<-rexp(x,rate=1)

Такой же как

rexp(3, rate = 1)

Нормализация его к 1 гарантирует, что (экспоненциальная) функция вероятности удовлетворяет критериям (экспоненциальной) функции плотности вероятности.


Обновить

После непонятного обсуждения с @JuliusVainora я продемонстрирую, что a действительно распределяется экспоненциально.

  1. Сгенерируем данные заново:

    x <- c(10, 100, 1000)
    set.seed(2018)
    a <- rexp(x[3], rate=1)
    a <- a / sum(a)
    

    Я использую фиксированное случайное начальное число для воспроизводимости.

  2. Я использую байесовскую экспоненциальную модель для оценки lambda на основе a с использованием rstan

    library(rstan)
    stan_code <- "
    data {
        int N;
        real x[N];
    }
    
    parameters {
        real lambda;
    }
    
    model {
        x ~ exponential(lambda);
    }
    "
    
    fit <- stan(
        model_code = stan_code,
        data = list(N = length(a), x = a))
    
    fit
    #Inference for Stan model: b690462e8562075784125cf0e71c81e2.
    #4 chains, each with iter=2000; warmup=1000; thin=1;
    #post-warmup draws per chain=1000, total post-warmup draws=4000.
    #
    #          mean se_mean    sd    2.5%     25%     50%     75%   97.5% n_eff Rhat
    #lambda 1000.21    0.80 31.11  941.86  978.74  998.95 1020.84 1062.97  1502    1
    #lp__   5907.27    0.02  0.66 5905.52 5907.09 5907.53 5907.71 5907.75  1907    1
    #
    #Samples were drawn using NUTS(diag_e) at Sun Nov  4 01:09:40 2018.
    #For each parameter, n_eff is a crude measure of effective sample size,
    #and Rhat is the potential scale reduction factor on split chains (at
    #convergence, Rhat=1).
    
  3. Мы выполняем тест Колмогорова-Смирнова, чтобы сравнить эмпирическое распределение a с таковым для экспоненциального распределения с lambda, оцененным по предыдущей модели Стэна.

    ks.test(a, "pexp", summary(fit)$summary[1, 1])
    #
    #   One-sample Kolmogorov-Smirnov test
    #
    #data:  a
    #D = 0.021828, p-value = 0.7274
    #alternative hypothesis: two-sided
    

    При p -значении 0,72 мы не можем отклонить нулевую гипотезу о выборках, взятых из двух разных распределений.


Обновление 2

Чтобы прояснить обсуждение в комментариях:

  1. Это просто (и намного более прозрачно IMO), чтобы продемонстрировать, что семейство экспоненциальных распределений замкнуто при масштабировании на положительный коэффициент без необходимости задействовать весь теоретико-межевой механизм.

  2. Что еще более важно, давайте вспомним, что любая функция плотности вероятности определяется как

    phi(x) = p(x) * N
    

    где

    N = int p(x) 
    

    причем интеграл берется по выборке p(x), такой что

    int phi(x) = 1.
    

    Да, это одно и то же p(x) как в выражении для phi, так и для N. А вот и важная часть: N по-прежнему остается константой, поскольку мы суммируем (интегрируем) по всему пространству выборки.

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

0
Rob 19 Ноя 2018 в 04:48