Оригинальная ссылка:tecdat.cn/?p=23524
Первоисточник:Публичный аккаунт Tuoduan Data Tribe
В этой статье я хочу показать вам, как использовать выборку Metropolis R для выборки из байесовской регрессионной модели Пуассона.
Алгоритм Метрополиса-Гастингса
Алгоритм выборки Метрополиса-Гастингса представляет собой класс методов Монте-Карло с цепями Маркова (MCMC), основная идея которых заключается в создании цепи Маркова.Сделайте его стационарное распределение целевым распределением. Одним из наиболее распространенных применений этого алгоритма является выборка из апостериорных плотностей в байесовской статистике, что и является целью данной статьи.
Алгоритм определяет, как генерировать следующее состояние для данного состояния XtСуществует точка-кандидат Y, которая распространяется из предложения
, сгенерированный в , принимается в соответствии с критериями принятия решения, поэтому цепочка переходит в состояние Y в момент времени t+1, т.е. Xt+1=Y, или отвергается, поэтому цепочка остается в состоянии Xt в момент времени t+1, т.е. Xt+ 1=Хт.
Выборка Метрополиса
В алгоритме Метрополиса распределение предложений симметрично, то есть распределение предложенийудовлетворить
, поэтому процесс сэмплера Метрополиса, генерирующего цепь Маркова, выглядит следующим образом.
- Выберите распространение предложения
, Прежде чем выбрать его, поймите идеальные характеристики в этой функции.
- Сгенерируйте X0 из распределения предложения g.
- Повторяйте, пока цепь не сойдется к стационарному распределению.
- от
генерировать Ю.
- Сгенерируйте U из униформы (0, 1).
- если
, принимает Y и устанавливает Xt+1=Y, иначе устанавливает Xt+1=Xt. Это означает, что точка-кандидат Y принимается с высокой вероятностью
.
- Приращение т.
Байесовский метод
Как я упоминал ранее, мы хотим получить выборку из байесовской модели регрессии Пуассона.
Для оценки параметров в байесовском анализе нам необходимо найти функцию правдоподобия интересующей модели, в данном случае, из модели регрессии Пуассона.
Теперь нам нужно указать априорное распределение для каждого из параметров β0 и β1. Мы будем использовать неинформативные нормальные распределения для этих двух параметров, β0~N(0,100) и β1~N(0,100).
Наконец, мы определяем апостериорное распределение как произведение априорного распределения и распределения правдоподобия.
При использовании пробоотборника Metropolis целевым распределением будет апостериорное распределение.
метод расчета
Здесь вы узнаете, как использовать сэмплер Metropolis R для выборки из апостериорного распределения параметров β0 и β1.
данные
Во-первых, мы генерируем данные из модели регрессии Пуассона, представленной выше.
n <- 1000 # 样本大小
J <- 2 # 参数的数量
X <- runif(n,-2,2) # 生成自变量的值
beta <- runif(J,-2,2) #生成参数的值
y <- rpois(n, lambda = lambda) # 生成因变量的值
Функция правдоподобия
Теперь мы определяем функцию вероятности. В этом случае мы будем использовать логарифм этой функции, которая настоятельно рекомендуется избегать численных проблем при запуске алгоритма.
LikelihoodFunction <- function(param){
beta0 <- param[1]
beta1 <- param[2]
lambda <- exp(beta1*X + beta0)
# 对数似然函数
loglikelihoods <- sum(dpois(y, lambda = lambda, log=T))
return(loglikelihoods)
}
предварительное распределение
Далее мы определяем априорные распределения для параметров β0 и β1. Как и в случае с функцией правдоподобия, мы будем использовать журнал априорного распределения.
beta0prior <- dnorm(beta0, 0, sqrt(100), log=TRUE)
beta1prior <- dnorm(beta1, 0, sqrt(100), log=TRUE)
return(beta0prior + beta1prior) #先验分布的对数
Апостериорное распределение
Поскольку мы работаем с логарифмами, мы определяем апостериорное распределение как сумму логарифма функции правдоподобия и логарифма априорного распределения. Помните, что эта функция — наша целевая функция f(.), из которой мы хотим сделать выборку.
Функция предложения
Наконец, мы определяем распределение предложений g(.|Xt). Поскольку мы будем использовать сэмплер Metropolis, распределение предложения должно быть симметричным и зависеть от текущего состояния цепочки, поэтому мы будем использовать нормальное распределение со средним значением, равным значению параметра в текущем состоянии.
Метрополис Сэмплер
Наконец, мы пишем код, который помогает нам запускать сэмплер Metropolis. В этом случае, поскольку мы используем логарифмы, мы должны определить вероятность того, что точка-кандидат Y будет принята как .
# 创建一个数组来保存链的值
chain[1, ] <- startvalue # 定义链的起始值
for (i in 1:iterations){
# 从提议函数生成Y
Y <- ProposalFunction(chain[i, ])
# 候选点被接受的概率
PosteriorFunction(chain[i, ]))
# 接受或拒绝Y的决策标准
if (runif(1) < probability) {
chain[i+1, ] <- Y
}else{
chain[i+1, ] <- chain[i, ]
Из-за сильной автокорреляции цепочки MCMC в краткосрочной перспективе могут быть получены выборки, которые не являются репрезентативными для истинного лежащего в основе апостериорного распределения. Затем, чтобы уменьшить автокорреляцию, мы можем просто разбавить выборку каждым n значениями в цепочке. В этом случае мы будем выбирать значение для нашей последней цепочки каждые 20 итераций алгоритма.
startvalue <- c(0, 0) # 定义链条的起始值
#每20次迭代选择最终链的值
for (i in 1:10000){
if (i == 1){
cfinal[i, ] <- chain[i*20,]
} else {
cfinal[i, ] <- chain[i*20,]
# 删除链上的前5000个值
burnIn <- 5000
Здесь вы можете увидеть график ACF, который дает нам значение автокорреляции любого ряда со значениями его запаздывания. В этом случае мы показываем график АКФ исходной цепи MCMC и конечной цепи после разбавления образцов для обоих параметров. Из графика можно сделать вывод, что использованная процедура действительно способна значительно уменьшить автокорреляцию.
результат
В этом разделе мы представляем цепочку, созданную пробоотборником Metropolis, и ее распределение по параметрам β0 и β1. Истинное значение параметра представлено красной линией.
Сравнение с glm()
Теперь нам нужно сравнить результаты, полученные с помощью выборки Метрополиса, с функцией glm(), которая используется для подбора обобщенной линейной модели.
В таблице ниже приведены фактические значения параметров и среднее значение оценок, полученных с помощью пробоотборника Metropolis.
## True value Mean MCMC glm
## beta0 1.0578047 1.0769213 1.0769789
## beta1 0.8113144 0.8007347 0.8009269
в заключении
Из результатов можно сделать вывод, что оценочные значения параметров β0 и β1 регрессионной модели Пуассона, полученные с помощью пробоотборника Metropolis и функции glm(), очень похожи и близки к фактическим значениям параметров. Кроме того, необходимо признать, что выбор априорного распределения, распределения предложения и начального значения цепочки оказывает большое влияние на результаты, поэтому этот выбор должен быть сделан правильно.
Самые популярные идеи
1.Случай применения многомерной логистической регрессии на языке R
2.Пример реализации панельного регрессионного анализа с плавным переходом (PSTR)
4.R Язычный бассейн Пуассон регрессионный анализ
5.Тест согласия Хосмера-Лемешова в регрессии на языке R
6.Реализация регрессии LASSO, регрессии Ridge и модели эластичной сети на языке r
7.Реализация логистической логистической регрессии на языке R
8.python использует линейную регрессию для прогнозирования цен на акции
9.Как язык R рассчитывает показатели IDI, NRI в анализе выживаемости и регрессии Кокса