1

私の問題で私を助けてくれてありがとう。

いくつかの異なるグループの標準差を計算するプログラムを作成しようとしていますが、最後のステップで少し困惑しています。

data<- read.dta("FinalRfile.dta")
Data<-data
grouplist<-16
grange<-range(Data[grouplist])
groupnum<-grange[2]-grange[1]+1
groupnums<-(1:groupnum)

groupmean<-list()
for (i in groupnums) groupmean[[i]]<-sapply(subset(Data, Data[grouplist] == i),mean)

groupvar<-list()
for (i in groupnums) groupvar[[i]]<-sapply(subset(Data, Data[grouplist] == i),var)
#creating a matrix of the all possible combinations that do not repeat
totcombs<-combn(groupnum,2)
# creating variable for total number of columns, which are total number of combinations
ncombs<-ncol(totcombs)
ncols<-(1:ncombs)


gbias<-list()
# The code below is the section causing the problem
for (i in ncombs) gbias[[i]]<-(groupmean[totcombs[1,i]]-groupmean[totcombs[2,i]])/((groupvar[totcombs[1,i]]-groupvar[totcombs[2,i]])^(.5))

Error in groupmean[totcombs[1, i]] - groupmean[totcombs[2, i]] : 
non-numeric argument to binary operator

基本的に私は式 "(mean_1-mean_2/sqrt(variance_1-variance_2)) をリスト groupmean および groupvar の変数とすべての可能な組み合わせで使用しようとしています。たとえば、グループ 1&2,1&3,1&4,1&5,2&4 など.以下は、役立つリストのセットアップの例です。

>groupmean[1]
[[1]]
         zid     tookphys        black       income          age       female 
3.729809e+05 6.303419e-01 1.783806e-01 8.128384e+03 2.498148e+01 5.080128e-01 
     educdec          num          mhi        disea        child      xghindx 
1.177905e+01 4.027778e+00 7.684203e+01 1.109670e+01 4.209402e-01 7.283730e+01 
     afairnm       ghinnm     xghindx2     planlist 
9.396368e-01 8.173077e-01 5.531082e+03 1.000000e+00    

> totcombs
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    1    1    1    2    2    2    3    3     4
[2,]    2    3    4    5    3    4    5    4    5     5

後でメモ: 人々の助けを借りてOK. 値を返すところまで来ました。一部の値は、任意のアイデアに対して NaN です。再度、感謝します。

group1<-totcombs[1,]
group2<-totcombs[2,]


gbias<-list()
    > for (i in ncols) gbias[[i]]<-abs(groupmean[[group1[i]]]-groupmean[[group2[i]]])/(sqrt((groupvar[[group1[i]]]+groupvar[[group2[i]]])/2))
> 
> gbias
[[1]]
        zid    tookphys       black      income         age      female 
0.122500336 0.090412751 0.015108219 0.049922006 0.006736868 0.018827112 
    educdec         num         mhi       disea       child     xghindx 
0.092545644 0.077577473 0.010293535 0.069193643 0.019816257 0.074608054 
    afairnm      ghinnm    xghindx2    planlist 
0.029083388 0.133190608 0.063947169         Inf 
4

2 に答える 2

1

そのコードは、簡単に言えば、最善の方法ではありません。最も差し迫った問題は、ほぼ確実に二重括弧 ( ) を使用したい場合に[、リストから選択するために単一括弧 ( ) を使用していることです。groupmean[[

for (i in ncombs) gbias[[i]]<-(groupmean[[totcombs[1,i]]]-groupmean[[totcombs[2,i]]])/((groupvar[[totcombs[1,i]]]-groupvar[[totcombs[2,i]]])^(.5))

しかし、実際にはこれを再現可能にしていないため、テストするのは困難です。

于 2013-04-12T21:34:57.893 に答える
0

totcombs の各列を介して for ループにインデックスを付けたいようです。totcombs の列数を ncombs に割り当ててこれを設定し、1 から ncombs までの数値のリストを変数 ncols に割り当てます。したがって、for ループを開始する必要があります。

for (ncols の i)

ただし、コードでは、for ループが 10 に等しいインデックス i で 1 回だけ実行されるという結果になります。

于 2013-04-12T21:51:27.433 に答える