1、广义线性回归


广义线性模型有三个组成部分:
(1) 随机部分, 即变量所属的指数族分布 族成员, 诸如正态分布, 二项分布, Poisson 分布等等. (2) 线性部分, 即 η = x⊤β. (3) 连接函数 g(µ) = η。 R 中的广义线性模型函数glm() 对指数族中某分布的默认连接函数 是其典则连接函数, 下表列出了 R 函数glm() 所用的某些指数族分布的 典则连接函数.

2、0-1因变量的回归模型

对于因变量为0,1变量的问题,可以考虑两种模型来解决

经过Probit变换Logit变换,两种模型可以写成:

多变量情况:

logit回归

probit回归

3、案例分析

R中的广义线性回归函数为:glm()
语法为:glm(formula, family = gaussian, data, weights, subset, na.action, start = NULL, etastart, mustart, offset, control = glm.control(…), model = TRUE, method = “glm.fit”, x = FALSE, y = TRUE, contrasts = NULL, …)
与线性回归lm不同之处就在于参数family,这个参数的作用在于定义一个族以及连接函数,使用该连接函数将因变量的期望与自变量联系起来,例如:上面讲到的logit模型和probit模型的参数分别为family= binomial(link=logit)和family= binomial(link=probit).

数据集介绍

数据来自新竹市输血服务中心的记录http://archive.ics.uci.edu/ml/datasets/Blood+Transfusion+Service+Center变量有Recency(上次献血距离研究时的月份),Frequency(总献血次数),Time(第一次献血是多少个月之前),Donate(是否将在2007年3月再献血,1为会,0为不会)

分别三个变量与因变量的相关性



通过图可以看出,三个变量与因变量还是有一定的关系的。
完整代码附上,备注的比较详细,也比较简单。

a<-read.csv("Trans.csv",header=T)
a<-a[,-3] #去掉第三列
names(a)<-c("x1","x2","x3","y") #设置变量名
a1<-a[c(1:400),] #取前400行数据,赋值给a1
a2=a[c(401:748),] #取出从401行开始剩下所有行的数据,赋值给a2a1[c(1:5),] #展示a1前5行数据#画图
par(mfrow=c(2,2)) #设置画图模式为2*2的格式
boxplot(x1~y,data=a1,main="Recency") #画出Recency与Donated的盒状图
boxplot(x2~y,data=a1,main="Frequency") #画出Frequency与Donated的盒状图
boxplot(x3~y,data=a1,main="Time") #画出Time与Donated的盒状图par(mfrow=c(1,1)) #设置画图模式为1x1的格式#拟合回归图
glm0.a=glm(y~1,family=binomial(link=logit),data=a1) #拟合logistic回归,不使用任何变量的空模型
glm1.a=glm(y~x1+x2+x3,family=binomial(link=logit),data=a1) #拟合logit回归,使用所有变量全模型
anova(glm0.a,glm1.a) #计算glm0.a与glm1.a的deviance
1-pchisq(30.13,3)   #计算模型显著性检验的P值
glm1.b=glm(y~x1+x2+x3,family=binomial(link=probit),data=a1)   #拟合porbit回归,使用所有变量的全模型#参数估计
library(car)
Anova(glm1.a,type="III") #对模型glm1.a做三型方差分析
summary(glm1.a)     #显示模型glm1.a的各方面细节,包括参数估计值、P值等
Anova(glm1.b,type="III")     #对模型glm1.b做三型方差分析
summary(glm1.b)         #显示模型glm1.b的各方面细节,包括参数估计值、P值等
AIC(glm1.a)
AIC(glm1.b)#预测与评估
p=predict(glm1.a,a2)   #利用模型glm1.a对数据a2进行预测
p=exp(p)/(1+exp(p))       #计算预测得到的概率
p1 = predict(glm1.b,a2)#标准正分布
p1 = pnorm(p1)a2$y.pred=1*(p>0.5)    #以0.5为阈值生成预测值
table(a2[,c(4,5)])      #计算预测值与真实值的2维频数表
a21=a2[a2$y==1,]
nrow(a21)
nrow(a2)
a2$y.pred=1*(p>0.18)        #以0.18为阈值生成预测值
table(a2[,c(4,5)])      #计算预测值与真实值的2维频数表
ngrids=100     #设置格点数为100
TPR=rep(0,ngrids)      #为TPR(true positive ratio)赋初值
FPR=rep(0,ngrids)      #为FPR(false positive ratio)赋初值
for(i in 1:ngrids){p0=i/ngrids;   #选取阈值p0
y.true=a2$y        #从a2中取出真实值并赋值给y.true
y.pred=1*(p>p0) #以p0为阈值生成预测值
TPR[i]=sum(y.pred*y.true)/sum(y.true)  #计算TPR
FPR[i]=sum(y.pred*(1-y.true))/sum(1-y.true)    #计算FPR
}#画出ROC图
plot(FPR,TPR,type="l",col=2)    #画出FPR与TPR的散点图,即ROC曲线
points(c(0,1),c(0,1),type="l",lty=2) #添加对角线p=matrix(0,length(a2[,1]),3)    #生成矩阵,用于存储各模型的预测值
p[,1]=predict(glm0.a,a2)         #利用模型glm0.a对数据a2进行预测
p[,2]=predict(glm1.a,a2)       #利用模型glm1.a对数据a2进行预测
p[,3]=predict(glm1.b,a2)       #利用模型glm1.b对数据a2进行预测
p[,c(1:2)]=exp(p[,c(1:2)])/(1+exp(p[,c(1:2)]))                    #计算预测得到的概率
p[,3]=pnorm(p[,3])                         #计算预测得到的概率plot(c(0,1),c(0,1),type="l",main="FPR vs. TPR",xlab="FPR",ylab="TPR")     #画图,生成基本框架
FPR=rep(0,ngrids)                              #为FPR赋初值
TPR=rep(0,ngrids)                              #为TPR赋初值
for(k in 1:3){prob=p[,k]                               #ȡ??p?е?K?е?ֵ??????K??ģ?͵?Ԥ??????for(i in 1:ngrids){p0=i/ngrids                            #ѡȡ??ֵy.hat=1*(prob>p0)                     #??????ֵ????Ԥ??ֵFPR[i]=sum((1-y.true)*y.hat)/sum(1-y.true)         #????FPRTPR[i]=sum(y.true*y.hat)/sum(y.true)               #????TPR}points(FPR,TPR,type="b",col=k,lty=k,pch=k)               #??ͼ?????ӵ?k??ģ?͵?TPR??FPR??ɢ??ͼ
}
legend(0.6,0.5,c("logit??ģ??","logitȫģ??",  "probitȫģ??"),lty=c(1:3),col=c(1:3),pch=c(1:3))

广义线性回归模型之0,1变量回归(logit/probit回归)—R语言实现相关推荐

  1. R语言使用lm函数拟合多元线性回归模型、假定预测变量之间有交互作用、R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响

    R语言使用lm函数拟合多元线性回归模型.假定预测变量之间有交互作用.R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响 目录

  2. 泊松回归、gamma回归、Tweedie回归等广义线性回归模型GLM的评估指标:校准曲线、 洛伦兹曲线、卡方检验、AIC、BIC、偏差(Deviance)指标

    泊松回归.gamma回归.Tweedie回归等广义线性回归模型GLM的评估指标:校准曲线(Calibration curve). 洛伦兹曲线(Lorenz Curve).卡方检验.AIC.BIC.偏差 ...

  3. excel计算二元线性回归_R 回归分析(六)广义线性回归模型

    广义线性回归模型(GLM)是常见正太线性模型的直接推广,它适用于连续数据和离散数据,特别是后者,如属性数据.计数数据. 广义线性回归模型要求响应变量只能通过线性形式依赖于自变量,从而保持了线性自变量的 ...

  4. R语言使用lm函数拟合多元线性回归模型、假定预测变量没有交互作用(Multiple linear regression)

    R语言使用lm函数拟合多元线性回归模型.假定预测变量没有交互作用(Multiple linear regression) 目录

  5. R语言使用lm函数构建分层线性回归模型(添加分组变量构建分层线性回归模型)、使用coef函数提取分层线性回归模型的系数及截距、计算第一个分组的间距和斜率信息(第一个分组,对照组)

    R语言使用lm函数构建分层线性回归模型(添加分组变量构建分层线性回归模型).使用coef函数提取分层线性回归模型的系数及截距.计算第一个分组的间距和斜率信息(第一个分组,对照组) 目录

  6. R语言使用lm函数构建分层线性回归模型(添加分组变量构建分层线性回归模型)、使用coef函数提取分层线性回归模型的系数及截距

    ↵ R语言使用lm函数构建分层线性回归模型(添加分组变量构建分层线性回归模型).使用coef函数提取分层线性回归模型的系数及截距 目录

  7. 哑变量的基本介绍及R语言设置

    哑变量的基本介绍及R语言设置 1. 哑变量的基本介绍[摘自医咖会] 1.1 什么是哑变量? 1.2 什么情况下需要设置哑变量? 1.3 如何设置哑变量的参照组? 1.4 设置哑变量时的注意事项 2. ...

  8. 广义线性回归模型之定序回归(logit/probit回归)—R语言实现+苹果实体店客户满意度案例

    定序回归 什么是定序回归? 定序回归的因变量是定序变量,数据类型是顺序数据.比如不满意,一般,满意:不合格,合格,优秀等. 假设因变量是评分,先由单变量回归说起,则普通的线性回归模型为 由于方程右边的 ...

  9. R 回归 虚拟变量na_工具amp;方法 | R语言机器学习包大全(共45个包)

    机器学习,是一门多学科交叉的人工智能领域的分析技术,它使用算法解析数据,从中学习,然后对世界上的某件事情做出决定或预测. 目前,常见机器学习的研究方向主要包括决策树.随机森林.神经网络.贝叶斯学习和支 ...

最新文章

  1. Navicat for MySQL 设置定时任务
  2. Java 8中的可重复注释
  3. android 对称加密和非对称加密,Android开发加密之对称与非对称加密算法使用案例.pdf...
  4. PHPCMS 模板的设置
  5. 让8只数码管初始显示零,每隔大约1s加一显示,到数码管显示9后,再从一开始显示
  6. vue.js 使用axios实现下载功能
  7. JAVA Map 和 List 排序方法
  8. python opencv显示图片一闪而过_解决Opencv+Python cv2.imshow闪退问题
  9. 利用贝叶斯分类器进行文本挖掘---笔记
  10. c语言数组如何把一串数字存入数组_C语言 指针 (三)指针数组与数组指针
  11. L1-001. Hello World-PAT团体程序设计天梯赛GPLT
  12. [Music]乡村摇滚:Any man of mine
  13. python推箱子代码详细讲解_python实现推箱子游戏
  14. 如何利用python画三棱锥_玩转CSS 3D -正四面体与正六面体
  15. 统计学离散型变量和连续型变量有什么区别?
  16. 《液晶显示器和液晶电视维修核心教程》——2.7 光电耦合器
  17. 杂篇-01-Unity中创建Mesh时遇到的问题
  18. f2fs学习笔记 - 6. f2fs初始化流程
  19. # BJTUOJ 一颗姜会长多高? (二分+前缀和+简单贪心)
  20. 关于leetcode刷题计划

热门文章

  1. 超短激光与金属材料相互作用的Comsol双温模型(激光烧蚀)
  2. linux keypad driver
  3. 卡巴斯基文件服务器,卡巴斯基测试反病毒Linux文件服务器6.0
  4. 海康 大华 华为 宇视等安防摄像头、NVR、平台网关通过GB28181接入LiveGBS流媒体服务实现WEB无插件直播
  5. 以太坊智能合约solidity去中心化投票系统
  6. 瑞萨,尝试flash刷写代码放到ram中,OK
  7. 机器学习工具包SHOGUN用户文档翻译完成
  8. 最简单DIY基于ESP8266的智能彩灯⑦(APP通过彩虹调色板和WIFI控制WS2812彩灯)
  9. 超牛逼的性能调优神器 — 火焰图
  10. vim编辑了没有写权限的文件如可不退出保存