如何用r 实现logistic 多元logistic回归分析析

苹果/安卓/wp
积分 1189, 距离下一级还需 186 积分
权限: 自定义头衔, 签名中使用图片, 隐身
道具: 涂鸦板, 彩虹炫, 雷达卡, 热点灯, 显身卡, 匿名卡, 金钱卡, 抢沙发下一级可获得
权限: 设置帖子权限道具: 变色卡, 提升卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 变色卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 525 天连续签到: 1 天[LV.9]以坛为家II
本帖最后由 moonstone 于
15:55 编辑
SAS中Proc logisitc过程提供了很完善的logistic回归的分析功能,学习R中完成此过程只是想比较一下两个软件在完成此过程的差别。虽然有很多帖子介绍如何采用R完成logistic回归过程,但是都相对过于简单,对于以下常用细节很少涉及。
1、模型筛选方法
2、如何简单设定哑变量
3、针对分类变量,如何选取特定水平作为参考水平
4、如何简单输出OR值及置信区间
5、如何构建条件logistic回归过程
6、不同模型的预测效果比较
虽然之前有很多帖子比较SAS与R的差别,但是多是基于宏观层面的。通过比较实现某一具体过程的细微差别,估计更能体会两者的功能差异。
以下是自己学习的笔记,附有一些简单说明,供参考,希望对大家有帮助,也非常欢迎跟帖交流你在运用R进行Logistic回归时的学习心得:
library(stats)
help(infert)& && && && && && && &# Description of data
infert &- data.frame(infert)
str(infert)& && && && && && && & # Check type of variables
summary(infert)& && && && && && &# Statistical summary
## Model1 Develop a simple logistic regression:
model1 &- glm(case ~ spontaneous+induced, data = infert, family = binomial())
## Model output
summary(model1)& && && && && && &&&# Output summary information
confint(model1)& && && && && && &&&# Output 95% CI for the coefficients
exp(coef(model1))& && && && && && &# Output OR (exponentiated coefficients)
exp(confint(model1))& && && && && &# 95% CI for exponentiated coefficients
predict(model1, type=&risk&)& && & # predicted values
residuals(model1, type=&deviance&) # residuals
## Model2 Develop a logistic regression adjusted for other potential confounders:
model2 &- glm(case ~ age+parity+education+spontaneous+induced,data = infert,
& && && && &&&family = binomial())
summary(model2)
## Model3 Develop a conditional logistic regression
library(survival)
model3 &- clogit(case ~ spontaneous+induced+strata(stratum), data = infert)
summary(model3)
## Model4 Conditional logistic regression&&
## Transfer the numerous variable into category variable
model4 &- clogit(case ~ factor(spontaneous)+factor(induced)+strata(stratum),
& && && && && &&&data = infert)
summary(model4)
## Model5 Conditional logistic regression
## Conduct a subgroup analysis
## &subset& is not aviable for &clogit&
## create the subset first
str(infert$education)
infert1 &- subset(infert,education ==&12+ yrs&)
model5 &- clogit(case ~ factor(spontaneous)+ factor(induced)+ strata(stratum),
& && && && && &&&data = infert1)
summary(model5)
## Model6 General logistic regression&&
## Change the reference category for category variable
## Note: Argument &contrasts& not matched in clogit
infert$spontaneous &-
&&as.factor(infert$spontaneous)
infert$induced &-
&&as.factor(infert$induced)
infert$spontaneous &-
&&relevel(infert$spontaneous, ref = &2&)
infert$induced &-
&&relevel(infert$induced, ref = &1&)
model6 &- glm(case ~ spontaneous+induced,
& && && && &&&data = infert)
summary(model6)
## Model7 General logistic regression
## Performs stepwise model selection by AIC
## Note: Model selection in R is based on AIC but not P value
model7 &- glm(case ~ spontaneous+induced+factor(education)+age+parity,data = infert)
summary(model7)
model8 &-step(model7)&&## Default direction is &backward&
summary(model8)
model9 &-step(model7,direction=&both&)
summary(model9)
## Compare the AUC of two ROC curves
infert$pred6 &-predict(model6)
infert$pred8 &-predict(model8)
library(&pROC&)
rocobj1 &- plot.roc(infert$case,
& && && && && && &&&infert$pred6,
& && && && && && &&&percent=TRUE,ci=TRUE,col=&#1c61b6&)&&
rocobj2 &- plot.roc(infert$case,
& && && && && && &&&infert$pred8,
& && && && && && &&&add=TRUE,percent=TRUE,ci=TRUE,col=&#008600&)&&
testobj &- roc.test(rocobj1, rocobj2)&&
text(50, 50, labels=paste(&p-value =&,
& && && && && && && && &&&format.pval(testobj$p.value)), adj=c(0, .5))&&
legend(&bottomright&, legend=c(&Model5&, &Model8&),
& && & col=c(&#1c61b6&, &#008600&),lwd=2,ncol=2)复制代码
鼓励积极发帖讨论
总评分:&经验 + 200&
论坛币 + 21&
学术水平 + 5&
热心指数 + 5&
信用等级 + 2&
本帖被以下文库推荐
& |主题: 615, 订阅: 191
xiaolovesfan 发表于
请问这个infertcase是什么,报错了这是论坛对R语言编码显示的问题造成的,应该是infert$case,中间的“$”显示不全
本帖最后由 moonstone 于
14:23 编辑 xiaolovesfan 发表于
还是没懂,infert和case的字体怎么不一样?实在是抱歉,这是论坛的原因,infert和case中间应该有一个美元&$&的符号,连起来的意思就是选中infert数据框的case变量,也即构建ROC曲线的真实患病信息。
这个问题不止一次出现了,不知道为什么论坛显示编码时,对这个符号不能正确显示。
本帖最后由 moonstone 于
14:34 编辑 xiaolovesfan 发表于
我知道是怎么回事了。这里应该是infert$pred5吧,不是infert$pred6谢谢,这个地方确实笔误了。^_^,已经修改
另外,对于$显示不正确的事情也已经修改,再看一下原始的编码。
具体解决方法是:同一行中不能出现两次美元号,不然就会被认为是特殊字符,显示为斜体。
也希望这个回复对论坛出现类似问题问题的坛友有点帮助吧
xiaolovesfan 发表于
能问一下,Model5是什么意思嘛?是只对 education =&12+& 的子集建模吗?是,R没法像SAS里面的Proc logisitic过程中的by选项一样,根据by变量构建分层logisitc回归,只能选取亚集分别进行logisitic回归,这是SAS和R在完成logisitic回归上功能上最大的不一致。
xiaolovesfan 发表于
我还有一个问题哈~这里只用education =&12+&,是只对education=12岁以上的建模是吗?education的其他组就 ...非常感谢,示例只是一种举例,所以比较model5和model8确实没有特别明确的意义。
但是即使是示例,确实应该考虑实际意义。所以一开始的笔误应该是pred6而不是pred5,已经修改。
已经进一步完善“如何选取特定水平作为参考水平”的方法,也即采用stat程序包里面的relevel函数功能,这种方法比采用contrast函数更加实用,但是注意一点relevel函数只适用于factor变量,所以如果是数值型变量,需要先采用as.factor函数进行转换。具体函数已经在主函数中进行修改,这里再复制一下,强调一下relevel的功能:infert$spontaneous &-
&&as.factor(infert$spontaneous)
infert$induced &-
&&as.factor(infert$induced)
infert$spontaneous &-
&&relevel(infert$spontaneous, ref = &2&)
infert$induced &-
&&relevel(infert$induced, ref = &1&)
model6 &- glm(case ~ spontaneous+induced,
& && && && &&&data = infert)
summary(model6)复制代码
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师Sina Visitor SystemR语言logistic回归模型
logistic回归模型为:
对上面的模型进行变换,得到线性形式的logistic回归模型:
在二项分布族中,logistic回归是重要的模型。在某些回归问题中,响应变量是分类的,经常是要么成功,要么失败。
在R语言构建数据框时,应输入一列成功(响应)的次数和一列不成功(不响应)的次数,例如:
norell&-data.frame(
x=0:5,n=rep(70,6),success=c(0,9,21,47,60,63)
norell$Ymat&-cbind(norell$success,norell$n-norell$success)
glm.sol&-glm(Ymat~x,family=binomial,data=norell)
summary(glm.sol)
#预测并画出回归曲线
d&-seq(0, 5, len=100)
pre&-predict(glm.sol, data.frame(x = d))
p&-exp(pre)/(1+exp(pre))
norell$y&-norell$success/norell$n
plot(norell$x, norell$y); lines(d, p)
得到回归方程(变换后的)右侧为:-3.9X
于是回归方程为:
没有更多推荐了,请在APP上操作
打开万方数据APP,点击右上角"扫一扫",扫描二维码即可将您登录的个人账号与机构账号绑定,绑定后您可在APP上享有机构权限,如需更换机构账号,可到个人中心解绑。
检索详情页
{"words":"$head_words:logistic回归模型+$head_words:P\\(O\\)lya\\-Gamma分布+$head_words:MCMC+$head_words:R语言","themeword":"$head_words","params":"$title:在R语言中实现Bayes方法对logistic的回归分析"}
&&&在R语言中实现Bayes方法对logistic的回归分析
在R语言中实现Bayes方法对logistic的回归分析
Bayesian inference for logistic models in R Language
对于logistic回归分析的处理办法,一直采用的都是极大似然估计的EM算法,由于计算方法的固定及计算过程的复杂性,例如,该算法对于初值的选取要求很高,否则收敛速度很慢.Gibbs抽样法作为一种高效灵活的估计方法广泛应用于广义线性回归模型,其中Probit回归模型由于联系函数为正态分布,使得回归系数的后验分布为共轭正态,从而抽样简单快捷.而Logit模型的后验分布比较复杂,无法直接抽取.本文基于增加数据的Gibbs抽样方法,通过引入POlya-Gamma分布族的潜在变量,使得模型中的回归系数参数的满条件分布为共轭正态分布,从而回归系数的马氏链很容易构造,回归系数的估计为后验均值估计.通过一组实际数据,分别调用R语言Glm包和BayesLogit包,并对比2种方法的估计结果,二者差别不大,表明POlya-Gamma潜变量Bayes估计法在处理logistic回归模型时的可用性、准确性.
摘要: 对于logistic回归分析的处理办法,一直采用的都是极大似然估计的EM算法,由于计算方法的固定及计算过程的复杂性,例如,该算法对于初值的选取要求很高,否则收敛速度很慢.Gibbs抽样法作为一种高效灵活的估计方法广泛应用于广义线性回归模型,其中Probit回归模型由于联系函数为正态分布,使得回归系数的后验分布为共轭正态,从而抽样简单快捷.而Logit模型的后...&&
相关论文(与本文研究主题相同或者相近的论文)
同项目论文(和本文同属于一个基金项目成果的论文)
您可以为文献添加知识标签,方便您在书案中进行分类、查找、关联
请输入添加的标签
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)
&北京万方数据股份有限公司 万方数据电子出版社
实名学术社交
个性化订阅推荐
快速查看收藏过的文献总结:基于R实现logistic回归模型
1 基于R软件的logistic回归模型建模
&& 百度文库
2 精确Logistic回归的R语言实现
Logistic回归(logistic
regression)属于概率型非线性回归,是分析反应变量为独立分类资料的常用统计分析方法,由于对资料的正态性和方差齐性不做要求、对自变量类型也不做要求等,使得Logistic回归模型在医学研究各个领域被广泛用。Logistic回归的基本方法是极大似然方法,其前提是样本较大。但在样本量较小、数据结构较偏时,其结果会不可靠甚至无法求解。
精确Logistic回归(Exact logistic
regression)则可以用来解决这一问题,该方法通过建立条件似然函数,进一步求出参数的充分统计量的分布函数。随着计算方法的发展和优化,也出现了使用马尔可夫链蒙特卡罗算法来模拟精确Logistic回归。R语言中的elrm包就可以实现这种算法。
本例用到的数据来自elrm包的drugDat数据
sex treatment recovered n
1 1 1 16 27
3 1 0 13 32
2 0 1 10 19
4 0 0 7 21
使用elrm命令建立精确Logistic回归模型
drug.elrm=elrm(formula=recovered/n~sex+treatment,interest=~sex+treatment,iter=100000,burnIn=1000,dataset=drugDat)
结果显示如下:
estimate p-value p-value_se mc_size
NA 0.13083
95% Confidence Intervals for Parameters
-0..129768
treatment -0..129493
Logistic回归(logistic
regression)属于概率型非线性回归,是分析反应变量为独立分类资料的常用统计分析方法,由于对资料的正态性和方差齐性不做要求、对自变量类型也不做要求等,使得Logistic回归模型在医学研究各个领域被广泛用。Logistic回归的基本方法是极大似然方法,其前提是样本较大。但在样本量较小、数据结构较偏时,其结果会不可靠甚至无法求解。
精确Logistic回归(Exact logistic
regression)则可以用来解决这一问题,该方法通过建立条件似然函数,进一步求出参数的充分统计量的分布函数。随着计算方法的发展和优化,也出现了使用马尔可夫链蒙特卡罗算法来模拟精确Logistic回归。R语言中的elrm包就可以实现这种算法。
本例用到的数据来自elrm包的drugDat数据
sex treatment recovered n
1 1 1 16 27
3 1 0 13 32
2 0 1 10 19
4 0 0 7 21
使用elrm命令建立精确Logistic回归模型
drug.elrm=elrm(formula=recovered/n~sex+treatment,interest=~sex+treatment,iter=100000,burnIn=1000,dataset=drugDat)
结果显示如下:
estimate p-value p-value_se mc_size
NA 0.13083
95% Confidence Intervals for Parameters
-0..129768
treatment -0..129493
Logistic回归(logistic
regression)属于概率型非线性回归,是分析反应变量为独立分类资料的常用统计分析方法,由于对资料的正态性和方差齐性不做要求、对自变量类型也不做要求等,使得Logistic回归模型在医学研究各个领域被广泛用。Logistic回归的基本方法是极大似然方法,其前提是样本较大。但在样本量较小、数据结构较偏时,其结果会不可靠甚至无法求解。
精确Logistic回归(Exact logistic
regression)则可以用来解决这一问题,该方法通过建立条件似然函数,进一步求出参数的充分统计量的分布函数。随着计算方法的发展和优化,也出现了使用马尔可夫链蒙特卡罗算法来模拟精确Logistic回归。R语言中的elrm包就可以实现这种算法。
本例用到的数据来自elrm包的drugDat数据
sex treatment recovered n
1 1 1 16 27
3 1 0 13 32
2 0 1 10 19
4 0 0 7 21
使用elrm命令建立精确Logistic回归模型
drug.elrm=elrm(formula=recovered/n~sex+treatment,interest=~sex+treatment,iter=100000,burnIn=1000,dataset=drugDat)
结果显示如下:
estimate p-value p-value_se mc_size
NA 0.13083
95% Confidence Intervals for Parameters
-0..129768
treatment -0..129493
&Logistic回归(logistic
regression)属于概率型非线性回归,是分析反应变量为独立分类资料的常用统计分析方法,由于对资料的正态性和方差齐性不做要求、对自变量类型也不做要求等,使得Logistic回归模型在医学研究各个领域被广泛用。Logistic回归的基本方法是极大似然方法,其前提是样本较大。但在样本量较小、数据结构较偏时,其结果会不可靠甚至无法求解。
精确Logistic回归(Exact logistic
regression)则可以用来解决这一问题,该方法通过建立条件似然函数,进一步求出参数的充分统计量的分布函数。随着计算方法的发展和优化,也出现了使用马尔可夫链蒙特卡罗算法来模拟精确Logistic回归。R语言中的elrm包就可以实现这种算法。
本例用到的数据来自elrm包的drugDat数据
sex treatment recovered n
1 1 1 16 27
3 1 0 13 32
2 0 1 10 19
4 0 0 7 21
使用elrm命令建立精确Logistic回归模型
drug.elrm=elrm(formula=recovered/n~sex+treatment,interest=~sex+treatment,iter=100000,burnIn=1000,dataset=drugDat)
结果显示如下:
estimate p-value p-value_se mc_size
joint&&&&&&&&&&
NA 0.13083&&&
0.00183&& 99000
sex&&&&&&&
0.52727&&&
0.00954&&&
treatment& 0.84871
0.07439&&&
0.00296&& 13389
95% Confidence Intervals for Parameters
&&&&&&&&&&&&&&
-0..129768
treatment -0..129493
3 R语言基础入门之六:Logistic回归
本文用例来自于John Maindonald所著的《Data Analysis and Graphics Using
R》一书,其中所用的数据集是anesthetic,数据集来自于一组医学数据,其中变量conc表示麻醉剂的用量,move则表示手术病人是否有所移动,而我们用nomove做为因变量,因为研究的重点在于conc的增加是否会使nomove的概率增加。
首先载入数据集并读取部分文件,为了观察两个变量之间关系,我们可以利cdplot函数来绘制条件密度图.
library(DAAG)
head(anesthetic)
cdplot(factor(nomove)~conc,data=anesthetic,main='条件密度图',ylab='病人移动',xlab='麻醉剂量')
从图中可见,随着麻醉剂量加大,手术病人倾向于静止。下面利用logistic回归进行建模,得到intercept和conc的系数为-6.47和5.57,由此可见麻醉剂量超过1.16(6.47/5.57)时,病人静止概率超过50%。
anes1=glm(nomove~conc,family=binomial(link='logit'),data=anesthetic)
summary(anes1)
上面的方法是使用原始的0-1数据进行建模,即每一行数据均表示一个个体,另一种是使用汇总数据进行建模,先将原始数据按下面步骤进行汇总
anestot=aggregate(anesthetic[,c('move','nomove')],by=list(conc=anesthetic$conc),FUN=sum)
anestot$conc=as.numeric(as.character(anestot$conc))
anestot$total=apply(anestot[,c('move','nomove')],1,sum)
anestot$prop=anestot$nomove/anestot$total
得到汇总数据anestot如下所示
& conc move nomove
total&&&&&
7 0.1428571
5 0.2000000
6 0.6666667
6 0.6666667
4 1.0000000
2 1.0000000
对于汇总数据,有两种方法可以得到同样的结果,一种是将两种结果的向量合并做为因变量,如anes2模型。另一种是将比率做为因变量,总量做为权重进行建模,如anes3模型。这两种建模结果是一样的。
anes2=glm(cbind(nomove,move)~conc,family=binomial(link='logit'),data=anestot)
anes3=glm(prop~conc,family=binomial(link='logit'),weights=total,data=anestot)
根据logistic模型,我们可以使用predict函数来预测结果,下面根据上述模型来绘图
x=seq(from=0,to=3,length.out=30)
y=predict(anes1,data.frame(conc=x),type='response')
plot(prop~conc,pch=16,col='red',data=anestot,xlim=c(0.5,3),main='Logistic回归曲线图',ylab='病人静止概率',xlab='麻醉剂量')
lines(y~x,lty=2,col='blue')
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 r语言 coxph函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信