【问题标题】:Standard errors of each observation among grouped data in data frame数据框中分组数据中每个观测值的标准误差
【发布时间】:2012-07-19 16:26:31
【问题描述】:

我有一个数据框,我想在其中计算按三列中的因子分组的观察值的标准误差。组的平均值的标准差和标准误差是这样计算的,使用tapply:

aveResponse <- tapply(df$Response, col1:col2:col3, mean, na.rm=T)

aveSD <- tapply(df$Response, col1:col2:col3, sd, na.rm=T)

stderr <- function(x) sqrt(var(x,na.rm=TRUE)/(length(na.omit(x)))
aveSEM <- tapply(df$Response, col1:col2:col3, stderr, na.rm=T)

我之前已经计算了单个观察值的标准偏差(保存在 colSD 列中),并想计算相应的标准误差。使用下面的函数,我可以得到标准错误:

stderr <- function(x) x/sqrt(length(na.omit(x)))
SEM<- tapply(df$colSD, col1:col2:col3, stderr)

但是,结果以数组的形式给出,每组的 n 个观察值作为每个位置的字符串(我认为)。任何想法如何通过更改函数、使用另一个函数或将数组转换为每个观察值的标准误差都有自己位置的向量来进一步移动?

一个小样本(如果我超过了 dput(df),你会更容易使用吗?):

>df
    col1    col2  col3 Response colSD
1  food1 tissue1 gene1    1.644 0.080
2  food1 tissue1 gene1    1.726 0.093
3  food1 tissue2 gene1    0.088 0.014
4  food1 tissue2 gene1    0.002 0.000
5  food2 tissue1 gene1    0.311 0.012
6  food2 tissue1 gene1    0.657 0.265
7  food2 tissue2 gene1    0.000 0.000
8  food2 tissue2 gene1    0.001 0.000
9  food1 tissue1 gene2    3.223 0.246
10 food1 tissue1 gene2    2.156 0.440
11 food1 tissue2 gene2    0.279 0.200
12 food1 tissue2 gene2    0.033 0.007
13 food2 tissue1 gene2    0.044 0.002
14 food2 tissue1 gene2    0.265 0.117
15 food2 tissue2 gene2    0.000 0.000
16 food2 tissue2 gene2    0.000 0.000

我想计算每个观察值的标准误差,例如0.080/sqrt(2)0.093/sqrt(2) 等,并将结果作为附加列添加到数据框中:

>df
    col1    col2  col3 Response colSD colSEM
1  food1 tissue1 gene1    1.644 0.080  0.057
2  food1 tissue1 gene1    1.726 0.093  0.066 etc...

【问题讨论】:

  • 如果你能给我们一个df 的小样本数据集,那将是非常棒的,并且你解释了你希望数据最终的样子。尝试使用dput(df),以便我们可以轻松剪切和粘贴,或者如果df 太大,则使用dput(head(df))
  • 一旦给出原始问题的答案,请勿将问题更改为后续问题。我回滚了您的编辑以恢复问题的原始含义。否则答案将不适用。请在不删除原始问题的情况下添加小后续问题,或者发布一个完全新问题,也许在此处的评论中提供链接以保持相同的集合感兴趣的人。哪一个合适取决于后续问题的范围,以及相互关联的程度,但在这种情况下可能是后者。

标签: r grouping dataframe tapply


【解决方案1】:

您可以使用ddply 获得一个非常紧凑的解决方案:

library(plyr)
df <- ddply(df, .(col1, col2, col3), transform, colSEM = colSD/sqrt(length(na.omit(colSD))))

如果您对该解决方案的演变过程感兴趣,请查看编辑历史记录。

【讨论】:

  • 谢谢!它完美地工作!不过,我确实有一个后续问题,关于在使用平均值、sd 和 sem 制作数据帧时行的顺序。请看上面。
  • @user1214160,这是一个比我最近编辑之前的版本更短的版本。
  • @user1214160,如果您满意,请记得最终accept回复。
猜你喜欢
  • 2022-07-05
  • 1970-01-01
  • 2022-11-22
  • 2023-03-25
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多