[解決済み] Rでプールされた標準偏差を計算する方法は?
質問
データフレーム内のすべてのユニークサイトについて、プールされた(実際には加重された)標準偏差を計算したいのですが、どうすればよいですか?
これらのサイトの値は単一種の森林スタンドの値であり、広葉樹スタンドと針葉樹スタンドを比較できるように、平均値と標準偏差をプールしたいのです。
これは、広葉樹林のスタンドの値が入ったデータフレーム(df)である。
keybl n mean sd
Vest02DenmDesp 3 58.16 6.16
Vest02DenmDesp 5 54.45 7.85
Vest02DenmDesp 3 51.34 1.71
Vest02DenmDesp 3 59.57 5.11
Vest02DenmDesp 5 62.89 10.26
Vest02DenmDesp 3 77.33 2.14
Mato10GermDesp 4 41.89 12.6
Mato10GermDesp 4 11.92 1.8
Wawa07ChinDesp 18 0.097 0.004
Chen12ChinDesp 3 41.93 1.12
Hans11SwedDesp 2 1406.2 679.46
Hans11SwedDesp 2 1156.2 464.07
Hans11SwedDesp 2 4945.3 364.58
Keyblはサイトのコードです。プールされたSDの計算式は
s=sqrt((n1-1)*s1^2+(n2-1)*s2^2)/(n1+n2-2))
(写真を貼ることができず、数式に直接アクセスできるリンクも見つからず、申し訳ありません)
ここで、2はグループの数なので、サイトによって変わります。これはt-testや2つのグループを比較したいときに使うものだと思います。この場合、私はこれらのグループを比較することを計画していない。教授が、この式を使って重み付き標準偏差を求めることを勧めてくれました。私はこの数式を私が必要とする方法で組み込んだR関数を見つけられませんでしたので、自分で作ろうとしました。しかし、私はRの初心者で、関数やループを作るのがあまり得意ではありません、したがって、あなたの助けを期待しています。
今のところ、こんな感じです。
sd=function (data) {
nc1=data[z,"nc"]
sc1=data[z, "sc"]
nc2=data[z+1, "nc"]
sc2=data[z+1, "sc"]
sd1=(nc1-1)*sc1^2 + (nc2-1)*sc2^2
sd2=sd1/(nc1+nc2-length(nc1))
sqrt(sd2)
}
splitdf=split(df, with(df, df$keybl), drop = TRUE)
for (c in 1:length(splitdf)) {
for (i in 1:length(splitdf[[i]])) {
a = (splitdf[[i]])
b =sd(a)
}
}
1) 関数自体が正しくなく、本来の値より少し低い値を出してしまい、その理由がわかりません。z+1 が最後の行に到達したときに停止しないことが原因でしょうか?もしそうなら、どのように修正すればいいのでしょうか?
2) ループは全く間違っていますが、数時間経ってもうまくいかなかったので、思いついたものです。
誰か助けてください。
ありがとうございます。
アントラ
解決方法は?
独立性の仮定(共分散項はゼロと仮定できる)の下でのプールされたSDは次のようになります: sqrt( sum_over_groups[ (var)/sum(n)-N_groups)] )
lapply( split(dat, dat$keybl),
function(dd) sqrt( sum( dd$sd^2 * (dd$n-1) )/(sum(dd$n-1)-nrow(dd)) ) )
#-------------------------
$Chen12ChinDesp
[1] 1.583919
$Hans11SwedDesp
[1] Inf
$Mato10GermDesp
[1] 11.0227
$Vest02DenmDesp
[1] 9.003795
$Wawa07ChinDesp
[1] 0.004123106
関連
-
[解決済み] write.tableしようとすると、未実装の型リストが表示される。
-
[解決済み】R Markdown - html出力でフォントサイズとフォントタイプを変更する
-
[解決済み】各グループの上位3要素を計算する際に「数値型、論理型、複合型でのみ可能な演算」を回避する方法
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] Bashで変数で定義された数値の範囲を反復処理するにはどうすればよいですか?
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み】2つのリストを並列に反復処理する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】'builtin'型のオブジェクトはsubsetableではない【重複
-
[解決済み】apply()とadply()の出力が異なる件)
-
[解決済み】Rで立方根と対数変換をする
-
[解決済み】ggplotのエラー。関数型オブジェクトのスケールを自動的に選択する方法がわかりません。
-
[解決済み】「'dimnames' [1]の長さが配列の範囲と等しくない」とはどういう意味ですか?
-
[解決済み】r Error dim(X) must have a positive length?
-
[解決済み] [Solved] read.csv warning 'EOF within quoted string' prevents complete reading of file.
-
[解決済み】Rでmax.printの制限値を増やす方法
-
[解決済み】Rで相対的な頻度をプロットするためにhistをどのように使用しますか?
-
[解決済み】起動時にパーをデフォルト値にリセットする方法