0

我只是想学习如何使用 R 中的 nlsem 包来拟合非线性 SEMM,但是当我尝试创建 res 对象时,我一直遇到错误“无法正确计算后验概率。选择不同的起始参数” . 我试图估计一个非线性模型,其中潜在变量 tas 预测潜在变量 cts,由潜在变量 ams 调节。我对 R 还是很陌生,对非线性分析也很陌生,所以任何帮助都将不胜感激!

到目前为止我的代码:

    ##nonlinear SEM
    #Select data
    FPerpSEMM<-subset(FPerp,
                select=(c("tas1", "tas3", "tas6", "tas7", "tas9", "tas13","tas14", "AMSEscalate",
                          "AMSNegAttribution", "AMSSelfAware", "AMSCalming", "cts_5", "cts_25", 
                          "cts_29", "cts_35", "cts_49", "cts_65", "cts_67", "cts_69")))
    FPerpSEMM$x1<-FPerpSEMM$tas1
    FPerpSEMM$x2<-FPerpSEMM$tas3
    FPerpSEMM$x3<-FPerpSEMM$tas6
    FPerpSEMM$x4<-FPerpSEMM$tas7
    FPerpSEMM$x5<-FPerpSEMM$tas9
    FPerpSEMM$x6<-FPerpSEMM$tas13
    FPerpSEMM$x7<-FPerpSEMM$tas14
    FPerpSEMM$x8<-FPerpSEMM$AMSEscalate
    FPerpSEMM$x9<-FPerpSEMM$AMSNegAttribution
    FPerpSEMM$x10<-FPerpSEMM$AMSSelfAware
    FPerpSEMM$x11<-FPerpSEMM$AMSCalming
    FPerpSEMM$y1<-FPerpSEMM$cts_5
    FPerpSEMM$y2<-FPerpSEMM$cts_25
    FPerpSEMM$y3<-FPerpSEMM$cts_29
    FPerpSEMM$y4<-FPerpSEMM$cts_35
    FPerpSEMM$y5<-FPerpSEMM$cts_49
    FPerpSEMM$y6<-FPerpSEMM$cts_65
    FPerpSEMM$y7<-FPerpSEMM$cts_67
    FPerpSEMM$y8<-FPerpSEMM$cts_69
    FPerpSEMMr1<-subset(FPerpSEMM,
                      select=(c("x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11",
                                "y1","y2","y3","y4","y5","y6","y7","y8")))
    #Create dataframe containing only complete cases
    FPerpSEMMcc<-na.omit(FPerpSEMMr1) 
    # load data
    dat <- as.matrix(FPerpSEMMcc[, c(12:19, 1:7, 8:11)])
    # specify model of class SEMM
    model<- specify_sem(num.x = 11, num.y = 8, num.xi = 2, num.eta = 1,
                         xi = "x1-x7,x8-x11", eta = "y1-y8",
                     num.classes = 3, interaction = "xi1:xi2", rel.lat = "eta1~xi1+xi2",
                constraints = "direct1")
    class(model)
    #fit model
    dat <- as.matrix(FPerpSEMMcc[, c(12:19, 1:7, 8:11)])
    set.seed(911)
    pars.start <- runif(count_free_parameters(model))
    res <- em(model, dat, pars.start, convergence = 0.1, max.iter = 200)
    summary(res)
    plot(res)
4

0 回答 0