3 つの列の要因によってグループ化された観測値の標準誤差を計算したいデータ フレームがあります。グループの平均の標準偏差と標準誤差は、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...