[R-es] Incluir un rango de varias variables explicativas a un modelo

Carlos Ortega co| @end|ng |rom qu@||tyexce||ence@e@
Jue Jun 6 00:15:18 CEST 2019


Hola,

Mira este código para construir tu fórmula a partir de los nombres de tus
variables...

#-------------------------------

library(dplyr)
library(randNames)

set.seed(1234)

# Creo unos nombres aletaorios como nombres de variables
# Esto lo tendrías de tu data.frame con "names(tu_data_frame)"
my_names <- 25 %>%
  rand_names(nationality = 'ES') %>%
  select(name.first)

mynam_vec <- as.vector(my_names$name.first)
mynam_vec

# Construyo una formula con los nombres de las variables
myformula <- vector()
for(i in 1:length(mynam_vec)) {
  tmp <- mynam_vec[i]
  if(i != length(mynam_vec)) {
      myformula <- paste0(myformula, tmp, sep=" + ", collapse = "")
  } else {
      myformula <- paste0(myformula, tmp, sep= '' )
  }
}
myform_end <- paste("lweg ~ ", myformula, sep = " ")
myform_end
class(myform_end)

# Y con la cadena la transformo en una formula
como_formula <- as.formula(myform_end)
como_formula
class(como_formula)
#-----------------------

Que produce este resultado:

> library(dplyr)
> library(randNames)
>
> set.seed(1234)
>
> # Creo unos nombres aletaorios como nombres de variables
> # Esto lo tendrías de tu data.frame con "names(tu_data_frame)"
> my_names <- 25 %>%
+   rand_names(nationality = 'ES') %>%
+   select(name.first)
>
> mynam_vec <- as.vector(my_names$name.first)
> mynam_vec
 [1] "sonia"     "elisa"     "adrian"    "irene"     "laura"     "joaquin"
  "raquel"
 [8] "eva"       "rodrigo"   "carmelo"   "vicenta"   "jordi"     "nuria"
  "enrique"
[15] "luz"       "mohamed"   "alfredo"   "nieves"    "fatima"    "santiago"
 "francisco"
[22] "joaquin"   "jose"      "manuel"    "andrea"
>
> # Construyo una formula con los nombres de las variables
> myformula <- vector()
> for(i in 1:length(mynam_vec)) {
+   tmp <- mynam_vec[i]
+   if(i != length(mynam_vec)) {
+       myformula <- paste0(myformula, tmp, sep=" + ", collapse = "")
+   } else {
+       myformula <- paste0(myformula, tmp, sep= '' )
+   }
+ }
> myform_end <- paste("lweg ~ ", myformula, sep = " ")
> myform_end
[1] "lweg ~  sonia + elisa + adrian + irene + laura + joaquin + raquel +
eva + rodrigo + carmelo + vicenta + jordi + nuria + enrique + luz + mohamed
+ alfredo + nieves + fatima + santiago + francisco + joaquin + jose +
manuel + andrea"
> class(myform_end)
[1] "character"
>
> # Y con la cadena la transformo en una formula
> como_formula <- as.formula(myform_end)
> como_formula
lweg ~ sonia + elisa + adrian + irene + laura + joaquin + raquel +
    eva + rodrigo + carmelo + vicenta + jordi + nuria + enrique +
    luz + mohamed + alfredo + nieves + fatima + santiago + francisco +
    joaquin + jose + manuel + andrea
> class(como_formula)
[1] "formula"

#-----------------


Saludos,
Carlos Ortega
www.qualityexcellence.es


El mar., 4 jun. 2019 a las 5:43, Rolando Valdez (<rvaldezr using gmail.com>)
escribió:

> Hola, gracias por la respuesta,
>
> No me funcionó debido a que los nombres de las variables no están
> seriadas, es decir, los nombres de las variables son del tipo: x23 x25 x30,
> x301 x320, x80. Entonces me da este error:
> Error in eval(predvars, data, env) : object 'pot24' not found. Debido a
> que pot24 no existe, ya que de pot23 se brinca a pot30.
>
> En Stata es algo muy simple de hacer, solo tengo que especificar gl
> indepvars "x23-x80" y ya. En R no logro hacerlo.
>
> ¿Alguna otra sugerencia?
>
> Gracias de antemano.
>
> El lun., 3 de jun. de 2019 a la(s) 04:50, Carlos Ortega (
> cof using qualityexcellence.es) escribió:
>
>> Hola,
>>
>> Mira la función "*as.formula()*".
>> Incluye un ejemplo muy parecido a lo que estás queriendo hacer.
>>
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>> El lun., 3 jun. 2019 a las 1:00, Rolando Valdez (<rvaldezr using gmail.com>)
>> escribió:
>>
>>> Hola,
>>>
>>> Quiero especificar una ecuación con varias variables explicativas de una
>>> manera eficiente sin necesidad de escribir todas y cada una. Tengo un
>>> conjunto de variables (junto con otras) dentro de una base de datos que
>>> se
>>> llaman pot23 pot311 pot312 pot 316 pot317........... pot80. No
>>> necesariamente están secuenciadas. Quisiera saber cómo indicar que
>>> incluya
>>> todas las variables de pot23 a pot80 en una ecuación.
>>>
>>> He intentado lo siguiente, pero no funciona:
>>>
>>> > pots <- paste("pot",23:321, sep="")
>>> > eqreg2 <- lwage~SEXO+EDAD+HLENGUA+ESCOACUM+marr+wageszm14[,pots]
>>> > fit <- qregspiv(eqreg2, shpfile = zm15, tau = 0.5, nboot = 70, data =
>>> wageszm14)
>>> Error: Can't find columns `pot24`, `pot25`, `pot26`, `pot27`, `pot28`,
>>> ...
>>> (and 273 more) in `.data`.
>>>
>>> De igual forma, después estaría interesado en obtener el logaritmo de
>>> todas
>>> esas variables pot~
>>>
>>> Gracias de antemano por cualquier tipo de ayuda.
>>>
>>> --
>>> Rol~
>>>
>>>         [[alternative HTML version deleted]]
>>>
>>> _______________________________________________
>>> R-help-es mailing list
>>> R-help-es using r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>
>>
>>
>> --
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>
>
> --
> Rol~
>


-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es