【问题标题】:Creating 'structured' missing data in a data table in R在 R 的数据表中创建“结构化”缺失数据
【发布时间】:2017-07-27 07:08:06
【问题描述】:

我正在与一位导师一起在实验室进行研究,他开发了一个使用 ANOVA 分析遗传数据的模型。我已经模拟了一个数据集,我想用它来评估我们的模型处理不同级别缺失数据的能力。

我们的数据集由 15 个物种组成,每个物种有 4 个个体,我们通过将列命名为“A”(x4)“B”(x4)...等来表示。每行代表一个基因。

我正在尝试编写一个随机删除 1% 数据的代码,但这样每个物种至少有 2 个具有有效数据的个体,否则我们的模型将退出(因为它是基于 ANOVA )。

我意识到这会使“随机”缺失的数据变得不那么随机,但我们正在尝试不同的方法。重要的是,丢失的数据是随机的。我希望有人可以帮助我设置这个?

【问题讨论】:

  • 您可以从每组中随机选择 2 个人,并“保护”他们免受 1% 的随机删除。例如,将它们移动到单独的data.frame。在不知道您已经尝试过什么的情况下很难给出编码建议。
  • 你可以编写一个函数(比如is.valid)来检查一个数据集是否有效(即每个物种至少有2个具有有效数据的个体),然后使用xhile循环运行另一个随机删除数据,直到数据集有效(is.valid 返回TRUE)。它被命名为拒绝抽样,并且在is.valid 中指定的有效性是随机的。
  • @AndreyKolyadin 是的,我想过,但每个基因需要随机 2 个人。我希望它尽可能随机化。所以这意味着不是每个基因都必须有缺失数据,不是每个物种都必须在所有基因中一致地缺失数据,并且每个个体在统计上可能至少在一个基因中有一个缺失数据。所以我不能保护两个人,因为那样不会让它变得尽可能随机。
  • @MrSnake 这听起来是个不错的选择。我唯一担心的是,while 循环不能删除一个物种中超过 2 个个体的数据,这会导致函数在达到 1% 的缺失数据之前停止吗?
  • 您可以在删除每个数据后检查(使用另一个检查功能?通过存储物种名称?)但我认为它会更长。

标签: r missing-data genetics


【解决方案1】:

我试着做一个玩具例子,也许能有所帮助

is_valid_df<-function(df,col,val){
  all(table(df[col])>val)
}


filter_function<-function(df,perc,col,val){
  n=dim(df)[1]
  filter<-sample(1:n,n*perc)

  if(is_valid_df(df[-filter,],col,val)){
    return(df[-filter,])
  }else{
    filter_function(df,perc,col,val)
    cat("resampling\n")
  }
}




set.seed(20)
a<-(filter_function(iris,0.1,"Species",44))

【讨论】:

    猜你喜欢
    • 2013-06-14
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2014-04-14
    • 1970-01-01
    相关资源
    最近更新 更多