在 R 中模拟肥尾数据

Simulate fat tail data in R

我需要在 R 中模拟具有肥尾分布的数据,并且在我不确定从哪里开始之前从未模拟过数据。我查看了 FatTailsR 包,但文档非常神秘,我似乎找不到任何明显的教程。

基本上,我想创建一个人工数据框,其中包含两列(X 和 Y),包含 10,000 个观察值,使用以下 logic/iterations:

如有任何指导,我们将不胜感激。包括要签出的包和函数的建议(可能类似于 rlnorm?)

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

先算出每个结果的概率(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 

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

这是我从你的问题中了解到的:

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)