# Lo_ad datasets
data("md_ABC_2000_income")
data("md_ABC_2010_income")
data("md_DEF_2000_consumption")
data("md_GHI_2000_income")
data("gd_GHI_2009_income")
data("md_GHI_2000_consumption")
# Clean datasets
md_ABC_2000_income <-
md_clean_data(md_ABC_2000_income,
welfare = "welfare",
weight = "weight",
quiet = TRUE
)$data
md_ABC_2010_income <-
md_clean_data(md_ABC_2010_income,
welfare = "welfare",
weight = "weight",
quiet = TRUE
)$data
md_DEF_2000_consumption <-
md_clean_data(md_DEF_2000_consumption,
welfare = "welfare",
weight = "weight",
quiet = TRUE
)$data
md_GHI_2000_income <-
md_clean_data(md_GHI_2000_income,
welfare = "welfare",
weight = "weight",
quiet = TRUE
)$data
md_GHI_2000_income <-
md_clean_data(md_GHI_2000_consumption,
welfare = "welfare",
weight = "weight",
quiet = TRUE
)$data
gd_GHI_2009_income <-
gd_clean_data(gd_GHI_2009_income,
welfare = "welfare",
population = "weight",
gd_type = 5,
quiet = TRUE
)
# Output format (named list)
test_that("prod_fg_compute_pip_stats() returns the correct output format", {
# Test that prod_fg_compute_pip_stats() returns a list with all poverty stats
df <- data.frame(welfare = 1:1000, weight = rep(1, 1000))
res <- prod_fg_compute_pip_stats(
request_year = 2005,
survey_year = 2000,
data = list(df0 = df),
default_ppp = 1,
predicted_request_mean = 5,
distribution_type = "micro",
poverty_line = 1.9,
svy_mean_lcu = 500.5,
svy_median_lcu = 450.2,
svy_median_ppp = 4.49,
ppp = NULL,
popshare = NULL
)
expect_identical(
names(res),
c(
"poverty_line", "mean", "median",
"headcount", "poverty_gap", "poverty_severity", "watts"
)
)
})
# Extrapolation
test_that("prod_fg_compute_pip_stats() extrapolates correctly for microdata", {
predicted_request_mean <- 6
dist_stats <- md_compute_dist_stats(
welfare = md_DEF_2000_consumption$welfare,
weight = md_DEF_2000_consumption$weight
)
median_ppp <- dist_stats$median / (dist_stats$mean / predicted_request_mean)
res <- prod_fg_compute_pip_stats(
request_year = 2005,
survey_year = c(2000),
data = list(df0 = md_DEF_2000_consumption),
predicted_request_mean = predicted_request_mean,
default_ppp = 1,
distribution_type = "micro",
poverty_line = 1.9,
svy_mean_lcu = dist_stats$mean,
svy_median_lcu = dist_stats$median,
svy_median_ppp = median_ppp,
ppp = NULL,
popshare = NULL
)
expect_equal(res$poverty_line, 1.9)
expect_equal(res$mean, 6, tolerance = 1.5e-7)
expect_equal(res$median, 4.726458, tolerance = 1.5e-7)
expect_equal(res$headcount, 0.005424768, tolerance = 1.5e-7)
expect_equal(res$poverty_gap, 0.0010347565, tolerance = 1.5e-7)
expect_equal(res$poverty_severity, 0.0002663465, tolerance = 1.5e-7)
expect_equal(res$watts, 0.001201002, tolerance = 1.5e-7)
})
# Extrapolation
test_that("prod_fg_compute_pip_stats() extrapolates correctly for grouped data", {
predicted_request_mean <- 6
dist_stats <- gd_compute_dist_stats(
welfare = gd_GHI_2009_income$welfare,
population = gd_GHI_2009_income$weight,
mean = predicted_request_mean
)
median_ppp <- dist_stats$median / (dist_stats$mean / predicted_request_mean)
res <- prod_fg_compute_pip_stats(
request_year = 2005,
survey_year = 2009,
data = list(df0 = gd_GHI_2009_income),
predicted_request_mean = predicted_request_mean,
default_ppp = 1,
distribution_type = "group",
poverty_line = 1.9,
svy_mean_lcu = 5,
svy_median_lcu = dist_stats$median,
svy_median_ppp = median_ppp,
ppp = NULL,
popshare = NULL
)
expect_equal(res$poverty_line, 1.9)
expect_equal(res$mean, 6, tolerance = 1.5e-7)
expect_equal(res$median, 4.231318, tolerance = 1.5e-7)
expect_equal(res$headcount, 0.12776, tolerance = 1.5e-7)
expect_equal(res$poverty_gap, 0.02657251, tolerance = 1.5e-7)
expect_equal(res$poverty_severity, 0.007863721, tolerance = 1.5e-7)
expect_equal(res$watts, 0.0318211, tolerance = 1.5e-7)
})
# Monotonic interpolation
test_that("prod_fg_compute_pip_stats() interpolates correctly (monotonic) for microdata", {
predicted_request_means <- c(13, 13)
dist_stats0 <- md_compute_dist_stats(
welfare = md_ABC_2000_income$welfare,
weight = md_ABC_2000_income$weight
)
dist_stats1 <- md_compute_dist_stats(
welfare = md_ABC_2010_income$welfare,
weight = md_ABC_2010_income$weight
)
median_ppp0 <- dist_stats0$median / (dist_stats0$mean / predicted_request_means[1])
median_ppp1 <- dist_stats1$median / (dist_stats1$mean / predicted_request_means[2])
res <- prod_fg_compute_pip_stats(
request_year = 2005,
survey_year = c(2000, 2010),
data = list(df0 = md_ABC_2000_income, df1 = md_ABC_2010_income),
predicted_request_mean = predicted_request_means,
default_ppp = c(1, 1),
distribution_type = "micro",
poverty_line = 1.9,
svy_mean_lcu = c(dist_stats0$mean, dist_stats1$mean),
svy_median_lcu = c(dist_stats0$median, dist_stats1$median),
svy_median_ppp = c(median_ppp0, median_ppp1),
ppp = NULL,
popshare = NULL
)
expect_equal(res$poverty_line, 1.9)
expect_equal(res$mean, 13, tolerance = 1.5e-7)
expect_identical(res$median, NA_real_)
expect_equal(res$headcount, 0.0459062, tolerance = 1.5e-7)
expect_equal(res$poverty_gap, 0.0161475, tolerance = 1.5e-7)
expect_equal(res$poverty_severity, 0.008425631, tolerance = 1.5e-7)
expect_equal(res$watts, 0.02101141, tolerance = 1.5e-7)
})
# Monotonic interpolation
test_that("prod_fg_compute_pip_stats() interpolates correctly (monotonic) for micro vs grouped data", {
predicted_request_means <- c(6, 6)
dist_stats0 <- md_compute_dist_stats(
welfare = md_GHI_2000_consumption$welfare,
weight = md_GHI_2000_consumption$weight,
mean = predicted_request_means[1]
)
dist_stats1 <- gd_compute_dist_stats(
welfare = gd_GHI_2009_income$welfare,
population = gd_GHI_2009_income$weight,
mean = predicted_request_means[2]
)
median_ppp0 <- dist_stats0$median / (dist_stats0$mean / predicted_request_means[1])
median_ppp1 <- dist_stats1$median / (dist_stats1$mean / predicted_request_means[2])
res <- prod_fg_compute_pip_stats(
request_year = 2005,
survey_year = c(2000, 2009),
data = list(df0 = md_GHI_2000_consumption, df1 = gd_GHI_2009_income),
predicted_request_mean = predicted_request_means,
default_ppp = 1,
distribution_type = c("micro", "group"),
poverty_line = 1.9,
svy_mean_lcu = c(7769.661, 7769.661),
svy_median_lcu = c(dist_stats0$median, dist_stats1$median),
svy_median_ppp = c(median_ppp0, median_ppp1),
ppp = NULL,
popshare = NULL
)
expect_equal(res$poverty_line, 1.9)
expect_equal(res$mean, 6, tolerance = 1.5e-7)
expect_identical(res$median, NA_real_)
expect_equal(res$headcount, 0.09451118, tolerance = 1.5e-7)
expect_equal(res$poverty_gap, 0.018744685, tolerance = 1.5e-7)
expect_equal(res$poverty_severity, 0.005512714, tolerance = 1.5e-7)
expect_equal(res$watts, 0.022445304, tolerance = 1.5e-7)
})
# Non-monotonic interpolation
test_that("prod_fg_compute_pip_stats() interpolates correctly (non-monotonic) for microdata", {
predicted_request_means <- c(14, 17)
dist_stats0 <- md_compute_dist_stats(
welfare = md_ABC_2000_income$welfare,
weight = md_ABC_2000_income$weight,
mean = predicted_request_means[1]
)
dist_stats1 <- md_compute_dist_stats(
welfare = md_ABC_2010_income$welfare,
weight = md_ABC_2010_income$weight,
mean = predicted_request_means[2]
)
median_ppp0 <- dist_stats0$median / (dist_stats0$mean / predicted_request_means[1])
median_ppp1 <- dist_stats1$median / (dist_stats1$mean / predicted_request_means[2])
res <- prod_fg_compute_pip_stats(
request_year = 2005,
survey_year = c(2000, 2010),
data = list(df0 = md_ABC_2000_income, df1 = md_ABC_2010_income),
predicted_request_mean = predicted_request_means,
default_ppp = c(1, 1),
distribution_type = "micro",
poverty_line = 1.9,
svy_mean_lcu = c(3436146, 7186782),
svy_median_lcu = c(dist_stats0$median, dist_stats1$median),
svy_median_ppp = c(median_ppp0, median_ppp1),
ppp = NULL,
popshare = NULL
)
expect_equal(res$poverty_line, 1.9)
expect_equal(res$mean, 15.5, tolerance = 1.5e-7)
expect_identical(res$median, NA_real_)
expect_equal(res$headcount, 0.03680496, tolerance = 1.5e-7)
expect_equal(res$poverty_gap, 0.01232436, tolerance = 1.5e-7)
expect_equal(res$poverty_severity, 0.006587024, tolerance = 1.5e-7)
expect_equal(res$watts, 0.01543411, tolerance = 1.5e-6)
})
# Non-monotonic interpolation
test_that("prod_fg_compute_pip_stats() interpolates correctly (non-monotonic) for micro vs grouped data", {
predicted_request_means <- c(4, 6)
dist_stats0 <- md_compute_dist_stats(
welfare = md_GHI_2000_consumption$welfare,
weight = md_GHI_2000_consumption$weight,
mean = predicted_request_means[1]
)
dist_stats1 <- gd_compute_dist_stats(
welfare = gd_GHI_2009_income$welfare,
population = gd_GHI_2009_income$weight,
mean = predicted_request_means[2]
)
median_ppp0 <- dist_stats0$median / (dist_stats0$mean / predicted_request_means[1])
median_ppp1 <- dist_stats1$median / (dist_stats1$mean / predicted_request_means[2])
res <- prod_fg_compute_pip_stats(
request_year = 2005,
survey_year = c(2000, 2009),
data = list(df0 = md_GHI_2000_consumption, df1 = gd_GHI_2009_income),
predicted_request_mean = predicted_request_means,
default_ppp = c(1, 1),
distribution_type = c("micro", "group"),
poverty_line = 1.9,
svy_mean_lcu = c(7769.661, 9000),
svy_median_lcu = c(dist_stats0$median, dist_stats1$median),
svy_median_ppp = c(median_ppp0, median_ppp1),
ppp = NULL,
popshare = NULL
)
expect_equal(res$poverty_line, 1.9)
expect_equal(res$mean, 5.111111, tolerance = 1.5e-7)
expect_identical(res$median, NA_real_)
expect_equal(res$headcount, 0.1480512, tolerance = 1.5e-7)
expect_equal(res$poverty_gap, 0.03320061, tolerance = 1.5e-7)
expect_equal(res$poverty_severity, 0.010884384, tolerance = 1.5e-7)
expect_equal(res$watts, 0.04089535, tolerance = 1.5e-7)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.