当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

Logsitic回归-基于R语言

发表于: 2013-04-14   作者:beyondme121   来源:转载   浏览次数:
摘要: # 数据预处理 data(Affairs,package="AER") a <- Affairs a$ynaffair[a$affairs > 0] <- 1 a$ynaffair[a$affairs == 0] <- 0 a$ynaffair <- factor(a$ynaffair, levels=c(0,1),labels=c(&q

# 数据预处理

data(Affairs,package="AER")

a <- Affairs

a$ynaffair[a$affairs > 0] <- 1

a$ynaffair[a$affairs == 0] <- 0

a$ynaffair <- factor(a$ynaffair, levels=c(0,1),labels=c("No","Yes"))

table(a$ynaffair) # 检验是否平衡

 

# 将全部预测变量加入logistic回归模型

# fit.full <- glm(ynaffair ~ ., data=a, family=binomial());fit.full;

fit.full <- glm(ynaffair ~ gender + age + yearsmarried + children +

religiousness + education + occupation + rating,

data = a, family=binomial())

 

# 属性选择的两种方法

# 1、逐步回归方法,选择AIC最小的自变量(最后一个formula)

step.test <- step(fit.full)

glm.step.test <- glm(ynaffair ~ gender + age + yearsmarried + religiousness + rating, data = a, family="binomial");

summary(glm.step.test) # 结果可见 gender性别不够显著(没关系,之后用ROC曲线以及AUC值与去掉gender进行比较)

 

# 2、直接summary(fit.full)对所有自变量拟合,查看各自变量的显著性p值进行筛选,此处去掉gender

summary(fit.full)

fit.reduced <- glm(ynaffair ~ age + yearsmarried + religiousness + rating,

  family=binomial(), data=a);

summary(fit.reduced) # 各自变量依然显著[坚挺]

# 通过方差的卡方独立性检验比较是否加入gender属性,模型的结果是否具有显著性差异

# p=0.06,应该无法拒绝原假设,没有充分的证据证明加入gender与否会对模型结果造成显著性差异.(暂且接受无差异的假设)

anova(fit.reduced, glm.step.test, test="Chisq"

 

# 3ROCR[逐步回归与全部自变量加入通过显著性判断两种途径进行特征选择的ROCAUC的比较]

拟合后的两个glm-lm对象 1: glm.step.test   2: fit.reduced

 

# response ROC curve:glm.step.test

 

library(ROCR)

par(mfrow=c(2,1))

# glm.step.test

pre.step <- predict(glm.step.test, type="response")

step.m <- prediction(pre.step, a$ynaffair)

plot(performance(step.m, 'tpr', 'fpr'))

abline(0,1, lty=8, col="red")

auc <- performance(step.m, "auc"); auc@y.values # 0.7067406

 

# fit.reduced

pre.fit.reduced <- predict(fit.reduced, type="response")

reduced.m <- prediction(pre.fit.reduced, a$ynaffair)

plot(performance(reduced.m, 'tpr', 'fpr'))

abline(0,1, lty=10, col="green")

auc <- performance(reduced.m, "auc"); auc@y.values # 0.7038877

# 使用逐步回归的auc较好,但是不明显,此处仅仅是技巧的考虑。即使用逐步回归和显著性检验基本没有太大差异。

 

# step(object, scope, scale = 0,direction = c("both", "backward", "forward"), trace = 1, keep = NULL, steps = 1000, k = 2, ...)

 

# 4.进一步延伸,ROC包的增强版pROC

#    此处仅以逐步回归的结果作为演示

library(pROC)

modelroc <- roc(a$ynaffair, pre.step)

plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),

     grid.col=c("green", "red"), max.auc.polygon=TRUE,

     auc.polygon.col="skyblue", print.thres=TRUE)

     

# 5logistic模型适用条件(假设)

# 期望方差:(抽样于二项分布数据的期望方差=np(1-p),n为观测值,p为因变量=1的概率)

# 过度离势:观测到的因变量的方差大于期望的二项分布的方差导致奇异的标准误和不精确的显著性检验

# 如果离势 = 残差偏差/残差自由度 >>1,则存在过度离势,否则没有

# 如何处理? 适用类二项分布

# 先检验一下是否存在过度离势的情况。拟合两个模型,以逐步回归为例

 

# 最初的 binomial

glm.step.test <- glm(ynaffair ~ gender + age + yearsmarried + religiousness + rating, data = a, family="binomial");

# 后来的类二项分布 quasibinomial

fit.step.quasi <- glm(ynaffair ~ gender + age + yearsmarried + religiousness + rating, data = a, family="quasibinomial")

 

# 检验输出的p值大于0.05,没有出现过度离势的情况。原假设为:离势比值=1H1:离势!=1

pchisq(summary(fit.step.quasi)$dispersion*glm.step.test$df.residual, fit.step.quasi$df.residual, lower=F)

 

 

# 如果出现离势的处理方式,采用fit.step.quasi的拟合过程即可

 

summary(fit.step.quasi)$dispersion

Logsitic回归-基于R语言

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
五、广义线性回归 glm(formula, family=family.generator,data=data.frame) 函数用来做广义线性回归
一、一元线性回归 > x <- c(0.10,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.20,0.21,0.23)
原创文章,始发自本人个人博客站点 www.jasongj.com 转载请务必在文章头部以超链形式注明出处http:/
R语言爬虫初尝试-基于RVEST包学习 Thursday, February 26, 2015 在学完coursera的getting and Clean
R语言是主要用于统计分析、绘图的语言和操作环境。 R本来是由来自新西兰奥克兰大学的Ross Ihaka和Ro
《R语言实战》 基本信息 原书名:R in Action:Data Analysis and Graphics with R 作者: (美)Rober
1. 前言 前段时间,做些性能测试,需要画出一些测试结果图。简单学习了一下R语言,发现其很强大,因
一.统计分析软件说明 统计分析软件有:SPSS, SAS、R语言,Matlab,S-PLUS,S-Miner。 SPSS: 最简单的,
R是用于统计分析和图形化的计算机语言及分析工具,为了保证性能, 其核心计算模块是用C、C++和Fortr
《数据挖掘与R语言》 基本信息 原书名:Data Mining with R:Learning with Case Studies 作者: (
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号