-1

基本上,我有几个SITE跨越几年的实验,每年都有自己的平均值和标准误差(基于每个重复的几个),我想计算每个的总平均值和标准误差SITE。大均值似乎相当简单(平均均值?),但大标准误差对我来说不太直观。如何创建一个函数来计算与 dplyr 一起使用的大 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是年数,这是我需要平均的每次测量SITE和治疗的次数。CO2另一方面,在每一年中,每个ANPP平均值ANPP.se都基于多个重复或图,这是 SE 中包含的样本量,但未在任何列中指定。这两种样本量中的哪一种是我需要的?

谢谢

4

1 回答 1

0

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

  1. 将每个单独的平均值乘以相应的样本量。
  2. 把这些数字加起来,
  3. 将该总和除以各个样本大小的总和。

要计算标准误差,请执行以下操作:

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

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

于 2015-07-06T00:16:04.517 回答