信号检测理论(Signal Detection Theory, SDT)
信号检测理论(Signal Detection Theory, SDT)模拟是一种实验设计,用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域,信号检测理论都非常重要。
一、基础概念:
在信号检测理论的模拟中,通常会涉及以下几个关键概念:
信号(Signal):需要被检测或识别的刺激或信息。
噪声(Noise):干扰信号检测的背景或无关信息。
决策标准(Decision Criterion):用于判断信号是否存在的阈值或标准。
击中(Hit):当信号实际存在且被正确检测到时的情况。
漏报(Miss):当信号实际存在但未被检测到时的情况。
虚报(False Alarm):当信号实际上不存在但被错误地检测为存在时的情况。
正确否定(Correct Rejection):当信号实际上不存在且被正确地判断为不存在时的情况。

二、统计决策理论:
(1)两个分布的重叠程度决定了被试对信号和噪音的辨别力(感受性)

d ′ d' d′被称为辨别力指数(灵敏度)。可以有两个分布的均值差来决定。
重叠越多,辨别力指数越小,辨别力越弱。
重叠越少,辨别力指数越大,辨别力越强。
特别地, d ′ = 0 d'=0 d′=0,均值相同,完全重叠(不一定重合),无法辨别。
(2)被试的决策标准决定了其反应倾向:
定义 C C C:决策标准
C的右边判断为“有”,左边判断为“无”
定义 β β β:似然比,可由 Y (击中) Y (虚报) \frac{Y(击中)}{Y(虚报)} Y(虚报)Y(击中)得到,一般给出β后,即可通过计算来确定C的位置(大小)。
β > 1 β>1 β>1 :严格——被试的判断倾向于“无”
β = 1 β=1 β=1 :中等——被试的判断“均等”
β < 1 β<1 β<1 :宽松——被试的判断倾向于“有”

(3)ROC曲线
一般也叫等感受曲线,有以下几个特点:
[1]击中率和虚报率呈正相关关系,C增大,二者同时减小;C减小,标准变松,二者同时增大。
[2]击中率不等于虚报率
- 存在3中极端情况:
(1)击中率=0:C趋近于正无穷
(2)击中率=1,C趋近于负无穷
(3) d ′ = 0 d'=0 d′=0:曲线完全重叠,均值相同
这三种情况意义不大
[3]越往左下,反应标准越严, β β β越大,C越大
[4] d ′ d' d′越大,曲线区分度越大

三、示例:
下面是一个示例(Julia文件):
1)
Let’s simulate 2 signal distributions, plot them, and compute d’ and the probabilities of the four outcomes with a specific criterion
using Distributions
using PlotlyJS# --- Signal Detection Theory Simulation --- 信号检测理论(Signal Detection Theory, SDT)# 1. Parameters
dPrime = 1.5 # Sensitivity (d'),灵敏度(判别力指数)
criterion = 0.8 # Response criterion,判断标准# 2. Distributions
dist_noise = Normal(0, 1) # Noise distribution 噪声分布
dist_signal = Normal(dPrime, 1) # Signal + noise distribution 信号+噪声分布# 3. Generate trials
nTrials = 1000
signalPresent = rand(Bernoulli(0.5), nTrials) # 生成一个布尔数组,每个元素表示一次试验中信号是否出现,50% signal presence
stimuli = signalPresent .* rand(dist_signal, nTrials) + (1 .- signalPresent) .* rand(dist_noise, nTrials)# 4. Apply criterion
responses = stimuli .> criterion # 生成一个布尔值数组responses,大于criterion的为true,否则为false
# 5. Calculate outcomes
hits = sum(responses[signalPresent]) # 击中
misses = sum(.!responses[signalPresent]) # 漏报
falseAlarms = sum(responses[.!signalPresent]) # 虚报
correctRejections = sum(.!responses[.!signalPresent]) # 正确否定# --- Visualization with PlotlyJS ---# Generate data for histograms
noise_data = rand(dist_noise, 10000)
signal_data = rand(dist_signal, 10000)
y = max
# Create the histogram traces
noise_trace = PlotlyJS.histogram(x=noise_data, name="Noise", opacity=0.5)
signal_trace = PlotlyJS.histogram(x=signal_data, name="Signal + Noise", opacity=0.5)# Create the criterion line trace,画判断标准线
criterion_trace = PlotlyJS.scatter(x=[criterion, criterion], y=[0, 600],mode="lines",name="Criterion",line=attr(color="red", dash="dash")
)# Create the plot
plt = PlotlyJS.plot([noise_trace, signal_trace, criterion_trace],Layout(xaxis_title="Internal Response",yaxis_title="Frequency",title="Signal Detection Theory Demonstration",barmode="overlay")
)# Display the plot
display(plt)# Display results
println("d': ", dPrime)
println("Criterion: ", criterion)
println("Hits: ", hits, " (", round(hits / sum(signalPresent) * 100, digits=2), "%)")
println("Misses: ", misses, " (", round(misses / sum(signalPresent) * 100, digits=2), "%)")
println("False Alarms: ", falseAlarms, " (", round(falseAlarms / sum(.!signalPresent) * 100, digits=2), "%)")
println("Correct Rejections: ", correctRejections, " (", round(correctRejections / sum(.!signalPresent) * 100, digits=2), "%)")
画出分布图像:

上图红色虚线就是C,蓝色分布是噪声,红色是信号。
输出:
d': 1.5
Criterion: 0.8
Hits: 369 (73.95%)
Misses: 130 (26.05%)
False Alarms: 89 (17.76%)
Correct Rejections: 412 (82.24%)
ROC曲线相关:
using Distributions
using PlotlyJS# --- Signal Detection Theory Simulation (Multiple d') --- 多个d'的信号检测理论模拟# 1. Parameters
dPrimes = [0.5, 1.0, 1.5, 2.0] # Range of sensitivities
criteria = range(-3, 3, length=100) # Range of criteria for ROC ,C变化范围# 2. Distributions
dist_noise = Normal(0, 1) # Noise distribution 噪声分布# --- ROC Analysis and Visualization ---
# 准备一个ROC曲线图的布局,为后续添加具体的ROC曲线数据做准备。
plt = PlotlyJS.plot(Layout(xaxis_title="False Alarm Rate",yaxis_title="Hit Rate",title="ROC Curves for Different d'",xaxis_range=[0, 1],yaxis_range=[0, 1],xaxis_constrain="domain", # Ensure the x-axis stays within the plot areayaxis=attr(scaleanchor="x", # Link y-axis scaling to x-axisscaleratio=1), # Maintain 1:1 aspect ratio))# Add diagonal reference line
PlotlyJS.add_trace!(plt, PlotlyJS.scatter(x=[0, 1], y=[0, 1], mode="lines", line=attr(color="gray", dash="dash"), name="Chance Level"))for dPrime in dPrimes# 根据不同的d'生成不同的信号分布。因为噪声分布固定,所以d'的大小决定了信号分布的位置。dist_signal = Normal(dPrime, 1) # Signal + noise distribution 信号+噪声分布# 3. Generate trials (for each d')nTrials = 1000signalPresent = rand(Bernoulli(0.5), nTrials)stimuli = signalPresent .* rand(dist_signal, nTrials) + (1 .- signalPresent) .* rand(dist_noise, nTrials)# 4. ROC CalculationhitRates = zeros(length(criteria))falseAlarmRates = zeros(length(criteria))for (i, criterion) in enumerate(criteria)responses = stimuli .> criterionhits = sum(responses[signalPresent])falseAlarms = sum(responses[.!signalPresent])hitRates[i] = hits / sum(signalPresent)falseAlarmRates[i] = falseAlarms / sum(.!signalPresent)end# 5. Add ROC Curve to PlotPlotlyJS.add_trace!(plt, PlotlyJS.scatter(x=falseAlarmRates, y=hitRates, mode="lines", name="d' = $dPrime"))
end# Display the plot
display(plt)
画出ROC曲线:

可以发现随 d ′ d' d′增大图像越往上
思考:
上面四个率和机器学习中的性能评估指标有相似之处:

相关文章:
信号检测理论(Signal Detection Theory, SDT)
信号检测理论(Signal Detection Theory, SDT)模拟是一种实验设计,用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域,信号检测理论都非常重要。 一、基础概念: 在信…...
Flink源码剖析
写在前面 最近一段时间都没有更新博客了,原因有点离谱,在实现flink的两阶段提交的时候,每次执行自定义的notifyCheckpointComplete时候,好像就会停止消费数据,完成notifyComplete后再消费数据;基于上述原因…...
[Python学习日记-39] 闭包是个什么东西?
[Python学习日记-39] 闭包是个什么东西? 简介 闭包现象 闭包意义与作用 简介 在前面讲函数和作用域的时候应该提到过,当函数运行结束后会由 Python 解释器自带的垃圾回收机制回收函数内作用域已经废弃掉的变量,但是在 Python 当中还有一种…...
XSLT 实例:掌握 XML 转换的艺术
XSLT 实例:掌握 XML 转换的艺术 引言 XSLT(可扩展样式表语言转换)是一种强大的工具,用于将 XML(可扩展标记语言)文档转换为其他格式,如 HTML、PDF 或纯文本。在本文中,我们将通过一…...
【C++】第一节:C++入门
1、C关键字 2、命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染&am…...
CSP-S 2021 T1廊桥分配
CSP-S 2021 T1廊桥分配 枚举分配给国内航班和国外航班的廊桥数量,若分配给国内机场 i i i个廊桥,则国外机场就有 n − i n-i n−i个廊桥,在此基础上分别判断两边各能通过多少飞机。用一个小根堆存储飞机离开的时间,枚举到一个飞机…...
项目配置说明
文章目录 一、下载 vscode 并安装相应扩展1.1 下载 vscode1.2 安装扩展 二、git 项目三、git 提交流程3.1 确定要提交的代码 四、git 拉新流程 一、下载 vscode 并安装相应扩展 1.1 下载 vscode vscode 我已经发群里了,或者自己去官网下载也行 1.2 安装扩展 打开…...
linux网络编程实战
前言 之前找工作的之后写了一些网络编程的笔记和代码,然后现在放到csdn上保存一下。有几个版本的,看看就好。就是简单的实现一下服务端和客户端之间的交互的,还没有我之前上linux编程课写的代码复杂。 哦对了,这个网络编程的代码对…...
网络基础 【HTTP】
💓博主CSDN主页:麻辣韭菜💓 ⏩专栏分类:Linux初窥门径⏪ 🚚代码仓库:Linux代码练习🚚 💻操作环境: CentOS 7.6 华为云远程服务器 🌹关注我🫵带你学习更多Linux知识…...
[Linux#61][UDP] port | netstat | udp缓冲区 | stm32
目录 0. 预备知识 1. 端口号的划分范围 2. 认识知名端口号 3. netstat 命令 4. pidof 命令 二.UDP 0.协议的学习思路 1. UDP 协议报文格式 报头与端口映射: 2. UDP 的特点 面向数据报: 3. UDP 的缓冲区 4. UDP 使用注意事项 5. 基于 UDP 的…...
定义类方法的错误总结
struct Renderer {vector<function<void(vector<string>)>> fileDropListeners;// 定义一个方法,它是将一个函数作为输入,callback是形参void print(function<void(float)> callback_func);void onFileDrop(function<void(ve…...
Redis --- 第三讲 --- 通用命令
一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value : key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…...
【Linux】进程间关系与守护进程
超出能力之外的事, 如果永远不去做, 那你就永远无法进步。 --- 乌龟大师 《功夫熊猫》--- 进程间关系与守护进程 1 进程组2 会话3 控制终端4 作业控制5 守护进程 1 进程组 之前我们提到了进程的概念, 其实每一个进程除了有一个进程 ID(P…...
【可视化大屏】将柱状图引入到html页面中
到这里还是用的死数据,先将柱状图引入html页面测试一下 根据上一步echarts的使用步骤,引入echarts.js后需要初始化一个实例对象,所以新建一个index.js文件来进行创建实例化对象和配置数据信息等。 //在index.html引入<script src"j…...
gm/ID设计方法学习笔记(一)
前言:为什么需要gm/id (一)主流设计方法往往侧重于强反型区(过驱>0.2V),低功耗设计则侧重于弱反型区(<0),但现在缺乏对中反型区的简单和准确的手算模型。 1.对于…...
高度细化的SAGA模式实现:基于Spring Boot与RabbitMQ的跨服务事务
场景与技术栈 场景:电商系统中的订单创建流程,涉及订单服务(Order Service)、库存服务(Inventory Service)、支付服务(Payment Service)。 技术栈: Java 11 Spring Bo…...
Vue工程化开发
Vue工程化开发 一、工程化开发和脚手架 1.开发Vue的两种方式 核心包传统开发模式:基于html / css / js 文件,直接引入核心包,开发 Vue。工程化开发模式:基于构建工具(例如:webpack)的环境中开…...
Ray_Tracing_The_Next_Week下
5image Texture Mapping 图像纹理映射 我们之前虽然在交点信息新增了uv属性,但其实并没有使用,而是通过p交点笛卡尔坐标确定瓷砖纹理或者大理石噪声纹理的值 现在通过uv坐标读取图片,通过std_image库stbi_load(path)…...
ES索引生命周期管理
基于如何 定时删除ES索引过期数据 而引发的一系列关于ES索引生命周期管理ILM(Index Lifecycle Management)的学习 快速上手 :定时删除ES索引中的过期数据 1. ILM解决什么问题? ES从6.7版本引入ILM,通过ILM可以解决哪些问题呢? 自动新建…...
Oracle数据库体系结构基础
关于Oracle体系结构 基于Oracle11g体系结构 目标: 了解Oracle体系结构掌握逻辑存储结构掌握物理存储结构熟悉Oracle服务器结构熟悉常用的数据字典 Oracle数据库管理中的重要的三个概念 实例(instance):实例是指一组Oracle后台进程以及在服务器中分配…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
