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

如何在DolphinDB中高效执行多列成对加权最小二乘回归?

DolphinDB 实现多列成对移动最小二乘回归(mslr)并生成指定格式结果

要实现多列成对的mslr计算并得到10行×6列的目标结果,核心是将每一对列的mslr结果拆分为单独的系数列,再横向合并。以下是两种高效实现方式:

方式1:直接拆分每对列的mslr结果(直观易读)

在SELECT语句中,对每一对列分别调用mslr,并将返回的2列系数(截距alpha、斜率beta)分别命名为目标列:

col1 = rand(10.0, 10)
col2 = rand(10.0, 10)
col3 = rand(10.0, 10)
col4 = rand(10.0, 10)
col5 = rand(10.0, 10)
col6 = rand(10.0, 10)
t = table(col1, col2, col3, col4, col5, col6) 

select 
    mslr(col1, col4, 3)[0] as re1_a, 
    mslr(col1, col4, 3)[1] as re1_b,
    mslr(col2, col5, 3)[0] as re2_a, 
    mslr(col2, col5, 3)[1] as re2_b,
    mslr(col3, col6, 3)[0] as re3_a, 
    mslr(col3, col6, 3)[1] as re3_b
from t
  • 说明:mslr(x,y,window)返回包含2列的表,通过[0]和[1]可分别提取alpha和beta向量,直接作为结果列。

方式2:使用peach批量处理列对(高效可扩展)

当需要处理的列对数量较多时,用peach批量生成每对列的mslr结果表,再横向拼接所有表:

col1 = rand(10.0, 10)
col2 = rand(10.0, 10)
col3 = rand(10.0, 10)
col4 = rand(10.0, 10)
col5 = rand(10.0, 10)
col6 = rand(10.0, 10)
t = table(col1, col2, col3, col4, col5, col6) 

// 定义列对列表
xCols = [col1, col2, col3]
yCols = [col4, col5, col6]

// 批量生成每对列的mslr结果表并自动命名系数列
resultTables = peach(
    def(x, y, idx){
        select mslr(x, y, 3) as `re${idx}_a`re${idx}_b from t
    }, 
    xCols, 
    yCols,
    1..xCols.size()
)

// 横向拼接所有结果表得到最终格式
finalResult = hconcat(resultTables...)
finalResult
  • 说明:
    1. peach并行处理每一对列,生成对应系数表并按索引命名列(如re1_a、re1_b);
    2. hconcat将所有结果表横向拼接,得到10行×6列的目标格式。

错误原因分析

  1. 传入列列表调用mslr报错:mslr仅接受单个数值向量作为X和Y参数,不支持向量列表输入;
  2. 使用each得到2行×6列结果:each在SELECT语句中会将每个mslr返回的表(10行2列)作为一个元素,最终将这些元素转置堆叠,导致结果维度不符合预期。

内容的提问来源于stack exchange,提问作者Stella.W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:40:58