js计算皮尔逊相关系数

代码如下;

复制代码
let XGX= {
    correlationCoefficient(pA, pB) {
        let covXY = -pA * pB
        let varX = pA * (1-pA) 
        let varY = (1-pB)* pB
        let res = covXY / (Math.sqrt(varX*varY, 2))
        return res
    },
    correlation(x,y){
        x=[0.3,50.2,99.5,199.3,299,398];
        y=[0.1,50,99.9,200,300,400];
        // 计算均值
        const avgX=x.reduce((a,b)=>a+b,0)/x.length;
        const avgY=y.reduce((a,b)=>a+b,0)/y.length;
        //计算差值
        const diffX=x.map((value,index)=>value-avgX);
        const diffY=y.map((value,index)=>value-avgY);
        //计算乘积
        const product =diffX.map((value,index)=>value*diffY[index]);
        //计算相关系数
        const sumProduct=product.reduce((a,b)=>a+b,0);
        const correlation=sumProduct/(x.length*y.length);
        return correlation
    },
    /**
     * 计算皮尔逊相关系数
     * @list1:数字列表1
     * @list2:数字列表2
     * @return number
    * */
    pearson(list1,list2){
        let newList = [];
        let len = list1.length;
        for(let i=0;i<len;i++){newList.push(list1[i]*list2[i]);}
        let mean1 = this.mean(list1),mean2=this.mean(list2);
        let cov = this.mean(newList)-mean1*mean2;
        return cov/(this.std(list1,mean1)*this.std(list2,mean2))
    },
    /**
     * 计算平均值
     * @list:数字列表
     * @return number
     * */
    mean(list){
        let sum = 0;
        list.forEach((item)=>{sum+=item})
        return sum/list.length;
    },
    /**
     * 计算标准差
     * @list:数字列表
     * @mean:列表list的平均值
     * @return number
     * */
    std(list,mean){
        let sum =0;
        list.forEach((item)=>{sum+=Math.pow(item-mean,2)})
        return Math.sqrt(sum/list.length)
    }
};
export default XGX

调用:

效果:

相关推荐
红藕香残玉簟秋15 小时前
【Rust学习】windows安装rust
开发语言·学习·rust
小雨下雨的雨16 小时前
鸿蒙PC用Electron框架——Canvas蜡笔抖动效果实现技术深度解析
前端·javascript·华为·electron·鸿蒙系统
弹简特16 小时前
【零基础学Python】08-Python面向对象之封装、多态和函数进阶
开发语言·python
人道领域16 小时前
一篇文章解决Codex的安装,实操一遍过
java·开发语言·codex
thisiszdy16 小时前
<C++> 智能指针
开发语言·c++
fox_lht16 小时前
第十四章 一个输入和输出项目:构建一个命令行程序
开发语言·后端·rust
郑州光合科技余经理16 小时前
海外版外卖系统:如何快速搭建国际化外卖平台
java·开发语言·前端·人工智能·小程序·系统架构·php
Cheng小攸16 小时前
协议分析与分析工具(一)
开发语言·php
fox_lht16 小时前
14.2.读文件
开发语言·后端·rust
codeejun16 小时前
每日一Go-74、Go 云原生可观测性实战之OpenTelemetry 全链路采集:Trace + Metrics + Logs
开发语言·云原生·golang