我需要用粗尾分布来模拟R中的数据,并且在不确定从何处开始之前从来没有模拟过数据。我已经研究过FatTailsR
软件包,但是文档非常晦涩,我似乎找不到任何明显的教程。
基本上,我想创建一个包含两列(X和Y),包含10,000个观测值的人工数据框,该数据框使用以下逻辑/迭代:
任何指导将不胜感激。包括要检出的软件包和功能的建议(例如类似rlnorm
的东西)
答案 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
根据修改后的几何分布,可能有一种更聪明的设置方法...