Sie eine Liste von Formeln regulären Ausdruck erstellen können, und dann lapply
über diese Liste:
# create data
test<-data.frame(abc=c(2.4,3.2,8.9,9.8,10.0,3.2,5.4),
city1_0=c(5.3,2.6,3,5.4,7.8,4.4,5.5),
city1_1=c(2.3,5.6,3,2.4,3.6,2.4,6.5),
city1_2=c(4.2,1.4,2.6,2,6,3.6,2.4),
city1_3=c(2.4,2.6,9.4,4.6,2.5,1.2,7.5),
city1_4=c(8.2,4.2,7.6,3.4,1.7,5.2,9.7),
city2_0=c(4.3,8.6,6,3.7,7.8,4.7,5.8),
city2_1=c(5.3,2.6,3,5.4,7.8,4.4,5.5))
# create list of formulas
myformulas <- list(as.formula(paste("abc", paste(grep("city1_[123456789]", names(test), value = TRUE), collapse = " + "), sep = " ~ ")),
as.formula(paste("abc", paste(grep("city1_[23456789]", names(test), value = TRUE), collapse = " + "), sep = " ~ ")),
as.formula(paste("abc", paste(grep("city1_[3456789]", names(test), value = TRUE), collapse = " + "), sep = " ~ ")))
# check formulas
> myformulas
[[1]]
abc ~ city1_1 + city1_2 + city1_3 + city1_4
[[2]]
abc ~ city1_2 + city1_3 + city1_4
[[3]]
abc ~ city1_3 + city1_4
# loop over formulas
mylms <- lapply(myformulas, function(x) lm(x, data = test))
# get output of linear regressions
> mylms
[[1]]
Call:
lm(formula = x, data = test)
Coefficients:
(Intercept) city1_1 city1_2 city1_3 city1_4
5.8987 -0.2480 0.6316 1.1810 -1.0420
[[2]]
Call:
lm(formula = x, data = test)
Coefficients:
(Intercept) city1_2 city1_3 city1_4
4.8903 0.7114 1.1673 -1.0595
[[3]]
Call:
lm(formula = x, data = test)
Coefficients:
(Intercept) city1_3 city1_4
7.909 1.047 -1.102
Sie könnten sogar die grep()
Muster prespecify und die Formeln mit einer Schleife erstellen:
mygreps <- c("city1_[123456789]", "city1_[23456789]", "city1_[3456789]")
myformulas <- lapply(mygreps, function(x) as.formula(paste("abc", paste(grep(x, names(test), value = TRUE), collapse = " + "), sep = " ~ ")))
Bearbeiten:
Sie können Definieren Sie auch nur den Wertebereich der Variablen city
und verwenden Sie paste()
, um die Strings zu generieren.
Beispiel:
myranges <- lapply(1:16, function(x) x:16)
myvars <- paste0("city", 1:10, "_")
daraus Dann wird die Formeln mit einem verschachtelten lapply()
Anruf erstellen:
myformulas <- lapply(myvars, function(x) lapply(myranges, function(y) as.formula(paste("abc", paste(x, y, sep = "", collapse = " + "), sep = " ~ "))))
myformulas
nun 10-Listen enthalten wird (ein für jeden city1_
zu city10_
) mit 16 Formeln in jeder Liste (jeweils einschließlich einer dekrementierenden Menge von Variablen, beginnend mit allen 16 und endend mit nur cityX_16
).
Jetzt nur noch eine Schleife über myformulas
eine Liste der linearen Regression Ausgabe zu erhalten:
# loop over formulas
mylms <- lapply(myformulas, function(x) lapply(x, function(y) lm(y, data = test)))
Was ist das Muster auf die Kombinationen Sie versuchen wollen? Ein gängiger Ansatz besteht darin, Variablennamen als Strings einzufügen und dann 'lapply (string_formulas, function (form) {lm (as.formula (form), data = df})' '. Das heißt, ein gründlicherer Ansatz für die Auswahl von Features Die LASSO könnte eine bessere Idee sein. – alistaire
@allstaire, Eigentlich, wenn ich alle 1 Suffixvariablen verwende, möchte ich nicht 0 Suffixvariablen in meinem Modell verwenden, und wenn ich 2 suffixed Variablen verwende, ich don ' Ich möchte die Variablen mit den Suffixen von 0 und 1 in meinem zweiten Modell verwenden usw. Im Grunde muss ich viele Multiplikatoren-Modelle basierend auf den Variablen erstellen Wie funktioniert das? – User0590
Dies ist ein exakter Umtausch einer früheren Frage Machen Sie etwas Arbeit, um den Basiscode zu bekommen, und bitten Sie um Hilfe. – sconfluentus