2

値が欠落しているデータセット「base_data」があります。したがって、パッケージ「Amelia」を使用して、欠損値をオブジェクト「a.output」に代入しました。

次のコードを使用して、帰属結果内のいくつかの変数の平均を見つけることができました。

q.out<-NULL
se.out<-NULL
for(i in 1:m) {   
dclus <- svydesign(id=~site, data=a.output$base_data[[i]]) 

q.out <- rbind(q.out, coef(svymean(~hh_expenditure, dclus)))
se.out <- rbind(se.out, SE(svymean(~hh_expenditure, dclus)))}

以下を使用して結果を組み合わせました。

svymean.combine <- mi.meld(q = q.out, se = se.out)

これにより、母集団全体の家計支出 (hh_expenditure) の平均と標準誤差が得られます。

ただし、人口を富の五分位 (wealth_quin) に分割する変数があります。

そのため、現在、wealth_quin (変数は 1、2、3、4、または 5 のいずれか) あたりの家計支出の平均と標準誤差を求めたいと考えています。

最初に帰属データのサブセット化を試みましたが、多くのエラーが発生しました。

データを代入する前に、データを 5 つの富の五分位に分割する必要なく、これを行う方法はありますか?

乾杯、

ティモシー

編集:これは実用的な例です

require(Amelia)
require(survey)
a<-as.data.frame(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16))
b<-as.data.frame(c(1,2,2,1,2,1,1,2,1,2,2,1,1,2,1,2))
c<-as.data.frame(c(2,7,8,5,4,4,3,8,7,9,10,1,3,3,2,8))
d<-as.data.frame(c(3,9,7,4,5,5,2,10,8,10,12,2,4,4,3,7))
e<-as.data.frame(c(2500,8000,NA,4500,4500,NA,2500,NA,7400,9648,1112,1532,3487,3544,NA,7000)

impute<-cbind(a,b,c,d,e)
names(impute) <- c("X","site","var2","var3", "hh_inc") 

いいえ、使用するデータ フレームがありません。hh_inc の値が欠落しており、これを代入したいと考えています。最初のステップ、代入の数を設定する

m<-5

代入を実行します。

a.output <- amelia(x = impute, m=m, autopri=0.5,cs="X",
               idvars=c("site","var2"),
               logs=c("hh_inc","var3"))

a.output は、5 つの代入からのデータを保持するようになりました。

私が今やりたいことは、アメリアからの帰属値を使用して、サイト 1 とサイト 2 の平均 (および標準誤差) hh_inc を個別に見つけることです。

それはどのように行うことができますか?NAを無視すればできることはわかっています。しかし、これはバイアスを導入する可能性があるため、最初に値を帰属させた理由です。

乾杯、

ティモシー

編集:私はこれに賞金をかけました。正確な方法がわからない場合は、個々の帰属データセットからの結果を、ルービンの式 (http://sites.stat.psu.edu/~jls/mifaq.html#minf) を使用して組み合わせることができます。 、アメリア オブジェクトからの 5 つの別個の帰属データセットを 5 つの別個の完全なデータ フレームに変換できる人に報奨金を授与します。

4

2 に答える 2

4
require(Amelia)
require(survey)
require(data.table)
require(plotrix)

a<-as.data.frame(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16))
b<-as.data.frame(c(1,2,2,1,2,1,1,2,1,2,2,1,1,2,1,2))
c<-as.data.frame(c(2,7,8,5,4,4,3,8,7,9,10,1,3,3,2,8))
d<-as.data.frame(c(3,9,7,4,5,5,2,10,8,10,12,2,4,4,3,7))
e<-as.data.frame(c(2500,8000,NA,4500,4500,NA,2500,NA,7400,9648,1112,1532,3487,3544,NA,7000))

impute<-cbind(a,b,c,d,e)
names(impute) <- c("X","site","var2","var3", "hh_inc") 

summary(impute)


m <- 5
a.output <- amelia(x = impute, m=m, autopri=0.5,cs="X",
               idvars=c("site","var2"),
               logs=c("hh_inc","var3"))

stats.out <- NULL
for(i in 1:m){
df2 <- data.table(a.output$imputations[[i]])
df3 <-  data.frame(dataset=i,df2[,list(std.error(hh_inc),mean(hh_inc)), by="site"])
stats.out <- rbind(stats.out, df3)
}
colnames(stats.out) <- c("dataset","site","stdError","mean")
stats.out
于 2012-09-23T13:45:09.203 に答える
1

あなたの質問やデータの構造 (特に、データが帰属されているかどうかの重要性) を理解しているかどうかはわかりませんが、グループごとの要約統計を行った方法を次に示します。

require(data.table)
require(plotrix)

# create some data
df1 <- data.frame(id=seq(1,50,1), wealth = runif(50)*1000)
df1$cutter <- cut(df1$wealth, 5, labels=FALSE)
head(df1)
# put the data into a data.table to speed things up  
df2 <- as.data.table(df1)
head(df2)

grp1StdErr <- df2[,std.error(wealth), by="cutter"]
grp1Mean <- df2[,mean(wealth), by="cutter"]

お役に立てれば。

または、1 つのグループ化ステップで:

df2[,list(std.error(wealth),mean(wealth)), by=cut(wealth,5,labels=FALSE)]
于 2012-09-21T17:04:08.727 に答える