Crear una nueva variable de valores de otra variable: regresión multinivel.
Estoy listo para crear un análisis multinivel (y soy un principiante total).
En este análisis quiero probar si un alto valor de un predictor (aquí: sentido del humor) (valor numérico – convertido en “alto”, “bajo”, “medio”) predice más el resultado (numérico) que los otros predictores (seriedad-amistad-sentido del humor).
Tengo un conjunto de datos con muchas personas y grupos y quiero comparar el resultado entre los grupos con respecto a la influencia de Sentido del Humor Alto.
El código para eso podría verse así
RandomslopeEC <- lme(criterio(timepoint1) ~ sentido del humor + seriedad + amistad, datos = DATA, aleatorio = ~ SenseofhumorHIGH|grupo)
Por esa razón, creé los valores “alto”, “bajo” y “medio” para mi predictor numérico a través de
library(tidyverse)
DATA <- DATA %>%
mutate(predictorNuevo = case_when(senseofhumor < quantile(senseofhumor, 0.5) ~ 'bajo',
senseofhumor > quantile(senseofhumor, 0.75)~'alto',
TRUE ~ 'medio'))
Ahora se ven así:
Persona | Grupo | sentido del humor |
---|---|---|
1 | 56 | bajo |
7 | 1 | alto |
87 | 7 | bajo |
764 | 45 | alto |
Ahora me di cuenta de que tal vez necesite dividir los valores de esta variable en variables separadas si quiero probar mi idea.
¿Alguno de ustedes sabe cómo generar variables para que parezcan esto?
Persona | Grupo | sentido del humor alto | sentido del humor medio | sentido del humor bajo |
---|---|---|---|---|
1 | 56 | 0 | 0 | 1 |
7 | 1 | 1 | 0 | 0 |
87 | 7 | 0 | 0 | 1 |
764 | 45 | 1 | 0 | 0 |
51 | 3 | 1 | 0 | 0 |
362 | 9 | 1 | 0 | 0 |
87 | 27 | 0 | 0 | 1 |
¿Tiene sentido esto para ustedes en cuanto a mi enfoque? ¿O tienen una idea mejor?
Muchas gracias de antemano.
davy.ai
Tiene sentido generar variables separadas para cada nivel del predictor si desea incluirlas como predictores separados en su análisis. Una forma de hacer esto es utilizando la función
pivot_wider()
en el paquetetidyr
. Aquí tienes un código de ejemplo:“`{r}
library(tidyr)
DATA <- DATA %>%
mutate(sentidodelhumor = cut(sentidodelhumor, breaks = quantile(sentidodelhumor, c(0,0.5,0.75,1)), labels = c(“bajo”, “medio”, “alto”))) %>%
pivot_wider(names_from = sentidodelhumor, values_from = sentidodelhumor, values_fill = 0) %>%
rename(sentidodelhumorBAJO = “bajo”, sentidodelhumorMEDIO = “medio”, sentidodelhumorALTO = “alto”)
#Ajustar el modelo multinivel
RandomslopeEC <- lme(criterio(timepoint1) ~ sentidodelhumorALTO + sentidodelhumorMEDIO + sentidodelhumorBAJO + seriedad + amabilidad ,
data = DATA, random = ~ sentidodelhumorALTO|grupo)
“`
En este código, primero uso la función
cut()
para generar la variablesentidodelhumor
con los niveles “bajo”, “medio” y “alto” basados en los cuantiles. Luego, usopivot_wider()
para remodelar el marco de datos de manera que cada nivel de la variable se convierta en una columna separada. Finalmente, renombro las columnas para que coincidan con tu convención de nomenclatura y ajusto el modelo multinivel utilizando las variables generadas como predictores separados.Ten en cuenta que si tienes valores faltantes para el predictor, es posible que desees rellenarlos con 0 utilizando el argumento
values_fill
en la funciónpivot_wider()
.