【问题标题】:Output confidence interval with skim带有脱脂的输出置信区间
【发布时间】:2018-06-15 21:16:05
【问题描述】:

我正在尝试为skimr 生成的输出添加置信区间

library(skimr); library(Rmisc)

skim_with(numeric = list(CI = Rmisc::CI), append = FALSE)

skim(mtcars)

Skim summary statistics
 n obs: 32 
 n variables: 11 

── Variable type:numeric ──────────────────────────────────────────────────────────────────────────────────────────────────────────
 variable                    CI
       am   upp: 0.59, mea: 0  
     carb   upp: 3.39, mea: 2  
      cyl   upp: 6.83, mea: 6  
     disp upp: 275.41, mea: 230
     drat   upp: 3.79, mea: 3  
     gear   upp: 3.95, mea: 3  
       hp upp: 171.41, mea: 146
      mpg  upp: 22.26, mea: 20 
     qsec  upp: 18.49, mea: 17 
       vs   upp: 0.62, mea: 0  
       wt   upp: 3.57, mea: 3  

这并没有完全奏效,因为缺少置信区间的下限。如何获得置信区间的下限和上限以使用skimr

【问题讨论】:

  • 我不确定 [statistics] 标签是否合适...
  • 我想知道问题是否出在列宽上,使用自定义格式化程序是否会有所帮助。

标签: r dataframe skimr


【解决方案1】:

我能想到的唯一方法是蛮力,重复CI计算:

skim_with(numeric = list(mean = mean,
                         lwr=~Rmisc::CI(.)["lower"],
                         upr=~Rmisc::CI(.)["upper"]),
         append=FALSE)

可能有一些方法可以用 quosures 等来做到这一点,但我不想冒着在周五下午考虑它而让我的大脑爆炸的风险。

【讨论】:

  • 来杯啤酒吧,本?
  • 是的,这也可以,当我在处理分位数时,我发现单独处理它们比获取向量然后让skimr弄清楚如何渲染它更快。跨度>
【解决方案2】:

该略读结果中的值实际上比其print.skim_df 输出显示的值多得多。看dput(skim(mtcars))

class(skim(mtcars))
[1] "skim_df"    "tbl_df"     "tbl"        "data.frame"
print.data.frame(skim(mtcars))
# gives a long result

   variable    type stat level       value   formatted
1       mpg numeric   CI upper  22.2635715  upp: 22.26
2       mpg numeric   CI  mean  20.0906250  mea: 20.09
3       mpg numeric   CI lower  17.9176785  low: 17.92
4       cyl numeric   CI upper   6.8313934   upp: 6.83
5       cyl numeric   CI  mean   6.1875000   mea: 6.19
6       cyl numeric   CI lower   5.5436066   low: 5.54
7      disp numeric   CI upper 275.4065392 upp: 275.41
#   snipped the rest.....

我基本上删除了skim_df-classes 并使用reshape2::dcast 处理data.frame 版本。

reshape2::dcast( as.data.frame(skim(mtcars))[c('variable','level','value')],
                 variable~level ,value.var='value')
   variable       lower       mean       upper
1        am   0.2263446   0.406250   0.5861554
2      carb   2.2301583   2.812500   3.3948417
3       cyl   5.5436066   6.187500   6.8313934
4      disp 186.0372108 230.721875 275.4065392
5      drat   3.4037903   3.596563   3.7893347
6      gear   3.4214933   3.687500   3.9535067
7        hp 121.9679499 146.687500 171.4070501
8       mpg  17.9176785  20.090625  22.2635715
9      qsec  17.2044883  17.848750  18.4930117
10       vs   0.2557828   0.437500   0.6192172
11       wt   2.8644785   3.217250   3.5700215

然后我测试了as.data.frame是否真的需要而它不是,所以这更紧凑:

reshape2::dcast( skim(mtcars),
                 variable~level , value.var='value')

【讨论】:

  • 不知何故“级别”对我不起作用。相反,我使用了“stat”,效果很好。比如,reshape2::dcast(as.data.frame(skim(mtcars))[c('variable','stat','value')], variable~stat ,value.var='value')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2020-02-27
  • 2011-09-18
  • 2014-01-24
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多