【问题标题】:Making BestNormalize to recognize different factor levels for better data transformation使 BestNormalize 识别不同的因子水平以更好地进行数据转换
【发布时间】:2020-07-21 09:03:01
【问题描述】:

我正在使用 bestNormalize 包来转换具有 5 个因子水平(组)的变量。我使用以下代码转换我的数据并查看转换后数据的直方图和正态性检验结果(nooutliers 是我的数据集,totalscore 是我的因变量,Grade 是具有 5 个因子水平的因子):

(BNobjectall <- bestNormalize(nooutliers$totalscore))
nooutliers$transformed <- predict(BNobjectall)
ggplot(nooutliers,aes(x=transformed, fill= Grade))+geom_histogram(binwidth=3)+facet_grid(~Grade)+theme_bw()


nooutliers %>%
  summarise(statistic = shapiro.test(transformed)$statistic,
           p.value = shapiro.test(transformed)$p.value) 

我的问题是 bestNormalize 不考虑因子水平并找到最佳转换方法,因为该变量是单个组。结果,我的一个因子水平的转换因变量值不会变得正常。当我为这个因子水平创建一个子集并应用相同的代码时,我得到了想要的结果。但是,我不知道如何将这种相同的转换(具有相同的值)应用到其他因子水平。

有没有办法让 bestNormalize 考虑因子水平或将具有相同值的相同转换应用于不同的子集?

【问题讨论】:

    标签: r r-markdown normalization data-transform


    【解决方案1】:

    我不确定我是否完全理解您的目标,但我可以提供一个想法。

    bestNormalize 需要“训练”数据,因此您可以考虑在单个组上对其进行训练,然后使用 predict 将其应用于其他组:

    
    # Trains data on Grade 1
    (BNobjectall <- bestNormalize(nooutliers$totalscore[nooutliers$Grade == 1]))
    
    # Applies Grade 1 transform to all data points
    nooutliers$transformed <- predict(BNobjectall)
    

    如果您试图确保每个因子水平内的正态性,则需要像已经完成的那样进行子集化,并注意归一化转换可能会有所不同,因为最佳归一化转换因组而异。如果您试图在因子级别上保持一致的变换,那么我的建议是使用数据不变变换,例如对数或平方根变换,或使用上述方法。

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 2017-07-18
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      相关资源
      最近更新 更多