科研学习|研究方法——逻辑回归系数的显著性检验(python实现)

news2024/10/7 12:28:17

1. 背景


回归方程与回归系数的显著性检验

2. statsmodels 库

statsmodels库可以用来做逻辑回归、线性回归。并且会在summary中给出显著性检验的结果。最终我们想要的就是如下图的报告。

 3. 计算过程

如果我们使用的sklearn构建的逻辑回归就没有办法直接输出这个报告,所以需要自己计算这个表中的信息。

3.1 先用statemodels计算作为对比

import pandas as pd
from sklearn.datasets import load_boston
from scipy import stats
import statsmodels.api as sm
import numpy as np
 
''' 数据demo'''
boston = load_boston()
X = pd.DataFrame(boston.data, columns=boston.feature_names)
y = pd.DataFrame(boston.target, columns=['target'])
 
X = sm.add_constant(X)  # 添加常数项
model = sm.OLS(y, X)
results = model.fit()
y_pred = pd.DataFrame(model.predict(results.params, X),
                      columns=['pred'])
print(results.summary())
 
''''''

输出结果:

                           OLS Regression Results                            
==============================================================================
Dep. Variable:                 target   R-squared:                       0.741
Model:                            OLS   Adj. R-squared:                  0.734
Method:                 Least Squares   F-statistic:                     108.1
Date:                Thu, 04 Nov 2021   Prob (F-statistic):          6.72e-135
Time:                        11:07:53   Log-Likelihood:                -1498.8
No. Observations:                 506   AIC:                             3026.
Df Residuals:                     492   BIC:                             3085.
Df Model:                          13                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         36.4595      5.103      7.144      0.000      26.432      46.487
CRIM          -0.1080      0.033     -3.287      0.001      -0.173      -0.043
ZN             0.0464      0.014      3.382      0.001       0.019       0.073
INDUS          0.0206      0.061      0.334      0.738      -0.100       0.141
CHAS           2.6867      0.862      3.118      0.002       0.994       4.380
NOX          -17.7666      3.820     -4.651      0.000     -25.272     -10.262
RM             3.8099      0.418      9.116      0.000       2.989       4.631
AGE            0.0007      0.013      0.052      0.958      -0.025       0.027
DIS           -1.4756      0.199     -7.398      0.000      -1.867      -1.084
RAD            0.3060      0.066      4.613      0.000       0.176       0.436
TAX           -0.0123      0.004     -3.280      0.001      -0.020      -0.005
PTRATIO       -0.9527      0.131     -7.283      0.000      -1.210      -0.696
B              0.0093      0.003      3.467      0.001       0.004       0.015
LSTAT         -0.5248      0.051    -10.347      0.000      -0.624      -0.425
==============================================================================
Omnibus:                      178.041   Durbin-Watson:                   1.078
Prob(Omnibus):                  0.000   Jarque-Bera (JB):              783.126
Skew:                           1.521   Prob(JB):                    8.84e-171
Kurtosis:                       8.281   Cond. No.                     1.51e+04
==============================================================================

3.2 自己代码做

计算的函数

def func_sign_testing_LRCoef(X, y_pred, y_true, Coef):
    '''
    逻辑回归系数的显著性检验
    :param X: 原始数据,行为样本,列为特征(注意,如果你的Coef比特征多一列,那么应该在数据上加一列const   X.insert(0, 'const', 1)  # 添加常数项)
    :param y_pred: 模型的预测结果
    :param y_true: 数据的真实结果
    :param Coef: 逻辑回归的回归系数
    :return: 返回报告包含'coef','std error','tval','pval','lower alpha','upper alpha'
    '''
 
    # y_pred = y_pred.values
    # y_true = y.values
    # Coef = results.params.values
 
    n, p = X.shape
    p = p - 1  # p 为特征数
    # X.insert(0, 'const', 1)  # 添加常数项
 
    # SSR = np.dot(y_pred - y_true.mean(), y_pred - y_true.mean())
    y_pred = np.squeeze(y_pred)
    y_true = np.squeeze(y_true)
    Coef = np.squeeze(Coef)
    SSR = np.dot(np.squeeze(y_pred) - np.squeeze(y_true).mean(),
                 np.squeeze(y_pred) - np.squeeze(y_true).mean())
    SSE = np.dot(np.squeeze(y_pred) - np.squeeze(y_true),
                 np.squeeze(y_pred) - np.squeeze(y_true))
    # SSE = np.dot(y_pred - y_true, y_pred - y_true)
 
    # 先计算回归方程的显著性
    f_val = (SSR / p) / (SSE / n - p - 1)
    f_pval = stats.f.sf(f_val, p, n - p - 1)
 
    print("LR F", f_val)
    print("LR p", f_pval)
    # 单个参数的显著性检验
    # print(X.columns)
    ttest_result = pd.DataFrame(None, index=X.columns,
                                columns=['coef', 'std error', 'tval', 'pval', '[lower alpha', 'upper alpha]'])
    ttest_result.loc[:, 'coef'] = np.squeeze(Coef)
    error = np.dot(y_true - y_pred, y_true - y_pred)
    S = np.array(np.linalg.inv(np.dot(X.T, X)))
    for i, col in enumerate(X.columns):
        RMSE = np.sqrt(error / n - p - 1)
        tval = Coef[i] / np.sqrt((error / (n - p - 1)) * S[i][i])
        ttest_result.loc[col, 'tval'] = tval
        # pval_test = stats.t.sf(np.abs(tval), df=492) * 2
        std_error = Coef[i] / tval  # np.sqrt(S[i][i]) * RMSE
        # 其实表里的t检验值就剩余表里的b系数除以std error哦,t=b/std error
        ttest_result.loc[col, 'std error'] = std_error
        pval = stats.t.sf(np.abs(tval), df=(n - p - 1)) * 2
        ttest_result.loc[col, 'pval'] = pval
        [lower_a, upper_a] = stats.norm.ppf(q=[0.025, 0.975], loc=Coef[i], scale=std_error)
        ttest_result.loc[col, '[lower alpha'] = lower_a
        ttest_result.loc[col, 'upper alpha]'] = upper_a
    return ttest_result

调用函数

boston = load_boston()
X = pd.DataFrame(boston.data, columns=boston.feature_names)
y = pd.DataFrame(boston.target, columns=['target'])
X = sm.add_constant(X)  # 添加常数项
model = sm.OLS(y, X)
results = model.fit()
y_pred = pd.DataFrame(model.predict(results.params, X),
                      columns=['pred'])
 
 
# results.params.values 将训练得到的coef系数给进函数
func_sign_testing_LRCoef(X, y_pred, y, results.params.values)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1211540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Xocde 升级15 或者 iOS17报错:

错误: Assertion failed: (false && "compact unwind compressed function offset doesnt fit in 24 bits"), function operator(), file Layout.cpp, line 5758. 翻译: 断言失败:(false&&“压缩展开…

基于安卓android微信小程序的食谱大全系统

项目介绍 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个开发过程首先对食谱大全进行需求分析,得出食谱大全主要功能。接着对食谱大全进行总体设计和详细设计。总体设…

窗口管理工具 Mosaic mac中文版功能特点

MosAIc mac是一种窗口管理工具,可帮助您在计算机屏幕上有效地组织和管理多个应用程序窗口。它提供了一种直观的方式来调整和排列窗口,以最大化工作效率。 MosAIc mac窗口管理软件功能和特点 窗口布局:MosAIc允许您选择不同的窗口布局&#x…

SketchUp (草图大师) SU2023 中文版软件安装包下载地址及安装教程!

1.鼠标右键【SketchUp2023(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到SketchUp2023(64bit)】。 2.打开解压后的文件夹,鼠标右键【Setup】选择【以管理员身份运行】。 3.点击【Next】。 4.点击Install Language右边…

JVM查看内存新生代老年代回收情况,排查oom

jstat 命令 jstat - [-t] [-h] [ []] option:我们经常使用的选项有gc、gcutil vmid:java进程id interval:间隔时间,单位为毫秒 count:打印次数 每秒打印一次 jstat -gc 9162 1000S0C:年轻代第一个survivor的容量…

think5和fastadmin验证规则的使用

在fastadmin中使用验证规则只需要两步即可 第一步 首先在控制器中开启验证规则 protected $modelValidatetrue;//开启验证规则protected $modelSceneValidatetrue;//开启场景验证第二步 在 app\admin\validate 和控制器对应的 validate 中添加 验证规则以及场景验证 <?…

Blackmagic Design DaVinci Resolve Studio18(达芬奇调色剪辑)mac/win中文版

在影视制作领域&#xff0c;调色和剪辑是至关重要的环节&#xff0c;它们直接决定了作品的观感和质量。而Blackmagic Design DaVinci Resolve Studio18&#xff08;达芬奇调色剪辑&#xff09;作为业界领先的专业调色剪辑软件&#xff0c;以其出色的性能和强大的功能&#xff0…

SpringBoot项目集成发邮件功能

1&#xff1a;引入依赖2&#xff1a;配置设置3&#xff1a;授权码获取&#xff1a;4&#xff1a;核心代码5&#xff1a;postman模拟验证6&#xff1a;安全注意 1&#xff1a;引入依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>c…

csrf学习笔记总结

跨站请求伪造csrf csrf概述 掌握CSRF 漏洞原理 掌握CSRF 漏洞场景 掌握CSRF 漏洞验证 csrf原理 ​ 跨站请求伪造&#xff08;Cross Site Request Forgery&#xff0c;CSRF&#xff09;是一种攻击&#xff0c;它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程…

JEECG BOOT 前端记录

目录 查询 1、模糊搜索中文 2、下拉框选择 3、文本框 新增 1、添加文本框 2、图片上传 3、文件上传 4、富文本 5、下拉框数字回显文字 第一种&#xff1a; 第二种&#xff1a; 展示 1、字典翻译注解Dict 1.2、字典表翻译用法 2、点击事件调接口 查询 1、模糊搜索中…

Postman批量运行用例

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;注意点 有上传文件的接口&#xff0c;需要做如下设置&#xff1a; 1、打开能读取外部文件的开关 2、把需要…

Java医院绩效考核管理系统源码,设有手工录入功能(可以批量导入)

医院绩效考核系统以医院的发展战略为导向&#xff0c;把科室、员工的绩效考核跟战略发展目标紧密结合&#xff0c;引导医院各个科室、各员工的工作目标跟医院的发展目标结合在一起&#xff0c;实现医院的优化发展。系统提供灵活的绩效考评体系配置方案&#xff0c;支持不同科室…

实现高值医疗耗材智能化管理的RFID医疗柜解决方案

一、行业背景 医疗物资管理面临着一系列问题&#xff0c;如高值耗材种类激增导致准入标准弱化、信息追踪困难、管理责任不明确等&#xff0c;医院内部设备、财务和临床科室相互独立&#xff0c;兼容性不佳&#xff0c;高值耗材储备不足&#xff0c;缺乏合理的预警机制&#xf…

计讯物联LoRa终端TW820多重优势共蓄能,强力驱动行业发展

LoRa&#xff0c;即远距离无线电&#xff0c;是一种低功耗宽区域网络(LPWAN)的通信技术。它在同样的功耗条件下比其他无线方式传播的距离更远&#xff0c;且比传统的无线射频通信距离扩大3-5倍&#xff0c;真正实现了低功耗、远距离、广覆盖的统一。基于LoRa通信技术的优势特点…

深兰科技轮腿家用AI机器人荣获“2023年度城市更新科创大奖”

近日&#xff0c;“2023金砖论坛第五季金立方城市更新科创大会”在上海举行&#xff0c;会上发布了《第12届金砖价值榜》&#xff0c;深兰科技研发出品的轮腿式家用AI机器人(兰宝)&#xff0c;因其AI技术的创新性应用&#xff0c;荣获了“2023年度城市更新科创大奖”。 在10月2…

Vue 模板语法 v-bind

红色框里面的都是vue的模板。有了模板就得有模板的特殊语法。上面只是简单的双括号加上表达式&#xff0c;这种叫做插值语法&#xff0c;除了这种语法还有其他语法吗&#xff1f; 插值语法实现的功能很单一&#xff0c;就是将指定的值放到指定的位置。还有一种叫做指令语法&am…

java springBoot实现RabbitMq消息队列 生产者,消费者

1.RabbitMq的数据源配置文件 # 数据源配置 spring:rabbitmq:host: 127.0.0.1port: 5672username: rootpassword: root#消息发送和接收确认publisher-confirms: truepublisher-returns: truelistener:direct:acknowledge-mode: manualsimple:acknowledge-mode: manualretry:ena…

大数据分析师职业技能提升好考吗?含金量高不高

随着大数据时代的到来&#xff0c;大数据分析技能需求已经成为很多企业和机构的必备要求。大数据分析师证书成为当下的热门之一&#xff0c;那么大数据分析师证书需要具备哪些条件呢&#xff1f; 首先&#xff0c;报考大数据分析师证书需要具备以下方面的条件&#xff1a; …

如何让组织的KPI成为敏捷转型的推手而不是杀手 | IDCF

作者&#xff1a;IDCF学员 伍雪锋 某知名通讯公司首席敏捷教练&#xff0c;DevOps布道者。2020年到2021年小100人团队从0-1初步完成敏捷转型&#xff0c;专注传统制造业的IT转型&#xff0c;研发效能提升。 一、前言 在公司我们常常听见这么一个流传的故事&#xff0c;只要…

【Linux】非堵塞轮询

堵塞轮询&#xff1a; 堵塞轮询是我们最简单的一种等待方式也是最常应用的等待方式。 但是&#xff0c;一旦阻塞等待也就意味着我们当前在进行等待的时候&#xff0c;父进程什么都干不了。 非堵塞轮询&#xff1a; 其中非阻塞等待&#xff0c;是等待的一种模式&#xff0c; 在…