C#,数值计算——用于从连续的数据值流估计任意分位数的计算方法与源程序

1 分位数Quantile
分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。
2 常见各类分位数
2.1 二分位数
对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,则中位数不唯一,通常取最中间的两个数值的平均数作为中位数,即二分位数。
一个数集中最多有一半的数值小于中位数,也最多有一半的数值大于中位数。如果大于和小于中位数的数值个数均少于一半,那么数集中必有若干值等同于中位数。
计算有限个数的数据的二分位数的方法是:把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。
2.2 四分位数
四分位数(Quartile)是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。
1)第一四分位数(Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;
2)第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字;
3)第三四分位数(Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。
第三四分位数与第一四分位数的差距又称四分位距。
2.3 百分位数
百分位数,统计学术语,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。运用在教育统计学中,例如表现测验成绩时,称PR值。
3 分位数的应用
分位数回归思想的提出至今已经有近30多年了,经过这近30多年的发展,分位数回归在理论和方法上都越来越成熟,并被广泛应用于多种学科中。它对于实际问题能提供更加全面的分析,无论是线性模型还是非线性模型,分位数回归都是一种很好的工具,它对一般回归模型做了有益的补充。
分位数回归是对以古典条件均值模型为基础的最小二乘法的延伸,它用几个分位函数来估计整体模型。分位数回归法的特殊情况就是中位数回归(最小一乘回归),用对称权重解决残差最小化问题,而其他条件分位数回归则需要用非对称权重解决残差最小化 [2] 。
分位数回归采用加权残差绝对值之和的方法估计参数,其优点体现在以下几方面:首先,它对模型中的随机扰动项不需做任何分布的假定,这样整个回归模型就具有很强的稳健性;其次,分位数回归本身没有使用一个连接函数来描述因变量的均值和方差的相互关系,因此分位数回归有着比较好的弹性性质;第三,分位数回归由于是对所有分位数进行回归,因此对于数据中出现的异常点具有耐抗性;第四,不同于普通的最小二乘回归,分位数回归对于因变量具有单调变换性;最后,分位数回归估计出来的参数具有在大样本理论下的渐进优良性。
4 计算分位数的C#源程序
using System;
namespace Legalsoft.Truffer
{
/// <summary>
/// Object for estimating arbitrary quantile values
/// from a continuing stream of data values.
/// </summary>
public class IQagent
{
public const int nbuf = 1000;
private int nq { get; set; }
private int nt { get; set; }
private int nd { get; set; }
private double[] pval { get; set; }
private double[] dbuf;
private double[] qile { get; set; }
private double q0 { get; set; }
private double qm { get; set; }
public IQagent()
{
this.nq = 251;
this.nt = 0;
this.nd = 0;
this.pval = new double[nq];
this.dbuf = new double[nbuf];
this.qile = new double[nq];
this.q0 = 1.0e99;
this.qm = -1.0e99;
for (int j = 85; j <= 165; j++)
{
pval[j] = (j - 75.0) / 100.0;
}
// Set general purpose array of p - values ranging from 1.0e-6 to 1~1.0e-6.
// You can change this if you want.
for (int j = 84; j >= 0; j--)
{
pval[j] = 0.87191909 * pval[j + 1];
pval[250 - j] = 1.0 - pval[j];
}
}
/// <summary>
/// Assimilate a new value from the stream.
/// </summary>
/// <param name="datum"></param>
public void add(double datum)
{
dbuf[nd++] = datum;
if (datum < q0)
{
q0 = datum;
}
if (datum > qm)
{
qm = datum;
}
if (nd == nbuf)
{
update();
}
}
/// <summary>
/// Batch update.
/// This function is called by add or report and should not be called directly
/// by the user.
/// </summary>
public void update()
{
int jd = 0;
int jq = 1;
double told = 0.0;
double tnew = 0.0;
double[] newqile = new double[nq];
Sorter.sort(dbuf, nd);
double qold = q0;
double qnew = q0;
qile[0] = newqile[0] = q0;
qile[nq - 1] = newqile[nq - 1] = qm;
pval[0] = Math.Min(0.5 / (nt + nd), 0.5 * pval[1]);
pval[nq - 1] = Math.Max(1.0 - 0.5 / (nt + nd), 0.5 * (1.0 + pval[nq - 2]));
for (int iq = 1; iq < nq - 1; iq++)
{
double target = (nt + nd) * pval[iq];
if (tnew < target)
{
for (; ; )
{
if (jq < nq && (jd >= nd || qile[jq] < dbuf[jd]))
{
qnew = qile[jq];
tnew = jd + nt * pval[jq++];
if (tnew >= target)
{
break;
}
}
else
{
qnew = dbuf[jd];
tnew = told;
if (qile[jq] > qile[jq - 1])
{
tnew += nt * (pval[jq] - pval[jq - 1]) * (qnew - qold) / (qile[jq] - qile[jq - 1]);
}
jd++;
if (tnew >= target)
{
break;
}
told = tnew++;
qold = qnew;
if (tnew >= target)
{
break;
}
}
told = tnew;
qold = qnew;
}
}
//if (tnew == told)
if (Math.Abs(tnew - told) <= float.Epsilon)
{
newqile[iq] = 0.5 * (qold + qnew);
}
else
{
newqile[iq] = qold + (qnew - qold) * (target - told) / (tnew - told);
}
told = tnew;
qold = qnew;
}
// qile = newqile;
qile = Globals.CopyFrom(newqile);
nt += nd;
nd = 0;
}
/// <summary>
/// Return estimated p-quantile for
/// the data seen so far. (E.g., p D 0:5 for median.)
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
public double report(double p)
{
if (nd > 0)
{
update();
}
int jl = 0;
int jh = nq - 1;
int j;
while (jh - jl > 1)
{
j = (jh + jl) >> 1;
if (p > pval[j])
{
jl = j;
}
else
{
jh = j;
}
}
j = jl;
double q = qile[j] + (qile[j + 1] - qile[j]) * (p - pval[j]) / (pval[j + 1] - pval[j]);
return Math.Max(qile[0], Math.Min(qile[nq - 1], q));
}
}
}
相关文章:
C#,数值计算——用于从连续的数据值流估计任意分位数的计算方法与源程序
1 分位数Quantile 分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。 2 常见各类分位数 2.1 二分位…...
实践分享:小程序事件系统设计
微信小程序官方文档中解释说:事件是用于子组件向父组件传递数据,可以传递任意数据。 小程序开发中的事件是指视图层到逻辑层的通讯方式,主要是可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件&#…...
无涯教程-Perl - bless函数
描述 此函数告诉REF引用的实体,它现在是CLASSNAME包中的对象,如果省略CLASSNAME,则为当前包中的对象。建议使用bless的两个参数形式。 语法 以下是此函数的简单语法- bless REF, CLASSNAMEbless REF返回值 该函数返回对祝福到CLASSNAME中的对象的引用。 例 以下是显示其…...
Java关键字:final解析
目录 一、final变量 二、final方法 三、final类 final是Java语言中的一个关键字,凡是被final关键字修饰过的内容都是不可改变的。 一、final变量 final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常࿰…...
LeetCode--HOT100题(25)
目录 题目描述:141. 环形链表(简单)题目接口解题思路代码 PS: 题目描述:141. 环形链表(简单) 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连…...
外卖项目,登录设计,nginx反向代理,MD5明文加密
.gitignore文件里的东西是进行排除,不用git进行管理。登录设计, controller 接收并封装参数调用service方法查询数据库封装结果并响应 登录成功后,生成jwt令牌 Service层 调用mapper查询数据库密码比对返回结果Mapper 编写sql语句为什么前端不…...
【云原生】kubernetes在Pod中init容器的作用和使用
目录 Pod 中 init 容器 1 init 容器特点 2 使用 init 容器 Pod 中 init 容器 Init 容器是一种特殊容器,在Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 1 init 容器特点 init 容器与普通的容器非常像…...
springboot+vue分页
java项目 导包 <!--springboot整合pagehelper--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.1</version></dependency>前端 vue项目…...
【linux】ssh 和adb connect区别
问:ssh 与ping的区别 答:SSH(Secure Shell)和Ping是两种完全不同的网络工具。 SSH是一种加密的网络协议,用于安全地远程管理或访问远程计算机。它提供了一种安全的通信方式,可以在不安全的网络上进行远程登…...
iPhone手机怎么恢复出厂设置(详解)
如果您的iPhone遇到了手机卡顿、软件崩溃、内存不足或者忘记手机解锁密码等问题,恢复出厂设置似乎是万能的解决方法。 什么是恢复出厂设置?简单来说,就是让手机重新变成一张白纸,将手机所有数据都进行格式化,只保留原…...
灵活利用ChatAI,减轻工作任务—语言/翻译篇
前言 ChatAI在语言和翻译方面具有重要作用。它能够帮助用户进行多语言交流、纠正错误、学习新语言、了解不同文化背景,并提供文本翻译与校对等功能。通过与ChatAI互动,我们能够更好地利用技术来拓展自己在语言领域的能力和知识,实现更加无障…...
【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
python 定时器,如何进行周期性的函数运行、状态检查,百分比计算?
文章大纲 schedulescheschedule线程实现1实现2实现3协程(coroutine)参考文献schedule https://stackoverflow.com/questions/373335/how-do-i-get-a-cron-like-scheduler-in-python https://docs.python.org/3/library/sched.html sche schedule import schedule import ti…...
无涯教程-Perl - fcntl函数
描述 该函数是系统fcntl()函数的Perl版本。使用FILEHANDLE上的SCALAR执行FUNCTION指定的功能。 SCALAR包含函数要使用的值,或者是任何返回信息的位置。 语法 以下是此函数的简单语法- fcntl FILEHANDLE, FUNCTION, SCALAR返回值 该函数返回0,但如果fcntl()的返回值为0,则返…...
docker 命令解析
docker命令解析的文章参考 build 和 commit build适合从头创建一个清晰干净的镜像。 build是从Dockfile产生新的镜像,对于使用者能清晰的知道镜像中包含了哪些内容。commit适合将已有的容器打包提供给其他使用者。 commit是从已经存在的容器产生镜像,这…...
Map集合 实体类对象的相互转换
一、Map转实体类 1. fastjson工具类 导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.54</version> </dependency>代码实现 Map<String, Object> authorMap n…...
用chatGPT从左右眼图片生成点云数据
左右眼图片 需求 需要将左右眼图像利用视差生成三维点云数据 先问问chatGPT相关知识 进一步问有没有现成的软件 chatGPT提到了OpenCV,我们让chatGPT用OpenCV写一个程序来做这个事情 当然,代码里面会有一些错误,chatGPT写的代码并不会做模…...
dy六神参数记录分析(立秋篇)
version: 23.9 X-SSSTUB: 搜索:x-tt-dt var hashMap Java.use("java.util.HashMap");hashMap.put.implementation function (a, b) {console.log("hashMap.put: ", a, b);return this.put(a, b);}https://codeooo.blog.csdn.n…...
微信-jssdk使用
需求: h5中使用微信的jsSDK,后续实现微信定位以及多图上传 微信文档 申请测试公众号 1.测试公众号进行配置 其中的域名是本地的ip地址 config接口进行权限配置,动态获取JS-SDK权限验证的签名 获取公众号accessToken以及jsTicket public static String WeChatAppId="wx…...
guava-retry使用笔记
guava-retry使用笔记 xml依赖 <dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>2.0.0</version> </dependency>使用案例 重试3次,每次间隔3秒 /*** 重试…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
