You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求解释:基于面包偏好概率计算相关系数的JavaScript代码

面包品牌偏好相关系数代码逻辑解释

现有一大型群体被调查面包品牌偏好(可选A、B、C),其中偏好A的比例为pA,偏好B的比例为pB,剩余群体偏好C。以下是对这段计算相关系数的JavaScript代码的逐行逻辑解释:

function 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
}

核心逻辑前提

这段代码计算的是两个0-1指示变量的皮尔逊相关系数:

  • 变量X:代表「是否偏好A」(1=是,0=否)
  • 变量Y:代表「是否偏好B」(1=是,0=否)
    由于一个人只能选一个品牌,X和Y不可能同时为1,这是理解所有计算的关键。

逐行解释

  • 协方差计算:let covXY = -pA * pB
    协方差的公式是 E[XY] - E[X]E[Y]。因为X和Y无法同时为1,所以E[XY](XY的期望值)为0;而E[X]是X的期望值即pA,E[Y]是Y的期望值即pB,代入后得到协方差为 0 - pA*pB = -pA*pB。

  • X的方差计算:let varX = pA * (1-pA)
    X是伯努利分布(0-1分布)的变量,这类变量的方差公式就是 p*(1-p),这里直接用偏好A的比例pA套用公式即可。

  • Y的方差计算:let varY = (1-pB)* pB
    和X同理,Y也是伯努利分布变量,用偏好B的比例pB套用伯努利方差公式。

  • 相关系数计算:let res = covXY / (Math.sqrt(varX*varY, 2))
    皮尔逊相关系数的公式是「协方差 ÷ 两个变量标准差的乘积」。其中:

    • Math.sqrt(varX*varY) 等价于 sqrt(varX) * sqrt(varY),也就是两个变量的标准差相乘
    • 注意:Math.sqrt只需要一个参数,这里的第二个参数2是无效的,但不影响结果(因为sqrt默认就是开平方)

结果意义

最终返回的相关系数为负数,符合实际逻辑:偏好A的人越多,偏好B的人就越少,两者呈负相关关系。

内容的提问来源于stack exchange,提问作者JsDeV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:50:33