Создание моделей перестановок лавы и мирта разного размера и длины.

Надеясь, что кто-то может предложить некоторые рекомендации здесь.

Я создаю многовариантное моделирование с использованием пакета simDesign, я изменяю количество факторов, а также элементы, которые загружаются на каждый фактор. Я хотел бы написать команду, которая идентифицирует количество факторов, присутствующих в факторных номерах, и присваивает им соответствующие элементы (без перекрестной загрузки). Я буду тестировать все комбинации приведенных ниже условий и многое другое, и я хотел бы иметь команду модели, которая подтверждает итерации различных моделей, поэтому мне не нужно писать несколько операторов модели.

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

То, что ищут Лаваан и Мирт, ниже:

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 = ' + '))

То, что я хотел бы, - это одна команда mirt и lavaan, которая находит число факторов, указанных в команде factornumbers, и назначает правильные элементы, указанные в данных, а также itemsperfactor.

РЕДАКТИРОВАТЬ: Я хотел бы, чтобы идентификация модели, чтобы определить, какой фактор и структура элемента используется для этого условия и заполнить идентификацию модели с правильной информацией.

Например:

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.

1 ответ

Решение

Основная идея здесь заключается в том, чтобы стать эффективными при вставке различных строк вместе, чтобы condition вход от SimDesign это все, что требуется для построения подходящей строки вывода. Генерация синтаксиса для симуляций, пожалуй, самая раздражающая часть симуляций, но, по крайней мере, в R имеется большое количество полезных строковых операций.

Вот моя интерпретация того, что вы сейчас ищете.

Design <- expand.grid(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 вход в runSimulation()Таким образом, вы можете увидеть здесь, что это будет работать просто отлично. Сделать что-то подобное для lavaanсинтаксис, и вы будете установлены.

Другие вопросы по тегам