2015-04-23 109 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錯我自己的一些數據的插圖。