在R语言和Stan中估计截断泊松分布

简介: 在R语言和Stan中估计截断泊松分布

数据

 

这是一个非常简化的例子。我产生了1,000个计数观察值,平均值为1.3。然后,如果只观察到两个或更高的那个,我将原始分布与我得到的分布进行比较。


由此代码生成:


# original data:
set.seed(321)
a <- rpois(1000, 1.3)

# truncated version of data:
b <- a[ a > 1]

# graphic:
data_frame(value = c(a, b),
           variable =  (c("Original data", "Truncated so only observations of 2 or more show up"), c(length(a), length(b)))) %>%
  ggplot(aes(x = value)) +
   (binwidth = 1, colour = "white") +
  facet_wrap(~variable, ncol = 1) +
  ggtitle("Comparing full and truncated datasets from a Poisson distribution") +
  labs(y = "Number of observations")

# fitting a model to original works well:
mean(a)
 (a, "Poisson")

# but obviously not if naively done to the truncated version:
mean(b)
fitdistr(b, "Poisson")

估计lambda完整数据(a)的关键参数效果很好,估计值为1.347,刚好超过1.3的真实值的一个标准误差。


最大似然


需要dpoisppois函数的截断版本并在fitdist其中使用这些版本。


#-------------MLE fitting in R-------------------
dtruncated_poisson <- function(x, lambda) {
}
ptruncated_poisson <- function(x, lambda) {
}

fitdist(b, "truncated_poisson", start = c(lambda = 0.5)) 

请注意,要执行此操作,我将下限阈值指定为1.5; 因为所有数据都是整数,这实际上意味着我们只观察2或更多的观察结果。我们还需要为估计值指定一个合理的起始值lambda- 这样做太远会导致错误。


贝叶斯

对于替代贝叶斯方法,Stan可以很容易地将数据和概率分布描述为截断的。除了我x在这个程序中调用的原始数据之外,我们需要告诉它有多少观察(n),lower_limit它被截断了,以及表征我们估计的参数的先验分布所需的任何东西。

以下程序的关键部分是:

  • data块中,指定数据的x下限为lower_limit
  • model块中,指定x通过截断的分布T[lower_limit, ]

data {
  int n;
  int lower_limit;
  int  x[n];
  real lambda_start_mu;
  real lambda_start_sigma;
}

parameters {
  reallambda;
}

model {
  lambda ~ normal(lambda_start_mu, lambda_start_sigma);
  
  for(i in 1:n){
    x[i] ~ poisson(lambda) T[lower_limit, ];
  }
}

以下是从R向Stan提供数据的方式:



#-------------Calling Stan from R--------------
data <- list(
  x = b,
  lower_limit = 2,
  n = length(),
  lambda_start_sigma = 1
)

fit <- stan("0120-trunc.stan", data = data, cores = 4)


plot(fit) + 
  labs(y = "Estimated parameters") +
  theme_minimal(base_family = "myfont")

这为我们提供lambda了与该fitdistrplus方法匹配的后验分布:1.35,标准偏差为0.08。可信区间的图像:

相关文章
|
4月前
【R语言实战】——带有新息为标准学生t分布的金融时序的GARCH模型拟合预测
【R语言实战】——带有新息为标准学生t分布的金融时序的GARCH模型拟合预测
|
4月前
|
数据可视化
【R语言实战】——金融时序分布拟合
【R语言实战】——金融时序分布拟合
|
4月前
|
数据处理
R语言GARCH族模型:正态分布、t、GED分布EGARCH、TGARCH的VaR分析股票指数
R语言GARCH族模型:正态分布、t、GED分布EGARCH、TGARCH的VaR分析股票指数
|
4月前
|
机器学习/深度学习 数据可视化
R语言Stan贝叶斯回归置信区间后验分布可视化模型检验|附数据代码
R语言Stan贝叶斯回归置信区间后验分布可视化模型检验|附数据代码
|
4月前
|
算法 Python
R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列
R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证指数收益时间序列
|
4月前
|
前端开发 数据可视化 算法
r语言Bootstrap自助法重采样构建统计量T抽样分布近似值可视化|代码分享
r语言Bootstrap自助法重采样构建统计量T抽样分布近似值可视化|代码分享
|
4月前
|
数据可视化 算法 区块链
R语言泊松过程及在随机模拟应用可视化
R语言泊松过程及在随机模拟应用可视化
|
4月前
|
机器学习/深度学习 数据可视化
R语言非线性回归和广义线性模型:泊松、伽马、逻辑回归、Beta回归分析机动车事故、小鼠感染、蛤蜊数据、补剂钠摄入数据|数据分享(下)
R语言非线性回归和广义线性模型:泊松、伽马、逻辑回归、Beta回归分析机动车事故、小鼠感染、蛤蜊数据、补剂钠摄入数据|数据分享
|
4月前
|
机器学习/深度学习
R语言非线性回归和广义线性模型:泊松、伽马、逻辑回归、Beta回归分析机动车事故、小鼠感染、蛤蜊数据、补剂钠摄入数据|数据分享(上)
R语言非线性回归和广义线性模型:泊松、伽马、逻辑回归、Beta回归分析机动车事故、小鼠感染、蛤蜊数据、补剂钠摄入数据|数据分享
|
4月前
|
数据可视化 数据挖掘 定位技术
数据分享|R语言生态学种群空间点格局分析:聚类泊松点过程对植物、蚂蚁巢穴分布数据可视化
数据分享|R语言生态学种群空间点格局分析:聚类泊松点过程对植物、蚂蚁巢穴分布数据可视化

热门文章

最新文章