拓端tecdat|R语言辅导使用Metropolis- Hasting抽样算法进行逻辑回归
原文链接:http://tecdat.cn/?p=6761
在逻辑回归中,我们将二元因变量Y_i回归到协变量X_i上。下面的代码使用Metropolis采样来探索 beta_1和beta_2 的后验Yi到协变量Xi。
定义expit和分对数链接函数
-
logit<-function(x){log(x/(1-x))} 此函数计算beta_1,beta_2的联合后验。它返回后验的对数以获得数值稳定性。(β1,β2)(β1,β2)。它返回后验的对数获得数值稳定性。
-
log_post<-function(Y,X,beta){
-
prob1 <- expit(beta[1] + beta[2]*X)
-
like+prior}
这是MCMC的主要功能.can.sd是候选标准偏差。
-
Bayes.logistic<-function(y,X,
-
n.samples=10000,
-
can.sd=0.1){
-
-
keep.beta <- matrix(0,n.samples,2)
-
keep.beta[1,] <- beta
-
-
acc <- att <- rep(0,2)
-
-
for(i in 2:n.samples){
-
-
for(j in 1:2){
-
-
att[j] <- att[j] + 1
-
-
# 抽取候选:
-
-
canbeta <- beta
-
canbeta[j] <- rnorm(1,beta[j],can.sd)
-
canlp <- log_post(Y,X,canbeta)
-
-
# 计算接受率:
-
-
R <- exp(canlp-curlp)
-
U <- runif(1)
-
if(U<R){
-
acc[j] <- acc[j]+1
-
}
-
}
-
keep.beta[i,]<-beta
-
-
}
-
# 返回beta的后验样本和Metropolis的接受率
-
-
-
list(beta=keep.beta,acc.rate=acc/att)}
生成模拟数据
-
set.seed(2008)
-
n <- 100
-
X <- rnorm(n)
-
true.p <- expit(true.beta[1]+true.beta[2]*X)
-
Y <- rbinom(n,1,true.p)
拟合模型
-
burn <- 10000
-
n.samples <- 50000
-
fit <- Bayes.logistic(Y,X,n.samples=n.samples,can.sd=0.5)
-
tock <- proc.time()[3]
-
-
tock-tick
结果
abline(true.beta[1],0,lwd=2,col=2)
abline(true.beta[2],0,lwd=2,col=2)
-
hist(fit$beta[,1],main="Intercept",xlab=expression(beta[1]),breaks=50)
-
-
hist(fit$beta[,2],main="Slope",xlab=expression(beta[2]),breaks=50)
-
abline(v=true.beta[2],lwd=2,col=2)
-
print("Posterior mean/sd")
-
-
-
-
-
-
-
##
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
非常感谢您阅读本文,有任何问题请在下面留言!
最受欢迎的见解
1.使用R语言进行METROPLIS-IN-GIBBS采样和MCMC运行
3.R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样
4.R语言BUGS JAGS贝叶斯分析 马尔科夫链蒙特卡洛方法(MCMC)采样
5.R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归
7.R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数
▍关注我们
【大数据部落】第三方数据服务提供商,提供全面的统计分析与数据挖掘咨询服务,为客户定制个性化的数据解决方案与行业报告等。
▍咨询链接:http://y0.cn/teradat
▍联系邮箱:3025393450@qq.com