es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Distintos objetos no están apareciendo en mi ggplot2.

Estoy estudiando los retornos de la admisión universitaria para estudiantes marginales y estoy tratando de crear un ggplot2 de los siguientes datos, que son salarios promedio de estudiantes que terminaron o no su maestría en medicina y el promedio de “GPA” (equivalente extranjero) a la puntuación de aceptación:


SalaryAfter <- c (287,780,305,181,323,468,339,082,344,738,370,475,373,257,
372,682,388,939,386,994)
DistanceGrades <- c ("<=-1.0", "[-0,9,-0,5]", "[-0,4,-0,3]", "-0,2", "-0,1",
"0,0", "0,1", "[0,2,0,3]", "[0,4,0,5]", ">=0,5")

Tengo que hacer un Diseño de Discontinuidad de Regresión (RDD), así que para hacer la regresión, según entiendo, debo reescribir DistanceGrades a numérico, por lo que solo creé una variable z

z <- -5: 4

donde 0 es el umbral (es decir, 0 es igual a “0.0” en DistanceGrades).

Luego hago un marco de datos

df <- data.frame (z, SalaryAfter)

Ahora mi intento de crear el gráfico se vuelve un poco desordenado (uso el paquete ‘fpp3’, pero supongo que son solo los paquetes ggplot2 y tal vez dyplr)

df %>%
select (z, SalaryAfter) %>%
mutate (D = as.factor (ifelse (z >= -0.1, 1, 0))) %>%
ggplot (aes (x = z, y = SalaryAfter, color = D)) +
geom_point (stat = "identidad") +
geom_smooth (método = "lm") +
geom_vline (xintercept = 0) +
theme (panel.grid = element_line (color = "blanco",
tamaño = 0,75,
linetype = 1)) +
xlim (-6,5) +
xlab ("Distancia a la puntuación de aceptación") +
labs (title = "Figura 1,1", subtitle = "Salario para cada distancia a la puntuación de aceptación")

Lo que dibuja:
enter image description here

Lo que estoy tratando de hacer primero es dividir los datos con una variable ficticia D = 1 si z> 0 y D = 0 si z< 0. Luego lo represento con una regresión lineal y una línea vertical en z = 0. Por último, escribo el título y subtítulo.

Ahora tengo dos problemas:

  1. El eje x muestra -5, -2.5, … pero me gustaría que mostrara todos los enteros, los números racionales no tienen relación con la variable z que es discreta. He intentado arreglar esto con varios métodos diferentes, pero ninguno de ellos ha funcionado. No puedo recordar todas las formas en que lo he intentado (tema(panel.grid…), escalaxdiscreto y muchos más), pero el resultado ha sido bastante similar. Todos causan que el eje x se elimine por completo de modo que no hay números y a veces incluso se elimina el título del eje.

  2. Me gustaría que el canal de regresión para la primera parte de los datos se extienda a z = 0

Cuando trato de resolver ambos problemas, obtengo resultados similares. La mayoría de las cosas que intento no producen un mensaje de error cuando ejecuto el código, pero o bien no hacen nada a mi gráfico o eliminan algunos de los elementos existentes, lo que me deja con dudas. Supongo que el error se debe a que algunos de los elementos no funcionan juntos, pero no tengo idea.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver el primer problema de mostrar todos los enteros en el eje x, puedes usar la función scale_x_continuous() y proporcionar los cortes como la secuencia de enteros desde -5 a 4. Aquí te mostramos cómo puedes modificar tu código:

    “`{r}
    df %>%
    select(z, SalaryAfter) %>%
    mutate(D = as.factor(ifelse(z >= -0.1, 1, 0))) %>%
    ggplot(aes(x = z, y = SalaryAfter, color = D)) +
    geom_point(stat = “identity”) +
    geom_smooth(method = “lm”) +
    geom_vline(xintercept = 0) +
    scale_x_continuous(breaks = seq(-5, 4, 1)) +
    xlab(“Distancia a la puntuación de aceptación”) +
    ylab(“Salario promedio de los estudiantes”) +
    labs(title = “Figura 1.1”, subtitle = “Salario para cada distancia a la puntuación de aceptación”) +
    theme(panel.grid = element_line(color = “white”,
    size = 0.75,
    linetype = 1))


    Esto te dará el eje x con todos los enteros mostrados. Para resolver el segundo problema de extender el canal de regresión a z = 0, puedes usar `geom_segment()` y dibujar un segmento de línea desde la intercepción de la línea de regresión hasta el punto (0, y) donde y es el valor predicho de la variable dependiente en z = 0. Aquí te mostramos cómo modificar el código: ```{r} fit <- lm(SalaryAfter ~ z, data = df) intercept <- coef(fit)[1] slope <- coef(fit)[2] df %>% select(z, SalaryAfter) %>% mutate(D = as.factor(ifelse(z >= -0.1, 1, 0))) %>% ggplot(aes(x = z, y = SalaryAfter, color = D)) + geom_point(stat = "identity") + geom_smooth(method = "lm") + geom_vline(xintercept = 0) + geom_segment(aes(x = -5, y = intercept + slope * -5, xend = 0, yend = intercept)) + scale_x_continuous(breaks = seq(-5, 4, 1)) + xlab("Distancia a la puntuación de aceptación") + ylab("Salario promedio de los estudiantes") + labs(title = "Figura 1.1", subtitle = "Salario para cada distancia a la puntuación de aceptación") + theme(panel.grid = element_line(color = "white", size = 0.75, linetype = 1))

    Esto dibujará un segmento de línea desde (-5, salario predicho en z = -5) hasta (0, salario predicho en z = 0) que extiende la línea de regresión a z = 0.

Comments are closed.