2

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

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

  • 对于 X 的每个观测值,Y 为 0 的概率为 75%,Y 为 1 的概率为 25%(为每个观测值分配 0 或 1)。
  • 接下来,仅查看 Y 为 1 的 X 的观测值。在这些观测值(原始数据集的 25%)中,有 25% 的 Y 为 2。
  • 在 Y 为 2 的观测值中,25% 的值上升到 3。
  • 并以此类推直到 Y = 10。

任何指导将不胜感激。包括要检查的软件包和功能的建议(可能类似于rlnorm?)

4

2 回答 2

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)
于 2019-02-25T22:29:25.210 回答
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 

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

于 2019-02-25T22:03:21.863 回答