No.10988 Re: R; 重み付け 【青木繁伸】 2009/10/02(Fri) 21:43
x <- data.frame(データフレーム, データフレームの各行の重み)
のようなデータ構造にして,データフレームの各行の重みに従って,各行を重複展開するというような作業を1度だけ行いその結果として得られるデータフレームを使って分析する。このような例は,重み付けデータの最もシンプルな場合ではあるが(重みは整数値)。> x <- data.frame(age=rep(5:8*5, 2), sex=rep(1:2, each=4), weight=c(5,4,6,7, 4,3,2,6))展開の後は,全ての統計は y を使う
> x
age sex weight
1 25 1 5 # age=25, sex=1 が 25 人(weight) みたいなこと
2 30 1 4
3 35 1 6
4 40 1 7
5 25 2 4
6 30 2 3
7 35 2 2
8 40 2 6
> y <- data.frame(lapply(x, function(i) rep(i, x[, "weight"])))[-3] # これを,展開する
> y
age sex
1 25 1 # age=25, sex=1 が 5 例
2 25 1
3 25 1
4 25 1
5 25 1
6 30 1 # 以下同様
7 30 1
8 30 1
9 30 1
10 35 1
11 35 1
12 35 1
13 35 1
14 35 1
15 35 1
16 40 1
途中省略
31 35 2
32 40 2
33 40 2
34 40 2
35 40 2
36 40 2
37 40 2
し かしまあ,このような重み付けは,「サンプリングの歪みを補正するためのウェイト」というよりは,データ入力の省エネ化に過ぎないような使い方が一般的で はないかな?という気がしますよ。「サンプリングの歪み」って,ゆがみがわかっているような場合は少ないだろうし,その補正の重みの定義というのも客観的 かどうかかなり疑問ではないかなぁ?
No.10995 Re: R; 重み付け 【ST】 2009/10/03(Sat) 17:02
青木先生
お返事ありがとうございます。さっそく試してみると,ウェイトが整数値の場合はうまくい きました。ただ,実際の分析ではウェイトを単純にかけるとケース数(N)が膨らんでしまうので,ウェイトの正規化をおこなうのですが,これにより1.0以 下のウェイトが出来たりすると,各行の重複展開がうまくいかないようでした。
Rではこのような作業はあまりしないほうがよいのでしょうか……? lm内でのウェイトの指定はまったく問題なく可能ですので,Rでもウェイトを使用した分析が可能と思っていたのですが。もし,対処法等ありましたら,アドヴァイスいただければ幸いです。
研 究領域によって異なるのかもしれませんが,私の研究分野では最近データセットにウェイトが含まれることが多くなってきました。対象群をオーバーサンプリン グしたときなどは,ウェイトの使用が推奨されています。ただ,ウェイトは万能ではなく疑問をもつ人も多いので,ウェイトを使うかどうかは分析者の判断にゆ だねられている部分も大きいようです。
No.10997 Re: R; 重み付け 【青木繁伸】 2009/10/03(Sat) 21:12
> 1.0以下のウェイトが出来たりすると,各行の重複展開がうまくいかないようでした。
当たり前です。「(重みは整数値)」と書いてあるでしょう。。。
> Rでもウェイトを使用した分析が可能と思っていたのですが。もし,対処法等ありましたら
万能な処方箋は,「自分で解析プログラムを書きましょう」ということですね。
No.12020 Re: R; 重み付け 【R on Nokia N900】 2010/02/11(Thu) 03:59
library(survey) でいかがでしょう?
http://faculty.washington.edu/tlumley/survey/
● 「統計学関連なんでもあり」の過去ログ--- 043 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る