2015-04-23 107 views
3

我可以总结我的数据,并使用计算平均值和SD值:dplyr summarise_each标准误差函数

summary <- aspen %>% group_by(year,Spp,CO2) %>% summarise_each(funs(mean,sd)) 

但是,我不能设法计算标准误差为好。我想这没有成功:

summary <- aspen %>% group_by(year,Spp,CO2) %>% summarise_each(funs(mean,sd,se=sd/sqrt(n()))) 
+0

您需要定义一个函数来计算标准错误,然后在'funs'中调用它。 – 2015-04-23 11:19:10

回答

2

可以使用std.error功能从plotrix包或先定义你自己的功能和传递函数名作为参数。

library(plotrix) 
    summary <- aspen %>% group_by(year,Spp,CO2) %>% 
summarise_each(funs(mean,sd,std.error))) 
10

你可以做

library(dplyr) 
aspen %>% 
    group_by(year,Spp,CO2) %>% 
    summarise_each(funs(mean,sd,se=sd(.)/sqrt(n()))) 

对于重复性,

data(mtcars) 
grpMt <- mtcars %>% 
      group_by(gear, carb) 

grpMt %>% 
    summarise_each(funs(mean, sd, se=sd(.)/sqrt(n())), hp:drat) %>% 
    slice(1:2) 
# gear carb hp_mean drat_mean  hp_sd drat_sd  hp_se drat_se 
#1 3 1 104.0 3.1800 6.557439 0.4779121 3.785939 0.27592269 
#2 3 2 162.5 3.0350 14.433757 0.1862794 7.216878 0.09313968 
#3 4 1 72.5 4.0575 13.674794 0.1532699 6.837397 0.07663496 
#4 4 2 79.5 4.1625 26.913441 0.5397144 13.456721 0.26985722 
#5 5 2 102.0 4.1000 15.556349 0.4666905 11.000000 0.33000000 
#6 5 4 264.0 4.2200  NA  NA  NA   NA 

这是你从plotrix

library(plotrix) 
grpMt %>% 
    summarise_each(funs(mean, sd, se=std.error), hp:drat) %>% 
    slice(1:2) 
# gear carb hp_mean drat_mean  hp_sd drat_sd  hp_se drat_se 
#1 3 1 104.0 3.1800 6.557439 0.4779121 3.785939 0.27592269 
#2 3 2 162.5 3.0350 14.433757 0.1862794 7.216878 0.09313968 
#3 4 1 72.5 4.0575 13.674794 0.1532699 6.837397 0.07663496 
#4 4 2 79.5 4.1625 26.913441 0.5397144 13.456721 0.26985722 
#5 5 2 102.0 4.1000 15.556349 0.4666905 11.000000 0.33000000 
#6 5 4 264.0 4.2200  NA  NA  NA   NA 
+0

非常好!但是,如果缺少值,则会出现问题。因此我推荐使用'summarise_each(funs(mean(。,na.rm = T),n = sum(!is.na(。)),se = sd(。,na.rm = T)/ sqrt(sum (!is.na(。)))),hp:drat)'。 请注意函数'n()'在计算正确的标准错误时会出错(并且会导致alpha错误膨胀),所以应该使用'sum(!is.na(。))'。 如果你想检查自己的数据,只需包括条款 'n1 = n(),n2 = sum(!is.na(。))'。 –

+0

@MarioReutter是的,这是真的,使用'NA'值你需要使用'na.rm = TRUE'。我认为OP没有指定任何NA元素,所以我没有做出任何更正。另外,我修改了OP的代码 – akrun

+0

当然。这不是意味着批评,而是要补充你的文章。但请注意,'na.rm = TRUE'是不够的,因为'n()'函数包含缺少的值,导致标准错误太低。我将添加一个小帖子来说明这一点。 –

0

重要的广告与std.error得到相同d-上@akrun:

如果缺失值(NA)发生时,您应该使用:

summarise_each(funs(mean(., na.rm=T), n = sum(!is.na(.)), se = sd(., na.rm=T)/sqrt(sum(!is.na(.)))), hp:drat)

不幸的是,n()功能不除删除缺失值,以便使用na.rm=T ,我们需要用sum(!is.na(.))替换n()

summarise_each(funs( mean(., na.rm=T), n1=n(), n2=sum(!is.na(.)), se1=sd(., na.rm=T)/sqrt(n()), se2=sd(., na.rm=T)/sqrt(sum(!is.na(.)))), rating)

dplyr n() includes NAs

n2se2是正确的值:

它如何能GE错我自己的一些数据的插图。