Soy nuevo en R y quizás mi pregunta sea muy tonta. En primer lugar, me gustaría describir mis datos y luego el problema.

Tengo un panel (no balanceado) de datos de consumo doméstico mensual desde enero de 2000 hasta diciembre de 2010. En enero de 2005, el impuesto al consumo aumentó del 7% al 10%. En este momento, estoy tratando de comprender más los datos y obtener una comprensión más profunda de los datos.

Para este propósito, me gustaría tomar un consumo promedio de 12 meses antes del aumento de impuestos, es decir, de enero de 2004 a diciembre de 2004. Luego, usando esta media calculada, me gustaría clasificar los hogares en 4 categorías: primera categoría USD 1000-2500 , segunda categoría USD 2501 - 5000, tercera categoría USD 5001-7500 y cuarta categoría USD 7501 - 10000 (en el conjunto de datos, el gasto de consumo mensual mínimo es USD 1000 y el máximo es USD 10,000,00)

Utilizando los criterios de categorización anteriores, me gustaría verificar cuánto ha aumentado el gasto en enero de 2005, febrero de 2005 hasta diciembre de 2010 para cada categoría. He estado luchando con este problema durante aproximadamente 3 semanas y no podía imaginar cómo empezar. Agradecería mucho cualquier sugerencia y ayuda. Muchas gracias de antemano.

Estoy usando datos confidenciales de la oficina de impuestos y no puedo compartir el mismo conjunto de datos. Sin embargo, creé los datos que son similares a él:

data2 <- structure(list(id = c(1223, 1223, 1223, 1223, 1223, 1223, 1223, 
1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 
1223, 1223, 1223, 1223, 1223, 1223, 1224, 1224, 1224, 1224, 1224, 
1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 
1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224), con = c(1954, 
1965, 2220, 1789, 2855, 2192, 1028, 2745, 1190, 2892, 1941, 1045, 
1778, 1660, 1037, 1259, 1655, 1429, 1617, 1927, 1105, 1948, 1929, 
1673, 7309, 9420, 9849, 7824, 7522, 7448, 7370, 6717, 9024, 7635, 
9316, 5173, 9071, 5997, 6315, 6636, 9978, 8077, 9170, 5440, 9442, 
6668, 5732, 8460), year = c(2004, 2004, 2004, 2004, 2004, 2004, 
2004, 2004, 2004, 2004, 2004, 2004, 2005, 2005, 2005, 2005, 2005, 
2005, 2005, 2005, 2005, 2005, 2005, 2005, 2004, 2004, 2004, 2004, 
2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2005, 2005, 2005, 
2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005), month = c(1, 
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 
5, 6, 7, 8, 9, 10, 11, 12)), row.names = c(NA, -48L), class = c("tbl_df", 
"tbl", "data.frame"))
0
Angelina 26 ago. 2020 a las 16:34

1 respuesta

La mejor respuesta

Para su información, uso el paquete dplyr (parte del tidyverse) a lo largo de esta respuesta. También asumí que desea comparar el consumo posterior a 2004 para cada categoría en su conjunto, con el promedio de la categoría en 2004, en lugar de hacerlo por familias individuales. Si esto no es correcto, avíseme y puedo modificar la respuesta.

Primero, hago una tabla separada solo para los datos de 2004, y la uso para calcular el consumo medio por ID para todo el año (usando summarise()), luego hago una nueva columna con la categoría en la que se encuentra cada ID (usando mutate() y case_when()), y luego calcule el consumo medio para cada categoría.

data2_2004 <-
     data2 %>%
     filter(year == 2004) %>%
     group_by(id) %>%
     summarise(mean_con_2004_id = mean(con)) %>%
     mutate(household_category = case_when(between(mean_con_2004_id, 1000, 2500) ~ "cat1",
                                           between(mean_con_2004_id, 2501, 5000) ~ "cat2",
                                           between(mean_con_2004_id, 5001, 7500) ~ "cat3",
                                           between(mean_con_2004_id, 7501, 10000) ~ "cat4")) %>%
     group_by(household_category) %>%
     mutate(mean_con_2004_category = mean(mean_con_2004_id))
> data2_2004
# A tibble: 2 x 4
# Groups:   household_category [2]
     id mean_con_2004_id household_category mean_con_2004_category
  <dbl>            <dbl> <chr>                               <dbl>
1  1223            1985. cat1                                1985.
2  1224            7884. cat4                                7884.

Luego, filtro su marco de datos para los datos posteriores a 2004 y uso left_join() para fusionarlo con los datos de 2004 para agregar el consumo medio por ID de familia, categoría y el consumo medio por categoría.

data2_post2004 <- data2 %>%
     filter(year > 2004) %>%
     left_join(., data2_2004) 
> data2_post2004
# A tibble: 24 x 7
      id   con  year month mean_con_2004_id household_category mean_con_2004_category
   <dbl> <dbl> <dbl> <dbl>            <dbl> <chr>                               <dbl>
 1  1223  1778  2005     1            1985. cat1                                1985.
 2  1223  1660  2005     2            1985. cat1                                1985.
 3  1223  1037  2005     3            1985. cat1                                1985.
 4  1223  1259  2005     4            1985. cat1                                1985.
 5  1223  1655  2005     5            1985. cat1                                1985.
 6  1223  1429  2005     6            1985. cat1                                1985.
 7  1223  1617  2005     7            1985. cat1                                1985.
 8  1223  1927  2005     8            1985. cat1                                1985.
 9  1223  1105  2005     9            1985. cat1                                1985.
10  1223  1948  2005    10            1985. cat1                                1985.
# ... with 14 more rows

Desde aquí, puede hacer las comparaciones que desee. Por ejemplo, para comparar el consumo medio de cada categoría cada mes con el promedio de 2004 para esa categoría:

data2_post2004_summary <- data2_post2004 %>% 
     group_by(household_category, year, month, mean_con_2004_category) %>%
     summarise(mean_con = mean(con)) %>% 
     mutate(diff_2004 = mean_con - mean_con_2004_category) %>%
     mutate(percent_diff_2004 = diff_2004/mean_con_2004_category * 100)

Si desea trazar los datos en su lugar, puede convertir las columnas año + mes en una columna de fecha antes de trazar.

data2_post2004_summary %>%
     mutate(date = as.Date(paste(year, month, "01", sep = "-"))) %>%
     ggplot(aes(x = date, y = mean_con)) +
     geom_line() +
     geom_line(aes(y = mean_con_2004_category), linetype = "dotted") +
     facet_wrap(facets = vars(household_category))

a plot of the mean consumption over time, with a dotted line for the 2004 average, faceted by category

1
stlba 26 ago. 2020 a las 16:13