如何为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
相关产品推荐
相关产品推荐

