gpt4 book ai didi

r - 数据框中分组数据中每个观察值的标准误差

转载 作者:行者123 更新时间:2023-12-03 20:19:48 24 4
gpt4 key购买 nike

我有一个数据框,我想在其中计算按三列中的因素分组的观察值的标准误差。组均值的标准差和标准误差是这样计算的,使用 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...

最佳答案

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

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

对于那些对这个解决方案如何演变感兴趣的人,请查看编辑历史。

关于r - 数据框中分组数据中每个观察值的标准误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com