tests/testthat/test-cdf_construction.R

context("Construction of cdf")

test_that("Clayton cdf is constructed correctly", {
  cc1 <- claycop(par = 5, dim = 2)
  expect_equal(as.character(cc1$distribution$cdf),
    "(1 + (u1^(-theta) - 1 + u2^(-theta) - 1))^(-1/theta)")
})

test_that("Frank cdf is constructed correctly", {
  fc1 <- frankcop(par = 5, dim = 2)
  expect_equal(as.character(fc1$distribution$cdf),
    "-1/theta * log(1 + exp(-(-log((exp(-theta * u1) - 1)/(exp(-theta) - 1)) + -log((exp(-theta * u2) - 1)/(exp(-theta) - 1)))) * (exp(-theta) - 1))")
})

test_that("Independence cdf is constructed correctly", {
  ic1 <- indcop(dim = 2)
  expect_equal(as.character(ic1$distribution$cdf),
    "u1 * u2")
})

test_that("Clayton cdf adheres to necessary properties", {
  cc2 <- claycop(par = 5, dim = 2)
  cdf <- pcop(cc2, u = c(0.5, 0.5))
  expect_equal(round(cdf, 4), 0.4366)

  cc3 <- claycop(par = 5, dim = 2)
  cdf <- pcop(cc3, u = c(0.5, 0))
  expect_equal(cdf, 0)

  cc4 <- claycop(par = 5, dim = 2)
  cdf <- pcop(cc4, u = c(0, 0.5))
  expect_equal(cdf, 0)

  cc5 <- claycop(par = 5, dim = 2)
  cdf <- pcop(cc5, u = c(0.5, 1))
  expect_equal(cdf, 0.5)

  cc6 <- claycop(par = 5, dim = 2)
  cdf <- pcop(cc6, u = c(1, 0.5))
  expect_equal(cdf, 0.5)

  cc7 <- claycop(par = 5, dim = 2)
  cdf <- pcop(cc7, u = c(1, 1))
  expect_equal(cdf, 1)
})

test_that("Frank cdf adheres to necessary properties", {
  fc2 <- frankcop(par = 5, dim = 2)
  cdf <- pcop(fc2, u = c(0.5, 0.5))
  expect_equal(round(cdf, 4), 0.3771)

  fc3 <- frankcop(par = 5, dim = 2)
  cdf <- pcop(fc3, u = c(0.5, 0))
  expect_equal(cdf, 0)

  fc4 <- frankcop(par = 5, dim = 2)
  cdf <- pcop(fc4, u = c(0, 0.5))
  expect_equal(cdf, 0)

  fc5 <- frankcop(par = 5, dim = 2)
  cdf <- pcop(fc5, u = c(0.5, 1))
  expect_equal(cdf, 0.5)

  fc6 <- frankcop(par = 5, dim = 2)
  cdf <- pcop(fc6, u = c(1, 0.5))
  expect_equal(cdf, 0.5)

  fc7 <- claycop(par = 5, dim = 2)
  cdf <- pcop(fc7, u = c(1, 1))
  expect_equal(cdf, 1)
})

test_that("Independence cdf adheres to necessary properties", {
  ic2 <- indcop(dim = 2)
  cdf <- pcop(ic2, u = c(0.5, 0.5))
  expect_equal(round(cdf, 2), 0.25)

  ic3 <- indcop(dim = 2)
  cdf <- pcop(ic3, u = c(0.5, 0))
  expect_equal(cdf, 0)

  ic4 <- indcop(dim = 2)
  cdf <- pcop(ic4, u = c(0, 0.5))
  expect_equal(cdf, 0)

  ic5 <- indcop(dim = 2)
  cdf <- pcop(ic5, u = c(0.5, 1))
  expect_equal(cdf, 0.5)

  ic6 <- indcop(dim = 2)
  cdf <- pcop(ic6, u = c(1, 0.5))
  expect_equal(cdf, 0.5)

  ic7 <- indcop(dim = 2)
  cdf <- pcop(ic7, u = c(1, 1))
  expect_equal(cdf, 1)
})

test_that("Invalid u causes appropriate error", {
  cc8 <- claycop(dim = 2, par = 5)
  expect_error(cdf <- pcop(cc8, u = c(0.5, 0.5, 0.5)), "dimension")
  expect_error(cdf <- pcop(cc8, u = c(0.5)), "dimension")
  expect_error(cdf <- pcop(cc8, u = c(0.5, NA)), "missing")

  fc8 <- frankcop(dim = 2, par = 5)
  expect_error(cdf <- pcop(cc8, u = c(0.5, 0.5, 0.5)), "dimension")
  expect_error(cdf <- pcop(cc8, u = c(0.5)), "dimension")
  expect_error(cdf <- pcop(cc8, u = c(0.5, NA)), "missing")

  ic8 <- indcop(dim = 2)
  expect_error(cdf <- pcop(cc8, u = c(0.5, 0.5, 0.5)), "dimension")
  expect_error(cdf <- pcop(cc8, u = c(0.5)), "dimension")
  expect_error(cdf <- pcop(cc8, u = c(0.5, NA)), "missing")
})
AlexanderRitz/copR documentation built on Oct. 30, 2019, 4:11 a.m.