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:
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:
- 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.
-
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.
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 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.