決策曲線分析(DCA)中平均凈收益用于評價模型算法(R自定義函數)

決策曲線分析(DCA)中平均凈收益用于評價模型算法

DCA分析雖然不強調用來評價模型算法或者變量組合的優劣,但是實際應用過程中感覺DCA曲線的走勢和模型的效能具有良好的一致性,其實這種一致性也可以找到內在的聯系,比如通過凈閾值的計算公式可以知道凈閾值的大小與真陽性率有密切的關系,而真陽性率和模型的效能也有一致性。

如果想用DCA曲線來挑選算法或者變量組合,有一個定量的指標就更加方便一些,這就有了為DCA曲線找一個定量指標的想法。

1. 微積分法

曲線下面積可能是比較直觀的一種方法,首先想到的是用微積分的方法計算DCA曲線下面積,代碼如下。因為對微積分并不熟悉,加上計算出的結果還會有負值的情況,所以不是太確定代碼的正確性,大家謹慎采用。

WA_NBC <- function(df, pred, real, integration_limits = c(0, 1), prevalence) {# 內部函數計算凈獲益calculate_nbc <- function(pt) {# NBC函數的代碼tp <- sum(df[[pred]] >= pt & df[[real]] == 1)fp <- sum(df[[pred]] >= pt & df[[real]] == 0)net_benefit <- tp/nrow(df) - fp/nrow(df) * pt/(1-pt)if (!is.null(prevalence)) {net_benefit <- net_benefit / prevalence}return(net_benefit)}# 計算加權平均凈獲益integrand <- function(x) {calculate_nbc(x)}integral_result <- stats::integrate(integrand, lower = integration_limits[1], upper = integration_limits[2])wa_nbc <- integral_result$value / diff(integration_limits)return(wa_nbc)
}

2. 凈收益平均法

這種方法是計算指定閾值范圍內的凈閾值然后求平均。感覺更好理解一些,但是似乎技術含量低些。

library(purrr)mean_benefit <- function(df, pred, real, integration_limits = c(0, 1), prevalence) {calculate_nbc <- function(pt) {# NBC函數的代碼tp <- sum(df[[pred]] >= pt & df[[real]] == 1)fp <- sum(df[[pred]] >= pt & df[[real]] == 0)net_benefit <- tp/nrow(df) - fp/nrow(df) * pt/(1-pt)if (!is.null(prevalence)) {net_benefit <- net_benefit / prevalence}return(net_benefit)}# 使用map_dbl對每個閾值計算凈獲益net_benefits <- map_dbl(seq(integration_limits[1], integration_limits[2], by = 0.01), ~ calculate_nbc(.x))# 計算加權平均凈獲益mean(net_benefits)
}

初步測試感覺在一定程度上能達到設計的目的,能反映變量組合之間的優劣(如下圖),但是也有不好解釋的地方,比如計算出的絕對值有沒有意義,歡迎大家測試反饋。在和鯨社區上有一個項目可以進行體驗和測試,包含了數據和代碼。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63049.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63049.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63049.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

快速且靠譜的簡單安裝 PostgreSQL 15 yum 安裝postgis3.3

快速且靠譜的簡單安裝 PostgreSQL 15 yum 安裝postgis3.3 1、確保已經安裝了PostgreSQL數據庫。2、添加PostGIS的EPEL倉庫3、使用YUM安裝PostGIS4、以下為其他安裝方式&#xff0c;一個個去找源碼的編譯安裝&#xff0c;過程較為繁瑣&#xff08;不熟路的不推薦&#xff09; 要…

工業大數據分析算法實戰-day05

文章目錄 day05分而治之中的MARS算法神經網絡逼近能力解釋 day05 今天是第5天&#xff0c;昨日從統計分析開始利用統計學的知識判斷當前樣本的分布以及估計總體的參數和假設檢驗的情況&#xff0c;以及介紹了線性回歸算法的相關優化點&#xff0c;但是畢竟線性回歸是線性劃分的…

在Ubuntu服務器上備份文件到自己的百度網盤

文章目錄 概述安裝bypy同步文件定時任務腳本 概述 之前自購了一臺阿里云服務器&#xff0c;系統鏡像為Ubuntu 22.04&#xff0c; 并且搭建了LNMP開發環境&#xff08;可以參考&#xff1a;《Ubuntu搭建PHP開發環境操作步驟(保姆級教程)》&#xff09;。由于項目運行中會產生附…

safe area helper插件

概述 顯示不同機型的必能顯示的區域 實現步驟 引入safearea&#xff0c;引入其中的safearea的csharp 為cancas加入gameobject gameobject中加入safearea腳本 將UI作為這個gameobject的子物體&#xff0c;就可以完成顯示

Unity 獲取鼠標點擊位置物體貼圖顏色

實現 Ray ray Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit)) {textureCoord hit.textureCoord;textureCoord.x * textureMat.width;textureCoord.y * textureMat.height;textureColor textureMat.GetPixel(Mathf.Flo…

基于深度學習的貓狗識別系統【深度學習課設】

&#x1f3c6; 作者簡介&#xff1a;席萬里 ? 個人網站&#xff1a;https://dahua.bloggo.chat/ ?? 一名后端開發小趴菜&#xff0c;同時略懂Vue與React前端技術&#xff0c;也了解一點微信小程序開發。 &#x1f37b; 對計算機充滿興趣&#xff0c;愿意并且希望學習更多的技…

05、GC基礎知識

JVM程序在跑起來之后&#xff0c;在數據的交互過程中&#xff0c;就會有一些數據是過期不用的&#xff0c;這些數據可以看做是垃圾&#xff0c;JVM中&#xff0c;這些垃圾是不用開發者管的&#xff0c;它自己會有一套垃圾回收系統自動回收這些內存垃圾&#xff0c;以備后面繼續…

什么是戰略思想?

古今中外&#xff0c;關于戰略是什么&#xff1f;有非常多的理論&#xff0c;也有不同的視角。 中國最早的涉及戰略的書籍據傳是黃帝所著的《握奇文》&#xff0c;后有較為系統的兵法戰略書籍為周朝姜太公&#xff08;亦稱姜尚、姜子牙等&#xff09;所著的《六韜》&#xff0c…

2024.12.15 TCP/IP 網絡模型有哪幾層?(二)

2024.12.15 TCP/IP 網絡模型有哪幾層?&#xff08;二&#xff09; 上節課我們學習了網絡模型有四部分構成&#xff0c;有應用層、傳輸層、網絡層、網絡接口層。 生成了 IP 頭部之后&#xff0c;接下來要交給網絡接口層(Link Layer)在 IP 頭部的前面加上 MAC 頭部&#xff0c…

51c深度學習~合集9

我自己的原文哦~ https://blog.51cto.com/whaosoft/12750420 #傅里葉特征 (Fourier Feature&#xff09;與核回歸 位置編碼背后的理論解釋 本文探討了位置編碼背后的理論基礎&#xff0c;特別是傅里葉特征&#xff08;Fourier Feature&#xff09;與核回歸&#xff08;Kern…

Flutter Navigator2.0的原理和Web端實踐

01 背景與動機 在Navigator 2.0推出之前&#xff0c;Flutter主要通過Navigator 1.0和其提供的 API&#xff08;如push(), pop(), pushNamed()等&#xff09;來管理頁面路由。然而&#xff0c;Navigator 1.0存在一些局限性&#xff0c;如難以實現復雜的頁面操作&#xff08;如移…

代碼隨想錄算法訓練營第三天 | 鏈表理論基礎 | 707.設計鏈表

要求太多&#xff0c;代碼量太大&#xff0c;實在難以完成 在以前聽說&#xff0c;好的程序員&#xff0c;可以在短時生成大量的代碼&#xff0c;本題只方法才只有6個&#xff0c;根本不算多 每天手敲代碼量太少&#xff0c;才是問題 #include <iostream>class MyLink…

數據冒險、控制冒險、結構冒險

計算機組成原理 數據冒險、控制冒險、結構冒險 對所有用戶&#xff08;所有程序員&#xff09;可見&#xff1a;PSW、PC、通用寄存器 PSW&#xff08;條件轉移需要用到&#xff0c;程序員使用CMP指令的時候也需要用到所以是對用戶可見&#xff09;PC&#xff08;跳轉指令需要…

基于32單片機的RS485綜合土壤傳感器檢測土壤PH、氮磷鉀的使用(超詳細)

1-3為RS485綜合土壤傳感器的基本內容 4-5為基于STM32F103C8T6單片機使用RS485傳感器檢測土壤PH、氮磷鉀并顯示在OLED顯示屏的相關配置內容 注意&#xff1a;本篇文件講解使用的是PH、氮磷鉀四合一RS485綜合土壤傳感器&#xff0c;但里面的講解內容適配市面上的所有多合一的RS…

SpringBoot【十一】mybatis-plus實現多數據源配置,開箱即用!

一、前言&#x1f525; 環境說明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 正常情況下我們在開發系統的時候都是使用一個數據源&#xff0c;但是由于有些項目同步數據的時候不想造成數據庫io消耗壓力過大&#xff0c;便會一個項目對應多個數據源…

Node.js教程入門第一課:環境安裝

對于一個程序員來說&#xff0c;每學習一個新東西的時候&#xff0c;第一步基本上都是先進行環境的搭建&#xff01; 從本章節開始讓我們開始探索Node.js的世界吧! 什么是Node.js? 那么什么是Node.js呢&#xff1f;簡單的說Node.js 就是運行在服務端的 JavaScript JavaScript…

vim優化

1.編輯如下內容&#xff1a; cat > /root/.vimrc <<EOF set tabstop2 " 設置 Tab 為 2 個空格 set shiftwidth2 " 設置自動縮進為 2 個空格 set expandtab " 將 Tab 轉換為空格 " 基本設置 set number syntax on" 快捷鍵設置…

字符串性能對比

效率(1) : String.indexOf與String.contains效率測試_string contains效率-CSDN博客 結論是前者效率高&#xff0c;源碼里面conatins是使用indexof 在jdk8中contains直接調用的indexOf(其他版本沒有驗證),所以要說效率來說肯定是indexOf高,但contains也就多了一層方法棧,so 什…

移動網絡的原理

無線網絡是如何解決移動通信問題的 場景&#xff1a;用戶在一輛轎車內以150km/h的時速沿高速公路急速行駛時穿過多個無線接入網&#xff0c;用戶希望在整個旅程中保持一個與遠程應用的不間斷的TCP連接。 解決方案&#xff1a;移動節點的間接路由選擇方法可解決TCP鏈接不間斷的…

python學opencv|讀取圖像(十三)BGR圖像和HSV圖像互相轉換深入

【1】引言 前序學習過程中&#xff0c;我們偶然發現&#xff1a;如果原始圖像是png格式&#xff0c;將其從BGR轉向HSV&#xff0c;再從HSV轉回BGR后&#xff0c;圖像的效果要好于JPG格式。 文章鏈接為&#xff1a; python學opencv|讀取圖像&#xff08;十二&#xff09;BGR圖…