Próbuję uruchomić szereg regresji w pętli z różnymi zmiennymi niezależnymi.

Przykład zmiennych niezależnych, które są tworzone ręcznie:

indep_vars_1 <- c("income", "female")
indep_vars_2 <- c("education", "wealth", "resources")
...
indep_vars_50 <- c("income", "size", "smoking", "pregnancy")

Łącząc wszystkie od 1 do 50:

indep_vars_all <- list(indep_vars_1, indep_vars_2 .... indep_vars_50)

Tworzenie pętli:

for (i in indep_vars_all) {
  model_i <- pisa.reg.pv(pvlabel = "MATH", x = i, data = df)
}

Regresje są uruchamiane przy użyciu pakietu o nazwie Intsvy używane do obsługi danych ankietowych ze szczególnymi ciężarami (nie ma potrzeby przejścia do zbyt wiele szczegółów tutaj na pakiecie).

Jak możemy skończyć z modelem_1 do modelu_50 za pomocą tej pętli? Jestem zdezorientowany, jak zwiększać "model". Próbowałem model_i model[i] i innych podobnych kombinacji bez powodzenia.

Dziękuję Ci

1
omirz 31 lipiec 2020, 20:07

2 odpowiedzi

Najlepsza odpowiedź

Możesz utworzyć listę i zapisać modele. Spróbuj tego:

#Vars
indep_vars_1 <- c("income", "female")
indep_vars_2 <- c("education", "wealth", "resources")
indep_vars_50 <- c("income", "size", "smoking", "pregnancy")
#Combine
indep_vars_all <- list(indep_vars_1, indep_vars_2 , indep_vars_50)
#create a list
List <- list()
#Loop
for (i in 1:length(indep_vars_all)) {
  List[[i]] <- pisa.reg.pv(pvlabel = "MATH", x = indep_vars_all[[i]], data = df)
}
#List of your models
names(List) <- paste0('model.',1:length(indep_vars_all))
List
list2env(List,envir = .GlobalEnv)
0
Duck 31 lipiec 2020, 18:06

Oto wersja lapply() jako substytut for pętli.

indep_vars_all <- setNames(indep_vars_all, paste0("indep_vars_", 1:50))
list2env(lapply(indep_vars_all, function(i){
  pisa.reg.pv(pvlabel = "MATH", x = i, data = df)
}), .GlobalEnv)

Po wykonaniu kodu powyżej, indep_vars_1 do indep_vars_50 zostanie przypisany do twojego obszaru roboczego.

0
Darren Tsai 31 lipiec 2020, 18:53