R语言使用Metropolis- Hasting抽样算法进行逻辑回归

在逻辑回归中,我们将二元响应\(Y_i \)回归到协变量\(X_i \)上。 下面的代码使用Metropolis采样来探索\(\ beta_1 \)和\(\ beta_2 \)的后验。 YiYi到协变量XiXi。让

定义expit和logit链接函数

 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)
     prior  <- sum(dnorm(beta,0,10,log=TRUE))
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

      # Draw candidate:

       canbeta    <- beta
       canbeta[j] <- rnorm(1,beta[j],can.sd)
       canlp      <- log_post(Y,X,canbeta)

      # Compute acceptance ratio:

       R <- exp(canlp-curlp)
       U <- runif(1)
       if(U<R){
         beta   <- canbeta
          acc[j] <- acc[j]+1
       }
     }
     keep.beta[i,]<-beta

   }
   # Return the posterior samples of beta and
   # the Metropolis acceptance rates
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
## elapsed
##    3.72

结果

 fit$acc.rate # Acceptance rates
## [1] 0.4504290 0.5147703
 acf(fit$beta)

?

  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] "Posterior mean/sd"
 print(round(apply(fit$beta[burn:n.samples,],2,mean),3))
## [1] -0.076  0.798
 print(round(apply(fit$beta[burn:n.samples,],2,sd),3))
## [1] 0.214 0.268
    print(summary(glm(Y~X,family="binomial")))
##
## Call:
## glm(formula = Y ~ X, family = "binomial")
##
## Deviance Residuals:
##     Min       1Q   Median       3Q      Max
## -1.6990  -1.1039  -0.6138   1.0955   1.8275
##
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.07393    0.21034  -0.352  0.72521
## X            0.76807    0.26370   2.913  0.00358 **
## ---
## Signif. codes:  0 ‘***‘ 0.001 ‘**‘ 0.01 ‘*‘ 0.05 ‘.‘ 0.1 ‘ ‘ 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
##     Null deviance: 138.47  on 99  degrees of freedom
## Residual deviance: 128.57  on 98  degrees of freedom
## AIC: 132.57
##
## Number of Fisher Scoring iterations: 4

还有问题吗?联系我们!

大数据部落 -中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务

统计分析和数据挖掘咨询服务:y0.cn/teradat(咨询服务请联系官网客服

?QQ:3025393450

?

【服务场景】  

科研项目; 公司项目外包;线上线下一对一培训;数据采集;学术研究;报告撰写;市场调查。

【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询服务

?

原文地址:https://www.cnblogs.com/tecdat/p/10718590.html

时间: 2024-07-29 02:59:40

R语言使用Metropolis- Hasting抽样算法进行逻辑回归的相关文章

R语言ROC曲线下的面积 - 评估逻辑回归中的歧视

原文链接:http://tecdat.cn/?p=6310 在讨论ROC曲线之前,首先让我们在逻辑回归的背景下考虑校准和区分之间的区别. 良好的校准是不够的 对于模型协变量的给定值,我们可以获得预测的概率.如果观察到的风险与预测的风险(概率)相匹配,则称该模型已被很好地校准.也就是说,如果我们要分配一组值的大量观察结果,这些观察结果的比例应该接近20%.如果观察到的比例是80%,我们可能会同意该模型表现不佳 - 这低估了这些观察的风险. 我们是否应满足于使用模型,只要它经过良好校准?不幸的是.为

SparkMLlib学习分类算法之逻辑回归算法

SparkMLlib学习分类算法之逻辑回归算法 (一),逻辑回归算法的概念(参考网址:http://blog.csdn.net/sinat_33761963/article/details/51693836) 逻辑回归与线性回归类似,但它不属于回归分析家族(主要为二分类),而属于分类家族,差异主要在于变量不同,因此其解法与生成曲线也不尽相同.逻辑回归是无监督学习的一个重要算法,对某些数据与事物的归属(分到哪个类别)及可能性(分到某一类别的概率)进行评估. (二),SparkMLlib逻辑回归应用

分类算法之逻辑回归(Logistic Regression

分类算法之逻辑回归(Logistic Regression) 1.二分类问题 现在有一家医院,想要对病人的病情进行分析,其中有一项就是关于良性\恶性肿瘤的判断,现在有一批数据集是关于肿瘤大小的,任务就是根据肿瘤的大小来判定是良性还是恶性.这就是一个很典型的二分类问题,即输出的结果只有两个值----良性和恶性(通常用数字0和1表示).如图1所示,我们可以做一个直观的判定肿瘤大小大于5,即为恶心肿瘤(输出为1):小于等于5,即为良性肿瘤(输出为0). 2.分类问题的本质 分类问题本质上属于有监督学习

R语言︱决策树族——随机森林算法

笔者寄语:有一篇<有监督学习选择深度学习还是随机森林或支持向量机?>(作者Bio:SebastianRaschka)中提到,在日常机器学习工作或学习中,当我们遇到有监督学习相关问题时,不妨考虑下先用简单的假设空间(简单模型集合),例如线性模型逻辑回归.若效果不好,也即并没达到你的预期或评判效果基准时,再进行下换其他更复杂模型来实验. ---------------------------------------------- 一.随机森林理论介绍 1.1 优缺点 优点. (1)不必担心过度拟合

R语言学习笔记—K近邻算法

K近邻算法(KNN)是指一个样本如果在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.即每个样本都可以用它最接近的k个邻居来代表.KNN算法适合分类,也适合回归.KNN算法广泛应用在推荐系统.语义搜索.异常检测. KNN算法分类原理图: 图中绿色的圆点是归属在红色三角还是蓝色方块一类?如果K=5(离绿色圆点最近的5个邻居,虚线圈内),则有3个蓝色方块是绿色圆点的"最近邻居",比例为3/5,因此绿色圆点应当划归到蓝色方块一类:如果

机器学习分类算法之逻辑回归

一.概念 逻辑回归(Logistic Regression,LR)是一种广义的线性回归分析模型,属于监督学习算法,需要打标数据,可以用在回归.二分类和多分类等问题上,最常用的是二分类. 线性回归就是通过一条曲线区分不同的数据集,在二分类问题上会有一条直线对其进行区分,如下: 逻辑回归需要每组数据都是都是数值型的,因为需要对其进行运算,得到直线系数,打标数据一般是0和1. 二.计算 逻辑回归的输出是一组特征系数,使用了 y=wx+b这种函数来进行线性拟合,这个问题的y值不是0,就是1.使用上述函数

分类算法之逻辑回归

Python实现机器学习算法:逻辑回归

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_classification def initialize_params(dims): w = np.zeros((dims, 1)) b = 0 return w, b def sigmoid(x): z = 1 / (1 + np.exp(-x)) return z def logisti

R语言数据挖掘实战系列(5)

R语言数据挖掘实战系列(5)--挖掘建模 一.分类与预测 分类和预测是预测问题的两种主要类型,分类主要是预测分类标号(离散属性),而预测主要是建立连续值函数模型,预测给定自变量对应的因变量的值. 1.实现过程 (1)分类 分类是构造一个分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别.分类模型建立在已有类标记的数据集上,模型在已有样本上的准确率可以方便地计算,所以分类属于有监督的学习. (2)预测 预测是建立两种或两种以上变量间相互依赖的函数模型,然后进行预测或控制.