潜在类分析(poLCA)以编程方式在R中创建公式

问题描述 投票:0回答:1

我想以编程方式选择变量/为poLCA函数创建一个公式。当我需要使用“~1”时,问题似乎就出现了。否则,制定一个公式是微不足道的。

下面,formula_lca将起作用,因为我手动输入了变量。我更愿意用代码指定变量。我留下了一些导致错误的公式尝试。

if(!"pacman" %in% rownames(installed.packages())) {
  install.packages("pacman")
}
pacman::p_load(tidyverse, poLCA, caret)

data("GermanCredit")
gc <- GermanCredit

categorical_vars <- gc %>%
   keep(is.numeric) %>%
   keep( ~ sd(.x) < .50) %>%
   names(.) %>%
   sort(.)

lca_vars <- categorical_vars[str_detect(categorical_vars, "Employment|Job|Credit|Checking")]

# poLCA will not take zeroes; change values based on 1 index for each variable
gc_lca <- gc[, lca_vars] %>%
  map_df( ~ ifelse(.x == 0, 1, 2))

formula_lca = cbind(CheckingAccountStatus.0.to.200, CheckingAccountStatus.lt.0) ~ 1

as.formula(cbind(sym(str_c(lca_vars, collapse = ", "))), 1)
#> Error in formula.default(object, env = baseenv()): invalid formula

as.formula(paste0(lca_vars) ~ 1)
#> paste0(lca_vars) ~ 1

as.formula(paste("y ~ ", paste(cbind(lca_vars), collapse = ", ")))
#> Error in parse(text = x, keep.source = FALSE): <text>:1:36: unexpected ','
#> 1: y ~  CheckingAccountStatus.0.to.200,
#>                                        ^

set.seed(231213)
results.2 = poLCA(
  formula_lca,
  gc_lca,
  nclass = 2,
  nrep = 10,
  tol = .001,
  verbose = FALSE,
  graphs = FALSE
)

编辑:将运行一个简单的补丁:

names(gc_lca) %>% str_c(collapse = ", ")

并复制并粘贴没有引号的名称。但我仍然很好奇是否可以在外面构建一个带“~1”的公式。

r lazy-evaluation rlang
1个回答
1
投票

您可以将名称粘贴在一起:

as.formula(paste("cbind(", paste0(names(gc_lca), collapse = ","),")~ 1"))
© www.soinside.com 2019 - 2024. All rights reserved.