模拟R中的胖尾数据

时间:2019-02-25 21:27:09

标签: r distribution simulate probabilistic-programming

我需要用粗尾分布来模拟R中的数据,并且在不确定从何处开始之前从来没有模拟过数据。我已经研究过FatTailsR软件包,但是文档非常晦涩,我似乎找不到任何明显的教程。

基本上,我想创建一个包含两列(X和Y),包含10,000个观测值的人工数据框,该数据框使用以下逻辑/迭代:

  • 对于X的每个观察,都有75%的概率将Y设为0,将25%的概率Y设为1(为每个观察值分配0或1)。
  • 接下来,仅查看X的观测值,其中Y为1。在这些观测值(原始数据集的25%)中,有25%的Y为2。
  • 在Y为2的观测值中,有25%上升到3。
  • 然后迭代直到Y = 10。

任何指导将不胜感激。包括要检出的软件包和功能的建议(例如类似rlnorm的东西)

2 个答案:

答案 0 :(得分:2)

这是我从您的问题中了解的信息:

data <- data.frame(X=1:10000, Y=sample(c(0,1), 10000, TRUE, prob=c(0.75, 0.25)))
head(data)

pos <- which(data$Y == 1)
pos <- sample(pos, floor(0.25*length(pos)), FALSE)  # 25% of Y == 1

data[pos, "Y"] <- data[pos, "Y"] + 1

## Iterate using a while loop :

data <- data.frame(X=1:10000, Y=sample(c(0,1), 10000, TRUE, prob=c(0.75, 0.25)))
head(data)

i <- 0

while(i < 10) {
  pos <- which(data$Y == (i + 1))
  pos <- sample(pos, floor(0.25*length(pos)), FALSE)  # 25% of Y == 1

  data[pos, "Y"] <- data[pos, "Y"] + 1

  i <- i + 1
}

hist(data$Y)

答案 1 :(得分:1)

这可能有效(不是超级高效,但是...)

首先弄清楚每个结果的概率(P(1)= 0.75,P(2)= 0.75 * 0.25,P(3)= 0.75 * 0.25 ^ 2 ...)

cc <- cumprod(c(0.75,rep(0.25,9)))

选择具有这些概率的多项式偏差(每个样本N = 1)

rr <- t(rmultinom(1000,size=1,prob=cc))

找出每一行中的哪个值等于1:

storage.mode(rr) <- "logical"
out <- apply(rr,1,which)

检查结果:

tt <- table(factor(out,levels=1:10))
  1   2   3   4   5   6   7   8   9  10 
756 183  43  14   3   1   0   0   0   0 

根据修改后的几何分布,可能有一种更聪明的设置方法...

相关问题