3

誰かがここで何らかのガイダンスを提供できることを願っています。

simDesign パッケージを使用して多変量シミュレーションを作成しています。因子の数と各因子にロードするアイテムを変化させています。factornumbers に存在する因子の数を識別し、それらに適切な項目を割り当てるコマンドを書きたいと思います (クロス ローディングなし)。以下の条件のすべての組み合わせをテストします。複数のモデル ステートメントを記述する必要がないように、異なるモデルの反復を認識するモデル コマンドが必要です。

factornumbers<-c(1,2,3,5)
itemsperfactor<-c(5,10,30)

lavaan と mirt が探しているものは以下のとおりです。

mirtmodel<-mirt.model('
                    F1=1-15
                    F2=16-30
                    MEAN=F1,F2
                    COV=F1*F2')

lavmodel <- ' F1=~ Item_1 + Item_2 + Item_3 + Item_4 + Item_5 + Item_6 + Item_7 + Item_8 + Item_9 + Item_10 + Item_11 + Item_12 + Item_13 + Item_14 + Item_15
              F2=~ Item_16 + Item_17 + Item_18 + Item_19 + Item_20 + Item_21 + Item_22 + Item_23 + Item_24 + Item_25 + Item_26 + Item_27 + Item_28 + Item_29 + Item_30'

simDesign パッケージはこの例を提供します。これを拡張したいと思いますが、ノウハウがあるかどうかはわかりません。

lavmodel<-paste0('F=~ ', paste0(colnames(dat)[1L], ' + '),
               paste0(colnames(dat)[-1L], collapse = ' + '))

私が望むのは、factornumbers コマンドで指定された要素の数を見つけ、データで指定された正しいアイテムと itemsperfactor を割り当てる単一の mirt と lavaan コマンドです。

編集:モデル識別で、その条件に使用されている要素と項目構造を取得し、モデル識別に正しい情報を入力してください。

例えば:

mirtmodel<-mirt.model('
                    F1=1-1
                    F2=6-10
                    F3=11-15
                    F4=16-20
                    F5=21-25
                    MEAN=F1,F2,F3,F4,F5
                    COV=F1*F2*F3*F4*F5')

または

 mirtmodel<-mirt.model('
                    F1=1-30
                    F2=31-60
                    MEAN=F1,F2
                    COV=F1*F2')

また、対応するlavaanモデル。

4

1 に答える 1

3

ここでの考え方は、condition入力 (それぞれのDesignオブジェクトの行) だけで適切なモデル仕様文字列を構築できるように、さまざまな文字列を一緒に貼り付けることです。シミュレーションの構文を生成することは、間違いなくシミュレーションの最も厄介な部分ですが、少なくとも R には、役立つ文字列操作が多数あります (さらに、 のようなパッケージstringr)。

基本 R 関数を使用して現在探しているものについての私の解釈は次のとおりです。

library(SimDesign)
library(mirt)

Design <- createDesign(factornumbers = c(1,2,3,5),
                       itemsperfactor = c(5,10,30))

gen_syntax_mirt <- function(condition){
    fn <- with(condition, factornumbers)
    ipf <- with(condition, itemsperfactor)
    nitems <- fn * ipf
    maxloads <- sort(seq(nitems, ipf, length.out = fn))
    minloads <- c(1, maxloads[-length(maxloads)] + 1)
    fnames <- paste0('F', 1:fn)
    df <- cbind(fnames, ' = ', minloads, '-', maxloads)
    s1 <- apply(df, 1, paste0, collapse = '')
    s2 <- paste0('MEAN = ', paste0(fnames, collapse = ','))
    s3 <- paste0('COV = ', paste0(fnames, collapse = '*'))
    ret <- paste0(c(s1, s2, s3), collapse = '\n')
    mirt.model(ret)
}

gen_syntax_mirt(Design[1,])
gen_syntax_mirt(Design[10,])

この関数への入力は、Design入力から への 1 つの行であるrunSimulation()ため、問題なく動作することがわかります。の構文についても同様のlavaanことを行うと、設定が完了します。

于 2016-06-13T23:21:52.930 に答える