[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