manipulation labs ggtitle ggplot change r formula

r - ggtitle - labs size ggplot



Fórmula con número dinámico de variables (5)

Generalmente resuelvo esto cambiando el nombre de mi columna de respuesta. Es más fácil de hacer dinámicamente y posiblemente más limpio.

model_response <- "response_field_name" setnames(model_data_train, c(model_response), "response") #if using data.table model_gbm <- gbm(response ~ ., data=model_data_train, ...)

Supongamos que hay algunos data.frame foo_data_frame y uno quiere encontrar la regresión de la columna de destino Y por parte de otras columnas. Para ese propósito generalmente se usan algunas fórmulas y modelos. Por ejemplo:

linear_model <- lm(Y ~ FACTOR_NAME_1 + FACTOR_NAME_2, foo_data_frame)

Eso funciona bien si la fórmula está codificada estáticamente. Si se desea rootear varios modelos con la cantidad constante de variables dependientes (digamos, 2), se puede tratar así:

for (i in seq_len(factor_number)) { for (j in seq(i + 1, factor_number)) { linear_model <- lm(Y ~ F1 + F2, list(Y=foo_data_frame$Y, F1=foo_data_frame[[i]], F2=foo_data_frame[[j]])) # linear_model further analyzing... } }

Mi pregunta es cómo hacer el mismo efecto cuando la cantidad de variables cambia dinámicamente durante la ejecución del programa.

for (number_of_factors in seq_len(5)) { # Then root over subsets with #number_of_factors cardinality. for (factors_subset in all_subsets_with_fixed_cardinality) { # Here I want to fit model with factors from factors_subset. linear_model <- lm(Does R provide smth to write here?) } }


Otra opción podría ser usar una matriz en la fórmula:

Y = rnorm(10) foo = matrix(rnorm(100),10,10) factors=c(1,5,8) lm(Y ~ foo[,factors])


Realmente no necesitas una fórmula. Esto funciona:

lm(data_frame[c("Y", "factor1", "factor2")])

como lo hace esto:

v <- c("Y", "factor1", "factor2") do.call("lm", list(bquote(data_frame[.(v)])))


Una función frecuentemente olvidada es reformulate . De ?reformulate :

reformulate crea una fórmula a partir de un vector de caracteres.

Un simple ejemplo:

listoffactors <- c("factor1","factor2") reformulate(termlabels = listoffactors, response = ''y'')

rendirá esta fórmula:

y ~ factor1 + factor2

Aunque no está documentado explícitamente, también puede agregar términos de interacción:

listofintfactors <- c("(factor3","factor4)^2") reformulate(termlabels = c(listoffactors, listofintfactors), response = ''y'')

rendirá:

y ~ factor1 + factor2 + (factor3 + factor4)^2


Ver ?as.formula , por ejemplo:

factors <- c("factor1", "factor2") as.formula(paste("y~", paste(factors, collapse="+"))) # y ~ factor1 + factor2

donde factors es un vector de caracteres que contiene los nombres de los factores que desea usar en el modelo. Esto se puede pegar en un modelo de lm , por ejemplo:

set.seed(0) y <- rnorm(100) factor1 <- rep(1:2, each=50) factor2 <- rep(3:4, 50) lm(as.formula(paste("y~", paste(factors, collapse="+")))) # Call: # lm(formula = as.formula(paste("y~", paste(factors, collapse = "+")))) # Coefficients: # (Intercept) factor1 factor2 # 0.542471 -0.002525 -0.147433