当前位置: 首页 > news >正文

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 分位数&#xff08;Quantile&#xff09;&#xff0c;亦称分位点&#xff0c;是指将一个随机变量的概率分布范围分为几个等份的数值点&#xff0c;常用的有中位数&#xff08;即二分位数&#xff09;、四分位数、百分位数等。 2 常见各类分位数 2.1 二分位…...

实践分享:小程序事件系统设计

微信小程序官方文档中解释说&#xff1a;事件是用于子组件向父组件传递数据&#xff0c;可以传递任意数据。 小程序开发中的事件是指视图层到逻辑层的通讯方式&#xff0c;主要是可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上&#xff0c;当达到触发事件&#…...

无涯教程-Perl - bless函数

描述 此函数告诉REF引用的实体,它现在是CLASSNAME包中的对象,如果省略CLASSNAME,则为当前包中的对象。建议使用bless的两个参数形式。 语法 以下是此函数的简单语法- bless REF, CLASSNAMEbless REF返回值 该函数返回对祝福到CLASSNAME中的对象的引用。 例 以下是显示其…...

Java关键字:final解析

目录 一、final变量 二、final方法 三、final类 final是Java语言中的一个关键字&#xff0c;凡是被final关键字修饰过的内容都是不可改变的。 一、final变量 final关键字可用于变量声明&#xff0c;一旦该变量被设定&#xff0c;就不可以再改变该变量的值。通常&#xff0…...

LeetCode--HOT100题(25)

目录 题目描述&#xff1a;141. 环形链表&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;141. 环形链表&#xff08;简单&#xff09; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连…...

外卖项目,登录设计,nginx反向代理,MD5明文加密

.gitignore文件里的东西是进行排除&#xff0c;不用git进行管理。登录设计&#xff0c; controller 接收并封装参数调用service方法查询数据库封装结果并响应 登录成功后&#xff0c;生成jwt令牌 Service层 调用mapper查询数据库密码比对返回结果Mapper 编写sql语句为什么前端不…...

【云原生】kubernetes在Pod中init容器的作用和使用

目录 Pod 中 init 容器 1 init 容器特点 2 使用 init 容器 Pod 中 init 容器 Init 容器是一种特殊容器&#xff0c;在Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 1 init 容器特点 init 容器与普通的容器非常像&#xf…...

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区别

问&#xff1a;ssh 与ping的区别 答&#xff1a;SSH&#xff08;Secure Shell&#xff09;和Ping是两种完全不同的网络工具。 SSH是一种加密的网络协议&#xff0c;用于安全地远程管理或访问远程计算机。它提供了一种安全的通信方式&#xff0c;可以在不安全的网络上进行远程登…...

iPhone手机怎么恢复出厂设置(详解)

如果您的iPhone遇到了手机卡顿、软件崩溃、内存不足或者忘记手机解锁密码等问题&#xff0c;恢复出厂设置似乎是万能的解决方法。 什么是恢复出厂设置&#xff1f;简单来说&#xff0c;就是让手机重新变成一张白纸&#xff0c;将手机所有数据都进行格式化&#xff0c;只保留原…...

灵活利用ChatAI,减轻工作任务—语言/翻译篇

前言 ChatAI在语言和翻译方面具有重要作用。它能够帮助用户进行多语言交流、纠正错误、学习新语言、了解不同文化背景&#xff0c;并提供文本翻译与校对等功能。通过与ChatAI互动&#xff0c;我们能够更好地利用技术来拓展自己在语言领域的能力和知识&#xff0c;实现更加无障…...

【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&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产生新的镜像&#xff0c;对于使用者能清晰的知道镜像中包含了哪些内容。commit适合将已有的容器打包提供给其他使用者。 commit是从已经存在的容器产生镜像&#xff0c;这…...

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&#xff0c;我们让chatGPT用OpenCV写一个程序来做这个事情 当然&#xff0c;代码里面会有一些错误&#xff0c;chatGPT写的代码并不会做模…...

dy六神参数记录分析(立秋篇)

version&#xff1a; 23.9 X-SSSTUB: 搜索&#xff1a;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次&#xff0c;每次间隔3秒 /*** 重试…...

编译原理|FIRST、FOLLOW、SELECT集超详细解读(含例题)

编译原理&#xff5c;FIRST、FOLLOW、SELECT集超详细解读&#xff08;含例题&#xff09;在编译原理的自顶向下语法分析中&#xff0c;FIRST、FOLLOW、SELECT三个集合是核心基石——它们是构造LL(1)分析表、判断文法是否为LL(1)文法的关键。很多同学刚开始接触时会被抽象的定义…...

2026 在线考试系统哪个好?功能、客户、方案、优势与服务全对比

前言数字化转型浪潮下&#xff0c;在线考试系统已从教育、企业的辅助工具&#xff0c;升级为覆盖教学考核、人才招聘、员工培训、政务考核、资格认证、知识竞赛的核心数字基础设施。据艾瑞咨询 2026 年 2 月发布的《中国线上考试行业发展白皮书》显示&#xff0c;2025 年中国线…...

告别混淆!一文讲透 Flink State Backend 与 Checkpoint Storage

一、引言在 Flink 1.13 版本之前&#xff0c;StateBackend 接口是一个“大杂烩”&#xff0c;它同时负责两件事&#xff1a;状态的本地访问与存储&#xff08;Task 运行时状态存在哪&#xff1f;内存还是 RocksDB&#xff1f;&#xff09;Checkpoint 数据的持久化&#xff08;做…...

YOLO26 ONNX Runtime 部署实战:告别NMS后处理,边缘推理新标杆

🚀 YOLO26 ONNX Runtime 部署实战:告别NMS后处理,边缘推理新标杆 摘要: Ultralytics 重磅推出的 YOLO26 不仅在精度上实现了代际飞跃,更在架构层面进行了颠覆性革新——彻底移除了传统的 NMS(非极大值抑制)后处理环节。本文将带你深入了解 YOLO26 的核心优势,并基于 …...

浙大软院推免机试96分学长复盘:PAT甲级真题怎么刷才有效?(附2021年四道真题思路)

浙大软院推免机试96分备考全攻略&#xff1a;从刷题策略到临场发挥 在计算机专业推免的激烈竞争中&#xff0c;机试成绩往往成为决定成败的关键因素。作为一位在浙大软院推免机试中获得96分的过来人&#xff0c;我深刻理解备考过程中的迷茫与困惑——刷了上百道题却收效甚微&am…...

国产车规芯片崛起,如何用东软睿驰NeuSAR或经纬恒润方案快速适配?

国产车规芯片与AUTOSAR方案融合实战&#xff1a;从芯驰MCU到NeuSAR/经纬恒润的适配指南 当一颗国产车规级MCU遇上自主AUTOSAR基础软件&#xff0c;这场"中国芯"与"中国魂"的相遇&#xff0c;正在重构汽车电子开发的成本结构与技术生态。去年某新能源车企的…...

go-jsonnet实际应用案例:Kubernetes配置管理与微服务架构

go-jsonnet实际应用案例&#xff1a;Kubernetes配置管理与微服务架构 【免费下载链接】go-jsonnet 项目地址: https://gitcode.com/gh_mirrors/go/go-jsonnet 在现代云原生应用开发中&#xff0c;Kubernetes配置管理和微服务架构的复杂性常常让开发者头疼。go-jsonnet作…...

5分钟上手Real-ESRGAN:让模糊图片瞬间清晰的AI图像增强神器

5分钟上手Real-ESRGAN&#xff1a;让模糊图片瞬间清晰的AI图像增强神器 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN 你是否曾为…...

macOS Homebrew 安装 MySQL

一、安装 MySQL1. 安装完整版 MySQL&#xff08;服务端全套客户端&#xff09;# 安装最新版 MySQL brew install mysql说明&#xff1a;brew install mysql 包含服务端 mysqld 命令行客户端 mysql自带工具&#xff1a;mysql、mysqldump、mysqladmin、mysqlshow 等常用运维工具…...

经营分析——解读集团经营分析报告框架【附全文阅读】

集团经营分析报告框架推介总结 适应人群&#xff1a;集团高管、经营管理部、财务负责人、各业务单元负责人、经营分析专员、数据分析师及战略规划人员。 重要性总结&#xff1a;本 PPT 是集团级经营分析的标准化、体系化顶层框架&#xff0c;构建 “战略 — 环境 — 业绩 — 问…...