R语言在逻辑回归中求R square R方

article/2025/10/1 2:14:44

 并非所有结果/因变量都可以使用线性回归进行合理建模。也许第二种最常见的回归模型是逻辑回归,它适用于二元结果数据。最近我们被客户要求撰写关于逻辑回归的研究报告,包括一些图形和统计输出。如何计算逻辑回归模型的R平方?  

 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

逻辑回归Logistic模型原理和R语言分类预测冠心病风险实例

,时长06:48

McFadden麦克法登R平方

在R中,glm(广义线性模型)命令是用于拟合逻辑回归的标准命令。据我所知,拟合的glm对象并没有直接给你任何伪R平方值,但可以很容易地计算出McFadden的度量。为此,我们首先拟合我们感兴趣的模型,然后是仅包含截距的null模型。然后我们可以使用拟合模型对数似然值计算McFadden的R平方:

mod < -  glm(y~x,family =“binomial”)
nullmod < -  glm(y~1,family =“binomial”)
1-logLik(MOD)/ logLik(nullmod)

 为了了解预测器需要获得某个McFadden的R平方值的强度,我们将使用单个预测模型X来模拟数据, 我们首先尝试P(Y = 1 | X = 0)= 0.3和P(Y = 1 | X = 1)= 0.7:

set.seed(63126)
n < -  10000
x < -  1 *( (n)<0.5)
pr < - (x == 1)* 0.7 +(x == 0)* 0.3
y < -  1 *(  f(n)<pr)
mod < -  glm(y~x,family =“binomial”)
nullmod < -  glm(y~1,family =“binomial”)
1-logLik(MOD)/  (nullmod)
'log Lik。' 0.1320256(df = 2)

 因此,即使X对Y = 1的概率有相当强烈的影响,McFadden的R2也只有0.13。要增加它,我们必须使P(Y = 1 | X = 0)和P(Y = 1 | X = 1)更加不同:

set.seed(63126)
n < -  10000
x < -  1 *(runif(n)<0.5)
pr < - (x == 1)* 0.9 +(x == 0)* 0.1
y < -  1 *( (n)<pr)
mod < -  glm(y~x,family =“binomial”)
nullmod < -  glm(y~1,family =“binomial”)
1- (MOD)/  (nullmod)
[1] 0.5539419

即使X将P(Y = 1)从0.1变为0.9,McFadden的R平方仅为0.55。最后我们将尝试0.01和0.99的值 - 我称之为非常强大的效果!

set.seed(63126)
n < -  10000
x < -  1 *(runif(n)<0.5)
pr < - (x == 1)* 0.99 +(x == 0)* 0.01
y < -  1 *( (n) pr)
mod < -  glm(y~x,family =“binomial”)
nullmod < -  glm(y~1,family =“binomial”)
1- (MOD)/  ( )
[1] 0.9293177

现在我们有一个更接近1的值。 

分组二项数据与单个数据

data < -  data.frame(s = c(700,300),f = c(300,700),x = c(0,1))SFX
1 700 300 0
2 300 700 1

 为了使逻辑回归模型拟合R中的数据,我们可以将因变量传递给glm函数, :

Call:
glm(formula = cbind(s, f) ~ x, family = "binomial", data = data)Deviance Residuals: 
[1]  0  0Coefficients:Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.84730    0.06901   12.28   <2e-16 ***
x           -1.69460    0.09759  -17.36   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1(Dispersion parameter for binomial family taken to be 1)Null deviance: 3.2913e+02  on 1  degrees of freedom
Residual deviance: 1.3323e-13  on 0  degrees of freedom
AIC: 18.371Number of Fisher Scoring iterations: 2

我们现在将分组的二项式数据转换为 伯努利 数据,并拟合相同的逻辑回归模型。 

individualData <-  (cbind(data,y=0),cbind(data,y=1))
individualData$freq <- individualData$s
individualData$freq[ $y==0] <-  $f[individualData$y==0]
mod2 <- glm(y~x, family="binomial",data= ,weight=freq)
summary(mod2)Call:
glm(formula = y ~ x, family = "binomial", data = individualData, weights = freq)Deviance Residuals: 1       2       3       4  
-26.88  -22.35   22.35   26.88  Coefficients:Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.84730    0.06901   12.28   <2e-16 ***
x           -1.69460    0.09759  -17.36   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1(Dispersion parameter for binomial family taken to be 1)Null deviance: 2772.6  on 3  degrees of freedom
Residual deviance: 2443.5  on 2  degrees of freedom
AIC: 2447.5Number of Fisher Scoring iterations: 4

正如所料,我们从分组数据框中获得相同的参数估计和推论。 

nullmod1 <- glm(cbind(s,f)~1, family="binomial",data)
nullmod2 <- glm(y~1, family="binomial",data=individualData, =freq)
1-logLik(mod1)/logLik(nullmod1)
'log Lik.' 0.9581627 (df=2)
1-logLik(mod2)/logLik(nullmod2)
'log Lik.' 0.1187091 (df=2)

我们看到分组数据模型的R平方为0.96,而单个数据模型的R平方仅为0.12。 

 


http://chatgpt.dhexx.cn/article/II8hBrUp.shtml

相关文章

Regression 中的 R方

最近在学习ML,一直看到这R方,明白什么意思,但是不知道怎么算出来的,今天看sklearn文档的时候偶然看到了,记录下 简而言之,他的值表示该系列数据是否适合该Regression 算法, 得分越靠近1越适合. 总结来说就是, 1 减去 ( 所有 ( ( 真实值 减去 预测值 ) 的平方 ) 和 除以 所有 (…

基于MATLAB的R方计算

R方计算原理 什么是R方 R-square是你以后很多数据模型都需要用到的统计量&#xff0c;计量模型什么的&#xff0c;还有回归系数显著性检验&#xff0c;F检验&#xff0c;德斌沃森统计量检验。利用数据拟合一个模型时&#xff0c;模型肯定存在误差&#xff0c;那么回归方程对观…

数据科学 | 如何解释线性回归的R方

R方&#xff0c;即R-Squared&#xff0c;常用来衡量线性回归的拟合度。相关性“r"衡量两个变量间的相关性&#xff0c;相关性接近1表示变量间具有很强的正相关性&#xff0c;接近-1表示变量间具有很强的负相关性&#xff0c;接近0表示变量间没有太多的关系。R方与相关性”…

什么是R方?这6张图会让你终身难忘~

什么是R2 &#xff1f; 在回归模型中&#xff0c;因变量&#xff08;y&#xff09;总的方差&#xff08;信息&#xff09;可以被称作总平方和&#xff08;Total sum of squares&#xff0c;TSS&#xff09;&#xff0c;它由两部分组成[1]&#xff1a; 1. 模型可以解释的那部分信…

贝叶斯相关公式(Bayes)

这里只是记录一下&#xff0c;非常推荐马同学高等数学,文末有原文.点击这里看里面的例一应该是理解贝叶斯公式最好的例子 ,如果你稍微有一些基础&#xff0c;我觉得文末第二个链接中的例一更加适合你 代数推导 1. 贝叶斯公式 是根据条件概率推导的 P(A|B)P(AB)P(B)P(B|A)…

贝叶斯模型及其应用总结

本文参考整理众多资料而成。 http://blog.csdn.net/huaxi1902/article/details/24140061 http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/ http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html http://www.ruanyifeng.com/blog/2011/08…

贝叶斯预测模型 (数学原理与推导)

1. 方差的两种计算方法 对于方差计算的一个重要结论&#xff1a; 2. 联合概率分布-条件概率分布 当然&#xff0c;利用联合概率分布也很容易推出边缘概率分布&#xff1b;只需要对其他变量进行全积分即可&#xff01; 条件概率分布直观想象还是有难度的&#xff0c;很多时候我…

朴素贝叶斯算法 — 超详细公式讲解+代码实例

本文收录于Github仓库&#xff0c;欢迎前来 star 呀~ https://github.com/Veal98/cs-wiki在线阅读地址/更好的阅读体验请移步&#xff1a;cswiki.top &#x1f454; 朴素贝叶斯算法 Naive Bayes &#x1f4a1; 思维导图 1. 朴素贝叶斯法概述 朴素贝叶斯法是基于贝叶斯定理与…

贝叶斯定理

贝叶斯定理 通常&#xff0c;事件A在事件B的条件下的概率&#xff0c;与事件B在事件A的条件下的概率是不一样的&#xff1b;然而&#xff0c;这两者是有确定的关系&#xff0c;贝叶斯法则就是这种关系的陈述。 贝叶斯法则又被称为贝叶斯定理、贝叶斯规则&#xff0c;是指概率统…

dbus 学习

和菜鸟一起学linux之DBUS基础学习记录 D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信。它是个3层架构的IPC 系统&#xff0c;包括&#xff1a; 1、函数库libdbus &#xff0c;用于两个应用程序互相联系和交互消息。 2、一个基于libdbus构造…

ubuntu DBUS 收集

ubuntu DBUS 收集 libdbus-1.so.3.19.11 是dbus-1.12.16.tar.gz 包编译出来的 参考文档: https://www.freedesktop.org/wiki/Software/dbus/ https://www.freedesktop.org/wiki/IntroductionToDBus/ https://dbus.freedesktop.org/doc/dbus-tutorial.html https://docs.gtk.…

Linux DBUS服务器端程序

DBus 服务器端接收方式 DBus 服务器端用来接收signal和method调用。从收集的资料中发现&#xff0c;主要有三种接收方式。 一&#xff0c;采用while循环&#xff0c;监听dbus_connection_read_write()函数。有消息到来时在循环内部进行处理。优点是结构简单&#xff0c;处理方…

Linux -dbus总线

下载编译dbus 下载https://dbus.freedesktop.org/releases/dbus/ dbussrc1.14.0-Linux文档类资源-CSDN下载 dbus-1.14.0.tar.xz xz -d dbus-1.14.0.tar.xz tar xvf dbus-1.14.0.tar2.配置编译 ./configure --prefix/data/opensrc/dbus #--prefix/data/opensrc/dbus 指定输…

DBus通讯

linux下进程间通信的方式主要有Pipe(管道)&#xff0c;FIFO(命名管道)&#xff0c;信号&#xff0c;共享内存&#xff0c;消息队列&#xff0c;信号灯等&#xff0c;这些方式各有 各得特点&#xff0c;如管道是linux下命令行中常用的&#xff0c;用于父子进程的通信。但是这些通…

Linux DBUS客户端程序

DBUS客户端程序&#xff0c;发送一个信号&#xff0c;信号携带int型数据。信号的object path为"/test/signal/server"&#xff0c;interface名为 "test.signal.Type"&#xff0c;信号名为"Test"。接收端可以根据这三个属性来判断是否是想接收的信…

四、QtDbus

文章目录 概述一、QtDBus模块Debug备忘单 二、QtDBus类型系统1、QtDBus类型系统简介2、原生类型3、复合类型4、扩展类型系统5、类型系统使用 三、QtDBus常用类1、QDBusMessage2、QDBusConnection3、QDBusInterface4、QDBusReply5、QDBusAbstractAdaptor6、QDBusAbstractInterfa…

Hello Qt——QtDBus快速入门

一、QtDBus简介 QtDBus是一个使用D-Bus协议进行进程间通信的仅在Unix运行的库&#xff0c;是对D-Bus底层API的封装实现。 QtDBus模块提供了使用Qt信号槽机制扩展的接口。要使用QtDBus模块&#xff0c;需要在代码中加入以下代码&#xff1a; #include <QtDBus> 如果使用…

DBUS

DBUS是一种高级的进程间通信机制。DBUS支持进程间一对一和多对多的对等通信&#xff0c;在多对多的通讯时&#xff0c;需要后台进程的角色去分转消息&#xff0c;当一个进程发消息给另外一个进程时&#xff0c;先发消息到后台进程&#xff0c;再通过后台进程将信息转发到目的进…

DBUS是什么 如何使用

DBus提供了一种低延时,低开销,高可用性的进程间通信方式,其以消息作为驱动,采用二进制的协议,实现一对一及多对多的对等通信,避免通信的序列化&#xff08;编码过程&#xff09;过程,提高通信效率.DBus进程通信的核心是提供了一个后台中转守护进程,需要通信的进程首先连接到DBu…

dbus总线通信的原理和使用

1.什么是D-Bus D-Bus是一种高级的进程间通信机制&#xff0c;它由freedesktop.org项目提供&#xff0c;使用GPL许可证发行。D-Bus最主要的用途是在Linux桌面环境为进程提供通信&#xff0c;同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。注册后的进程可通过总线接…