通过skim输出置信区间

时间:2018-06-15 21:16:06

标签: r dataframe skimr

我正在尝试为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

2 个答案:

答案 0 :(得分:2)

我能想到的只有蛮力,重复CI计算:

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

可能有一些方法可以通过判断等来做到这一点但是我不想冒着让我的大脑在星期五下午思考它而冒险的风险。

答案 1 :(得分:2)

该skim-result中的值实际上比其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 - 类,并使用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')