首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中模拟脂肪尾数据

在R中模拟脂肪尾数据
EN

Stack Overflow用户
提问于 2019-02-25 21:27:08
回答 2查看 873关注 0票数 2

我需要模拟R中的数据,有一个很好的尾部分布,而且在我不确定从哪里开始之前,我从来没有模拟过数据。我已经查看了FatTailsR包,但是文档非常神秘,我似乎找不到任何明显的教程。

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

  • 对于X的每一次观测,Y为0的概率为75%,而25%的概率Y为1(将每个观测设为0或1)。
  • 接下来,只看X的观测值,其中Y是1,在这些观测中(占原始数据集的25% ),Y是2。
  • 在Y为2的观测中,25%的人被撞到了3。
  • 然后迭代,直到Y= 10。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-25 22:03:21

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

首先计算出每个结果的概率(P(1)=0.75,P(2)=0.75*0.25,P(3)=0.75*0.25^2 .)

代码语言:javascript
复制
cc <- cumprod(c(0.75,rep(0.25,9)))

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

代码语言:javascript
复制
rr <- t(rmultinom(1000,size=1,prob=cc))

计算每行中的哪个值等于1:

代码语言:javascript
复制
storage.mode(rr) <- "logical"
out <- apply(rr,1,which)

检查结果:

代码语言:javascript
复制
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 

也许有一种更聪明的方法来根据修改后的几何分布来建立这个模型。

票数 1
EN

Stack Overflow用户

发布于 2019-02-25 22:29:25

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

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54874921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档