Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lorenz pipster object #21

Open
wants to merge 4 commits into
base: consolidate_pipster_object
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 47 additions & 24 deletions R/pipgd_pov.R
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@ pipgd_pov_headcount_nv <-
check_pipgd_params(pl)
po <- is_valid_inputs_pov(pl)

# Preserve the original lorenz if pipster_object exists and lorenz is not provided
original_lorenz <- if (is.null(lorenz) && !is.null(pipster_object) && !is.null(pipster_object$args$lorenz)) {
pipster_object$args$lorenz
} else {
lorenz
}

# __________________________________________________________________________
# params--------------------------------------------------------------------
if (po) {
Expand All @@ -40,18 +47,20 @@ pipgd_pov_headcount_nv <-
mean = mean,
times_mean = times_mean,
povshare = povshare,
lorenz = lorenz,
lorenz = original_lorenz,
povline = povline)
params <- pipster_object$params
}

# Lorenz----------------------------------------------------------------------
#_____________________________________________________________________________
if (is.null(lorenz)) {
lorenz <- params$selected_lorenz$for_pov
} else {
match.arg(lorenz, c("lq", "lb"))
}

lorenz <- choose_lorenz_for_pov(pipster_object,
params,
lorenz)

# Headcount ------------------------------------------------------------------
# ____________________________________________________________________________

headcount <- params$gd_params[[lorenz]]$validity$headcount

Expand Down Expand Up @@ -210,11 +219,10 @@ pipgd_pov_gap_nv <- function(pipster_object = NULL,

# Lorenz----------------------------------------------------------------------
#_____________________________________________________________________________
if (is.null(lorenz)) {
lorenz <- params$selected_lorenz$for_pov
} else {
match.arg(lorenz, c("lq", "lb"))
}

lorenz <- choose_lorenz_for_pov(pipster_object,
params,
lorenz)

# povline---------------------------------------------------------------------
#_____________________________________________________________________________
Expand Down Expand Up @@ -405,13 +413,12 @@ pipgd_pov_severity_nv <- function(

check_pipgd_params(pl)

# __________________________________________________________________________
# Lorenz -------------------------------------------------------------------
if (is.null(lorenz)) {
lorenz <- params$selected_lorenz$for_pov
} else {
match.arg(lorenz, c("lq", "lb"))
}
# Lorenz----------------------------------------------------------------------
#_____________________________________________________________________________

lorenz <- choose_lorenz_for_pov(pipster_object,
params,
lorenz)

# povline-------------------------------------------------------------------
#___________________________________________________________________________
Expand Down Expand Up @@ -640,11 +647,10 @@ pipgd_watts_nv <- function(

# Lorenz----------------------------------------------------------------------
#_____________________________________________________________________________
if (is.null(lorenz)) {
lorenz <- params$selected_lorenz$for_pov
} else {
match.arg(lorenz, c("lq", "lb"))
}

lorenz <- choose_lorenz_for_pov(pipster_object,
params,
lorenz)

# povline---------------------------------------------------------------------
#_____________________________________________________________________________
Expand Down Expand Up @@ -797,7 +803,7 @@ pipgd_watts <- function(
}



# WRAPPERS -------

#' Validate group data parameters
#'
Expand Down Expand Up @@ -891,6 +897,23 @@ is_valid_inputs_pov <- function(pl) {
}
}

choose_lorenz_for_pov <- function(pipster_object = NULL,
params = NULL,
lorenz = NULL) {
if (!is.null(lorenz)) {
chosen_lorenz <- match.arg(lorenz, c("lq", "lb"))
} else {
# If lorenz is specified in pipster_object and not overridden by the function call, use it
if (!is.null(pipster_object$args$lorenz)) {
chosen_lorenz <- pipster_object$args$lorenz
} else {
# Use the selected lorenz if not specified in the function call or pipster_object
chosen_lorenz <- params$selected_lorenz$for_pov
}
}

return(chosen_lorenz)
}



167 changes: 165 additions & 2 deletions tests/testthat/test-pipgd_pov.R
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,6 @@ test_that("pipgd_pov_headcount works as expected", {
lorenz = "lq")$headcount))
})

# Test poverty gap functions ####
# Test pipgd_pov_gap_nv (non vectorized function)

#_______________________________________________________________________________
# POV GAP ----------------------------------------------------------------------
Expand Down Expand Up @@ -1246,3 +1244,168 @@ test_that("validate_params is equiv for all input types", {
})


#_______________________________________________________________________________
# LORENZ CHECKS -----------------------------------------------------------------
#_______________________________________________________________________________
# Set-up

pipster_object_with_lq <- create_pipster_object(welfare = pip_gd$L,
weight = pip_gd$P,
lorenz = 'lq')

pipster_object_with_lb <- create_pipster_object(welfare = pip_gd$L,
weight = pip_gd$P,
lorenz = 'lb')

pipster_object_without <- create_pipster_object(welfare = pip_gd$L,
weight = pip_gd$P)

# Tests
## pipgd_headcount
test_that("pipgd_headcount uses right lorenz", {

# unspecified
without <- pipgd_pov_headcount(pipster_object_without)
expect_equal(without$lorenz,
pipster_object_without$params$selected_lorenz$for_pov)

with_lb <- pipgd_pov_headcount(pipster_object_with_lb)
expect_equal(with_lb$lorenz,
pipster_object_with_lb$args$lorenz)

with_lq <- pipgd_pov_headcount(pipster_object_with_lq)
expect_equal(with_lq$lorenz,
pipster_object_with_lq$args$lorenz)

# specified lb
without <- pipgd_pov_headcount(pipster_object_without, lorenz = 'lb')
expect_equal(without$lorenz, "lb")

with_lb <- pipgd_pov_headcount(pipster_object_with_lb, lorenz = 'lb')
expect_equal(with_lb$lorenz, "lb")

with_lq <- pipgd_pov_headcount(pipster_object_with_lq, lorenz = 'lb')
expect_equal(with_lq$lorenz, 'lb')

# specified lq
without <- pipgd_pov_headcount(pipster_object_without, lorenz = 'lq')
expect_equal(without$lorenz, "lq")

with_lb <- pipgd_pov_headcount(pipster_object_with_lb, lorenz = 'lq')
expect_equal(with_lb$lorenz, "lq")

with_lq <- pipgd_pov_headcount(pipster_object_with_lq, lorenz = 'lq')
expect_equal(with_lq$lorenz, 'lq')

})

## pipgd_pov_gap

test_that("pipgd_pov_gap uses right lorenz", {

# unspecified
without <- pipgd_pov_gap(pipster_object_without)
expect_equal(without$lorenz,
pipster_object_without$params$selected_lorenz$for_pov)

with_lb <- pipgd_pov_gap(pipster_object_with_lb)
expect_equal(with_lb$lorenz,
pipster_object_with_lb$args$lorenz)

with_lq <- pipgd_pov_gap(pipster_object_with_lq)
expect_equal(with_lq$lorenz,
pipster_object_with_lq$args$lorenz)

# specified lb
without <- pipgd_pov_gap(pipster_object_without, lorenz = 'lb')
expect_equal(without$lorenz, "lb")

with_lb <- pipgd_pov_gap(pipster_object_with_lb, lorenz = 'lb')
expect_equal(with_lb$lorenz, "lb")

with_lq <- pipgd_pov_gap(pipster_object_with_lq, lorenz = 'lb')
expect_equal(with_lq$lorenz, 'lb')

# specified lq
without <- pipgd_pov_gap(pipster_object_without, lorenz = 'lq')
expect_equal(without$lorenz, "lq")

with_lb <- pipgd_pov_gap(pipster_object_with_lb, lorenz = 'lq')
expect_equal(with_lb$lorenz, "lq")

with_lq <- pipgd_pov_gap(pipster_object_with_lq, lorenz = 'lq')
expect_equal(with_lq$lorenz, 'lq')

})

## pipgd_pov_severity
test_that("pipgd_severity uses right lorenz", {

# unspecified lorenz
without <- pipgd_pov_severity(pipster_object_without)
expect_equal(without$lorenz, pipster_object_without$params$selected_lorenz$for_pov)

with_lb <- pipgd_pov_severity(pipster_object_with_lb)
expect_equal(with_lb$lorenz, pipster_object_with_lb$args$lorenz)

with_lq <- pipgd_pov_severity(pipster_object_with_lq)
expect_equal(with_lq$lorenz, pipster_object_with_lq$args$lorenz)

# specified lorenz as 'lb'
without <- pipgd_pov_severity(pipster_object_without, lorenz = 'lb')
expect_equal(without$lorenz, "lb")

with_lb <- pipgd_pov_severity(pipster_object_with_lb, lorenz = 'lb')
expect_equal(with_lb$lorenz, "lb")

with_lq <- pipgd_pov_severity(pipster_object_with_lq, lorenz = 'lb')
expect_equal(with_lq$lorenz, 'lb')

# specified lorenz as 'lq'
without <- pipgd_pov_severity(pipster_object_without, lorenz = 'lq')
expect_equal(without$lorenz, "lq")

with_lb <- pipgd_pov_severity(pipster_object_with_lb, lorenz = 'lq')
expect_equal(with_lb$lorenz, "lq")

with_lq <- pipgd_pov_severity(pipster_object_with_lq, lorenz = 'lq')
expect_equal(with_lq$lorenz, 'lq')

})


## pipgd_watts
test_that("pipgd_watts uses right lorenz", {

# unspecified lorenz
without <- pipgd_watts(pipster_object_without)
expect_equal(without$lorenz, pipster_object_without$params$selected_lorenz$for_pov)

with_lb <- pipgd_watts(pipster_object_with_lb)
expect_equal(with_lb$lorenz, pipster_object_with_lb$args$lorenz)

with_lq <- pipgd_watts(pipster_object_with_lq)
expect_equal(with_lq$lorenz, pipster_object_with_lq$args$lorenz)

# specified lorenz as 'lb'
without <- pipgd_watts(pipster_object_without, lorenz = 'lb')
expect_equal(without$lorenz, "lb")

with_lb <- pipgd_watts(pipster_object_with_lb, lorenz = 'lb')
expect_equal(with_lb$lorenz, "lb")

with_lq <- pipgd_watts(pipster_object_with_lq, lorenz = 'lb')
expect_equal(with_lq$lorenz, 'lb')

# specified lorenz as 'lq'
without <- pipgd_watts(pipster_object_without, lorenz = 'lq')
expect_equal(without$lorenz, "lq")

with_lb <- pipgd_watts(pipster_object_with_lb, lorenz = 'lq')
expect_equal(with_lb$lorenz, "lq")

with_lq <- pipgd_watts(pipster_object_with_lq, lorenz = 'lq')
expect_equal(with_lq$lorenz, 'lq')

})