R语言-逻辑回归

##### 3.3 回归分析 #####
rm(list = ls())  # 清空工作空间
#### 3.3.2 逻辑回归(logistic regression) ####
#额外备注:线性回归主要用来解决因变量是连续变量时的分析问题(比如薪酬、房价等)
#逻辑回归是处理二分类的因变量与自变量之间关系的模型
# 加载所需R包
# install.packages("ggplot2")
library(ggplot2)
# 读入数据
dat1 = read.csv("JuneTrain.csv")
dat2 = read.csv("JulyTest.csv")
head(dat1)  # 查看数据的前几行
# 重新命名数据以及排列
dat1 = dat1[, c("tenure", "expense", "COUNT", "perperson", "entropy", "chgexpense", "chgcount", "churn")]
colnames(dat1) = c("tenure", "expense", "count", "perperson", "entropy", "chgexpense", "chgcount", "churn")
dat2 = dat2[, c("tenure", "expense", "COUNT", "perperson", "entropy", "chgexpense", "chgcount", "churn")]
colnames(dat2) = c("tenure", "expense", "count", "perperson", "entropy", "chgexpense", "chgcount", "churn")
# churn:是否流失;tenure:在网时长;expense:当月话费;count:通话人数;
# perperson:人均通话时长;entropy:通话时长分布;chgexpense:花费变化率;chgcount:通话人数变化率
# 描述分析,用ggplot2画对比箱线图。
# 描述分析内容 "tenure"     "expense"    "count"      "perperson"  "entropy"    "chgexpense" "chgcount"
# tenure和是否流失
p1 = ggplot(dat1, aes(x = as.factor(churn), y = tenure, fill = as.factor(churn)))  + geom_boxplot() +
  guides(fill = FALSE) + theme_minimal() + xlab("是否流失") + ylab("在网时长") +
  theme(axis.title.x = element_text(size = 16, face = "bold"),
        axis.text.x = element_text(size = 12, face = "bold"),
        axis.title.y = element_text(size = 16, face = "bold"),
        axis.text.y = element_text(size = 12, face = "bold")) +
  scale_fill_hue(c = 45, l = 80)
# expense和是否流失
p2 = ggplot(dat1, aes(x = as.factor(churn), y = expense, fill = as.factor(churn)))  + geom_boxplot() +
  guides(fill = FALSE) + theme_minimal() + xlab("是否流失") + ylab("当月话费") +
  theme(axis.title.x = element_text(size = 16, face = "bold"),
        axis.text.x = element_text(size =12, face = "bold"),
        axis.title.y = element_text(size = 16, face = "bold"),
        axis.text.y = element_text(size = 12, face = "bold")) +
  scale_fill_hue(c = 45, l = 80)
#还有很多,具体看书和给出的例子,这里不写了
# 加载所需R包
# install.packages("gridExtra")
library(gridExtra)
# 将2张图并列输出
grid.arrange(p1,p2,ncol = 2) #因为ggplot()直接将两张图分别输出,而gridExtra中的grid.arrange()将2张图并列输出
#逻辑回归是解决分类问题的一种分类模型
glm()#逻辑回归建模最常用的是广义线性回归语句
#glm()与lm()不同之处就在于参数family
#逻辑回归的family=binomial(link=logit),表示引用了二项分布族binomial中的logit连接函数
#glm()也包含了泊松回归等,family取值不一样
# 建立模型
lm1 = glm(churn ~., data = dat1, family = binomial())
summary(lm1)
#解读Page200
#训练集,测试集
#对测试集进行预测
predict(object,newdata = NULL,type = c("link","response","terms"))
#object指所需的回归模型;newdata指用于测试的数据集
#type指选择预测的类型,由于是二分类变量,所以选择reponse,表示输出结果预测响应变量为1的概率
# 模型预测
Yhat = predict(lm1, newdata = dat2, type = "response")
ypre1 = 1 * (Yhat > 0.5)
table(ypre1, dat2$churn)
##       
##  ypre1     0     1
##      0 46001   447
ypre2 = 1 * (Yhat > mean(dat2$churn))
table(ypre2, dat2$churn)
##       
##  ypre2     0     1
##      0 27242   108
##      1 18759   339
# 覆盖率捕获率曲线
sub = seq(0, 1, 1 / 7)
tol = sum(dat2$churn)
catch = sapply(sub, function(s) {
  ss = quantile(Yhat, 1 - s)
  res = sum(dat2$churn[Yhat > ss]) / tol
  return(res)
})
plot(sub, catch, type = "l", xlab = "覆盖率", ylab = "捕获率")
# 系数图示
coef = lm1$coefficients[-1]
coef = sort(coef)
barplot(coef, col = rainbow(10), width = 1)
# 加载所需R包
# install.packages("pROC")
library(pROC)
# 生成ROC曲线
plot.roc(dat2$churn, Yhat, col = "red", lwd = 2, xaxs = "i", yaxs = "i")
# 比较ROC曲线优劣
lm2 = glm(churn ~ chgcount, data = dat1, family = binomial())
Yhat2 = predict(lm2, newdata = dat2, type = "response")
plot.roc(dat2$churn, Yhat2, col = "blue", lwd = 2, xaxs = "i", yaxs = "i")
lines.roc(dat2$churn, Yhat, col = "red", lwd = 2)
# auc曲线
auc(dat2$churn, Yhat)
###############################
#总结#
library(gridExtra)
grid.arrange()#因为ggplot()直接将两张图分别输出,而gridExtra中的grid.arrange()将图并列输出
glm()#逻辑回归建模最常用的是广义线性回归语句
predict()
library(pROC)
# 生成ROC曲线
plot.roc()
auc()
#############################
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言中的贝叶斯逻辑回归是一种基于变分贝叶斯技术的模型拟合方法。这种方法使用Jaakkola和Jordan在1996年提出的变分贝叶斯技术来拟合贝叶斯逻辑回归模型。 在R语言中,贝叶斯逻辑回归可以通过一系列步骤来实现。首先,需要进行准备工作,包括加载所需的包和数据集,并进行必要的数据处理和准备。接下来,可以使用R的GLM(广义线性模型)函数来介绍逻辑回归的基本概念和方法。然后,可以使用教育数据集进行模型的训练和评估。在数据准备阶段,可能需要进行特征选择、数据清洗和转换等操作。接着,可以使用R中的贝叶斯逻辑回归函数来构建和拟合贝叶斯二项Logistic回归模型。最后,可以进一步探索贝叶斯层次逻辑回归模型的应用和拟合。 总之,R语言提供了丰富的功能和包,可以用于实现贝叶斯逻辑回归,并通过变分贝叶斯技术来拟合模型、进行预测和评估。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病...](https://blog.csdn.net/tecdat/article/details/129388659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vblogistic:变分贝叶斯逻辑回归](https://download.csdn.net/download/weixin_42168265/20049322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [R语言贝叶斯广义线性混合(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据...](https://blog.csdn.net/tecdat/article/details/128090547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值