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

如何为Bambi模型生成的Inference Data设置自定义Coordinate?

给Bambi模型设置自定义ArviZ Coordinate

Bambi生成的Inference Data默认用dim_*命名维度,是因为它自动处理分类变量但未关联自定义坐标名。要设置自定义坐标,主要有两种可行方式:

方法1:模型定义阶段指定坐标

在初始化Bambi Model时,通过coords参数传入字典,键为你想要的坐标名称,值为该坐标对应的类别列表。这样Bambi会直接将分类变量维度关联到自定义坐标。

示例代码:

import bambi as bmb
import arviz as az
import pandas as pd

# 模拟8学校风格的数据集
data = pd.DataFrame({
    "school": ["School A", "School B", "School C", "School D", 
               "School E", "School F", "School G", "School H"],
    "y": [28, 8, -3, 7, -1, 1, 18, 12],
    "sigma": [15, 10, 16, 11, 9, 11, 10, 18]
})

# 定义模型时传入coords参数绑定自定义坐标
model = bmb.Model(
    "y ~ 1 + (1|school)",
    data=data,
    coords={"school": data["school"].unique()}  # 关联school变量与自定义坐标
)

# 拟合模型并生成Inference Data
idata = model.fit()

# 验证坐标是否生效
print(idata.posterior.coords)

执行后,生成的idata中分组维度会使用school作为坐标名,而非默认的dim_*格式。

方法2:生成Inference Data后手动修改坐标

如果已经完成模型拟合,也可以直接对现有Inference Data对象进行坐标重命名:

# 将默认的dim_0维度重命名为school
idata = idata.assign_coords(school=idata.posterior.dim_0.values)
idata = idata.rename_dims({"dim_0": "school"})

注意事项

  • 使用分层模型(如(1|school)这类随机效应)时,coords字典的键必须和公式中的分组变量名完全一致,才能正确映射维度。
  • 自定义坐标的类别列表要和数据中分类变量的取值匹配,避免维度不对应问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:25:19