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

如何在rstan中同时为多个站点拟合帕累托分布?

多站点帕累托分布拟合的RStan实现

Stan模型代码

修改原单站点模型,适配多站点结构,让每个站点独立拟合alpha参数:

data {
    int<lower=1> S;                // 站点总数
    int<lower=0> N;                // 所有站点的总观测数
    vector<lower=0>[N] x;          // 合并后的所有观测值
    int<lower=1, upper=S> site[N]; // 每个观测对应的站点索引(从1到S)
    vector<lower=0>[S] x_min;      // 每个站点对应的x_min阈值
}

parameters {
    vector<lower=0, upper=5>[S] alpha; // 每个站点独立的alpha参数
}

model {
    // 每个站点的alpha参数使用相同的先验分布
    alpha ~ lognormal(1, 1) T[0, 5];
    
    // 遍历所有观测,匹配对应站点的参数计算似然
    for (n in 1:N) {
        x[n] ~ pareto(x_min[site[n]], alpha[site[n]]);
    }
}

R数据准备代码

假设你的多站点数据存储在multi_site_data数据框中,包含x(观测值)和site_label(站点标识)字段,按以下方式整理输入数据:

# 替换为你的实际多站点数据框
multi_site_data <- your_multi_site_data

# 将站点标识转换为整数索引(从1开始)
multi_site_data$site_idx <- as.integer(factor(multi_site_data$site_label))
S <- length(unique(multi_site_data$site_idx)) # 统计站点总数
N <- nrow(multi_site_data) # 统计总观测数

# 提取每个站点的x_min:这里默认取每个站点x的最小值,可根据需求调整
x_min <- tapply(multi_site_data$x, multi_site_data$site_idx, min)

# 构建Stan所需的输入数据列表
stan_dat <- list(
    S = S,
    N = N,
    x = multi_site_data$x,
    site = multi_site_data$site_idx,
    x_min = x_min
)

关键改动说明

  • 数据结构:新增站点总数S、观测-站点映射索引site、多站点的x_min向量,替代原单站点的单个x_min
  • 参数定义:将单个alpha改为长度为S的向量,每个元素对应一个站点的参数
  • 似然计算:通过循环匹配每个观测所属站点的x_min和alpha,实现多站点独立拟合
  • 灵活性:如果希望站点间参数有部分共享(比如层次先验),可以进一步修改先验部分,比如给alpha添加组水平的超先验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:55:25