6

階層/マルチレベル/パネル データセットで作業する場合、使用可能な変数のグループ内およびグループ間の標準偏差を返すパッケージを採用すると非常に役立つ場合があります。

これは、次のデータを使用しStataて、コマンドを使用して簡単に実行できるものです

xtsum, i(momid)

私は調査を行いましたが、それRを行うことができるパッケージが見つかりません..

編集:

アイデアを修正するために、階層的なデータセットの例を次に示します。

son_id       mom_id      hispanic     mom_smoke     son_birthweigth

  1            1            1            1              3950
  2            1            1            0              3890
  3            1            1            0              3990
  1            2            0            1              4200
  2            2            0            1              4120
  1            3            0            0              2975
  2            3            0            1              2980

「マルチレベル」構造は、各母親 (上位レベル) に 2 人以上の息子 (下位レベル) がいるという事実によって与えられます。したがって、各母親は観察のグループを定義します。

したがって、各データセット変数は、母親間および母親内で、または母親間でのみ変化する可能性があります。birtweigth母親によって異なりますが、同じ母親の中でも異なります。代わりにhispanic、同じ母親に固定されています。

たとえば、 の母親内分散son_birthweigthは次のとおりです。

# mom1 means
    bwt_mean1 <- (3950+3890+3990)/3
    bwt_mean2 <- (4200+4120)/2
    bwt_mean3 <- (2975+2980)/2

# Within-mother variance for birthweigth
    ((3950-bwt_mean1)^2 + (3890-bwt_mean1)^2 + (3990-bwt_mean1)^2 + 
    (4200-bwt_mean2)^2 + (4120-bwt_mean2)^2 + 
    (2975-bwt_mean3)^2 + (2980-bwt_mean3)^2)/(7-1)

母親間の分散は次のとおりです。

# overall mean of birthweigth:
# mean <- sum(data$son_birthweigth)/length(data$son_birthweigth)
    mean <- (3950+3890+3990+4200+4120+2975+2980)/7

# within variance:
    ((bwt_mean1-mean)^2 + (bwt_mean2-mean)^2 + (bwt_mean3-mean)^2)/(3-1)
4

2 に答える 2

1

あなたの stata コマンドが何を再現すべきかわかりませんが、階層構造に関する質問の 2 番目の部分に答えるには、 を使用して簡単に行うことができますlist。たとえば、次のような構造を定義します。

tree = list(
      "var1" = list(
         "panel" = list(type ='p',mean = 1,sd=0)
         ,"cluster" = list(type = 'c',value = c(5,8,10)))
      ,"var2" = list(
          "panel" = list(type ='p',mean = 2,sd=0.5)
         ,"cluster" = list(type="c",value =c(1,2)))
)

これを作成するlapplyには、リストを操作するのが便利です

tree <- lapply(list('var1','var2'),function(x){ 
  ll <- list(panel= list(type ='p',mean = rnorm(1),sd=0), ## I use symbol here not name
             cluster= list(type = 'c',value = rnorm(3)))  ## R prefer symbols
})
names(tree) <-c('var1','var2')

あなたは彼の構造を見ることができますstr

str(tree)
List of 2
 $ var1:List of 2
  ..$ panel  :List of 3
  .. ..$ type: chr "p"
  .. ..$ mean: num 0.284
  .. ..$ sd  : num 0
  ..$ cluster:List of 2
  .. ..$ type : chr "c"
  .. ..$ value: num [1:3] 0.0722 -0.9413 0.6649
 $ var2:List of 2
  ..$ panel  :List of 3
  .. ..$ type: chr "p"
  .. ..$ mean: num -0.144
  .. ..$ sd  : num 0
  ..$ cluster:List of 2
  .. ..$ type : chr "c"
  .. ..$ value: num [1:3] -0.595 -1.795 -0.439

OPの明確化後に編集

そのパッケージreshape2はあなたが望むものだと思います。ここでこれを示します。

ここでの考え方は、データを再形成する必要があるマルチレベル分析を行うことです。

最初に、変数を識別子と測定変数の 2 つのグループに分けます。library(reshape2) dat.m <- Melt(dat,id.vars=c('son_id','mom_id')) ## 他の列が測定されます

str(dat.m)
'data.frame':   21 obs. of  4 variables:
 $ son_id  : Factor w/ 3 levels "1","2","3": 1 2 3 1 2 1 2 1 2 3 ...
 $ mom_id  : Factor w/ 3 levels "1","2","3": 1 1 1 2 2 3 3 1 1 1 ...
 $ variable: Factor w/ 3 levels "hispanic","mom_smoke",..: 1 1 1 1 1 1 1 2 2 2 ...
 $ value   : num  1 1 1 0 0 0 0 1 0 0 ..

「モーテン」形式のデータを取得したら、「キャスト」して、必要な形状に再配置できます。

# mom1 means for all variable
 acast(dat.m,variable~mom_id,mean)
                           1    2      3
hispanic           1.0000000    0    0.0
mom_smoke          0.3333333    1    0.5
son_birthweigth 3943.3333333 4160 2977.5
# Within-mother variance for birthweigth

acast(dat.m,variable~mom_id,function(x) sum((x-mean(x))^2))
                           1    2    3
hispanic           0.0000000    0  0.0
mom_smoke          0.6666667    0  0.5
son_birthweigth 5066.6666667 3200 12.5

## overall mean of each variable
acast(dat.m,variable~.,mean)
[,1]
hispanic           0.4285714
mom_smoke          0.5714286
son_birthweigth 3729.2857143
于 2013-01-05T07:46:23.177 に答える