R 中的组合标准误差函数

Combined standard error function in R

基本上,我有几个跨越几年的实验(SITEs),每年都有自己的平均值和标准误差(基于每个重复的几次),我想计算每个 SITE 的总均值和标准误差。总均值似乎相当直截了当(平均数?)但总标准误差对我来说不太直观。如何创建一个函数来计算与 dplyr 一起使用的 grand SE?我的数据的简化版本如下:

> print(tbl_df(df), n=40)
Source: local data frame [76 x 8]

            SITE YEAR Myc  CO2     N      ANPP   ANPP.se nyears
1    Placerville 1991 ECM elev  Nlow    0.8100   0.14000      3
2    Placerville 1991 ECM  amb  Nlow    0.5400   0.07000      3
3    Placerville 1992 ECM elev  Nlow   53.1200  11.83000      3
4    Placerville 1992 ECM  amb  Nlow   26.9000   3.28000      3
5    Placerville 1993 ECM elev  Nlow 1068.3000 183.80000      3
6    Placerville 1993 ECM  amb  Nlow  619.0000 118.90000      3
7    Placerville 1991 ECM elev Nhigh    1.5700   0.26000      3
8    Placerville 1991 ECM  amb Nhigh    1.2800   0.17000      3
9    Placerville 1992 ECM elev Nhigh   75.4300  10.29000      3
10   Placerville 1992 ECM  amb Nhigh   56.2700   7.34000      3
11   Placerville 1993 ECM elev Nhigh 2118.9000 696.10000      3
12   Placerville 1993 ECM  amb Nhigh 1235.8000 260.40000      3
13   Jasper_FACE 1999  AM  amb  Nlow  386.3371  34.92557      5
14   Jasper_FACE 2000  AM  amb  Nlow  551.2848 124.64485      5
15   Jasper_FACE 2001  AM  amb  Nlow  552.1139  56.65156      5
16   Jasper_FACE 2002  AM  amb  Nlow  410.7524  27.64737      5
17   Jasper_FACE 2003  AM  amb  Nlow  503.6037  57.68552      5
18   Jasper_FACE 1999  AM  amb Nhigh  680.8551  67.99471      5
19   Jasper_FACE 2000  AM  amb Nhigh  480.5723  33.52034      5
20   Jasper_FACE 2001  AM  amb Nhigh  744.5131 125.32998      5
21   Jasper_FACE 2002  AM  amb Nhigh  603.6049  62.19760      5
22   Jasper_FACE 2003  AM  amb Nhigh  711.5993 142.04351      5
23   Jasper_FACE 1999  AM elev  Nlow  488.5912  61.47564      5
24   Jasper_FACE 2000  AM elev  Nlow  406.2773  32.90862      5
25   Jasper_FACE 2001  AM elev  Nlow  543.3647  55.28956      5
26   Jasper_FACE 2002  AM elev  Nlow  480.7108  65.24701      5
27   Jasper_FACE 2003  AM elev  Nlow  473.6844  52.01606      5
28   Jasper_FACE 1999  AM elev Nhigh  638.0252  58.34743      5
29   Jasper_FACE 2000  AM elev Nhigh  505.2054 171.62024      5
30   Jasper_FACE 2001  AM elev Nhigh  655.1032 130.01279      5
31   Jasper_FACE 2002  AM elev Nhigh  677.7134  98.84845      5
32   Jasper_FACE 2003  AM elev Nhigh  926.3433 143.26525      5
33 Merrit_Island 1997 ECM  amb  Nlow  137.0940  22.20700      4
34 Merrit_Island 1998 ECM  amb  Nlow  296.4870  53.32100      4
35 Merrit_Island 1999 ECM  amb  Nlow  350.9470  57.85000      4
36 Merrit_Island 2000 ECM  amb  Nlow  494.6030  66.70200      4
37 Merrit_Island 1997 ECM elev  Nlow  203.7970  26.63300      4
38 Merrit_Island 1998 ECM elev  Nlow  467.8080  62.33200      4
39 Merrit_Island 1999 ECM elev  Nlow  586.8180  91.26500      4
40 Merrit_Island 2000 ECM elev  Nlow  866.3460 126.77000      4

我需要在 R 中实现一个函数来在 dplyr 中指定一个函数来计算每个组的总均值和总 se,如下所示:

tempSE <- df %>% group_by(SITE,CO2,N,nyears) %>% 
  summarise(ANPP=mean(ANPP),
  SD=grand.sd(ANPP.se))

编辑:如果您的答案涉及包含样本量的方程式:在数据集上,列 nyears 是年数,即每个 SITECO2治疗我需要平均。另一方面,在每一年内,每个 ANPP 均值和 ANPP.se 均基于多个重复项或地块,这是 SE 中包含的样本量,但未在任何列中指定。我需要这两种样本量中的哪一种?

谢谢

如果我们对样本大小一无所知,就不可能计算出总均值或总标准误差。这是一个小例子:抛硬币,将 "heads" 计为 1,将 "tails" 计为 0。我们第一个样本的均值是 0.45,第二个样本的均值是 0.65。如果两个样本的大小相同,则总平均值为 0.55。但是,如果样本量分别为 900 和 100,则我们有 405+65 "heads",因此总均值为 0.47。 如果样本大小已知,则可以按如下方式计算总均值:

  1. 将每个个体的平均值乘以相应的样本量。
  2. 总结这些数字,
  3. 将该总和除以各个样本大小的总和。

要计算标准误差,请按以下步骤进行:

  1. 将每个标准误差的平方乘以相应的样本量。
  2. 对这些数字中的每一个,加上相应平均值的平方。
  3. 将这些数字中的每一个乘以相应的样本量。 (这些是采样值的平方和。)
  4. 总结这些数字。 (现在我们有了所有平方的总和。)
  5. 将该总和除以各个样本大小的总和。 (这给出了平方的平均值。)
  6. 减去总均值的平方。 (-> 方差)
  7. 取该数字的平方根。 (-> 标准差)
  8. 将该数字除以各个样本大小之和的平方根。

为此编写 R 函数应该很简单。但是我们需要样本量,至少要达到公因数。