tests/elementary_symmetric_functions.R

##### several checks for function elementary_symmetric_functions()
##### 2012/09/07, BAEK


##### preliminaries
library("psychotools")
set.seed(1)


##################################################
##### dichotomous items (zero and first order derivatives)
##################################################
di10 <- runif(10, -2.5, 2.5)
di20 <- runif(20, -2.5, 2.5) 
elementary_symmetric_functions(di10)
elementary_symmetric_functions(di20)

## with 10 items, everything is fine 
all.equal(elementary_symmetric_functions(di10, order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di10, order = 1, engine = "C", diff = FALSE)) # R-bin sum vs. C sum
all.equal(elementary_symmetric_functions(di10, order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di10, order = 1, engine = "C", diff = TRUE))  # R-bin sum vs. C diff
all.equal(elementary_symmetric_functions(di10, order = 1, engine = "R", diff = TRUE), elementary_symmetric_functions(di10, order = 1, engine = "C", diff = FALSE))  # R-bin diff vs. C sum
all.equal(elementary_symmetric_functions(di10, order = 1, engine = "R", diff = TRUE), elementary_symmetric_functions(di10, order = 1, engine = "C", diff = TRUE))   # R-bin diff vs. C diff
all.equal(elementary_symmetric_functions(as.list(di10), order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di10, order = 1, engine = "R", diff = FALSE)) # R-poly sum vs. R-bin sum
all.equal(elementary_symmetric_functions(as.list(di10), order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di10, order = 1, engine = "R", diff = TRUE)) # R-poly sum vs. R-bin diff
all.equal(elementary_symmetric_functions(as.list(di10), order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di10, order = 1, engine = "R", diff = FALSE)) # R-poly diff vs. R-bin sum
all.equal(elementary_symmetric_functions(as.list(di10), order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di10, order = 1, engine = "R", diff = TRUE)) # R-poly diff vs. R-bin diff

## with 20 items we get (rounding) errors for difference algorithm :)
all.equal(elementary_symmetric_functions(di20, order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di20, order = 1, engine = "C", diff = FALSE)) # R-bin sum vs. C sum
all.equal(elementary_symmetric_functions(di20, order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di20, order = 1, engine = "C", diff = TRUE))  # R-bin sum vs. C diff
all.equal(elementary_symmetric_functions(di20, order = 1, engine = "R", diff = TRUE), elementary_symmetric_functions(di20, order = 1, engine = "C", diff = FALSE))  # R-bin diff vs. C sum
all.equal(elementary_symmetric_functions(di20, order = 1, engine = "R", diff = TRUE), elementary_symmetric_functions(di20, order = 1, engine = "C", diff = TRUE))   # R-bin diff vs. C diff
all.equal(elementary_symmetric_functions(as.list(di20), order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di20, order = 1, engine = "R", diff = FALSE)) # R-poly sum vs. R-bin sum
all.equal(elementary_symmetric_functions(as.list(di20), order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di20, order = 1, engine = "R", diff = TRUE)) # R-poly sum vs. R-bin diff
all.equal(elementary_symmetric_functions(as.list(di20), order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di20, order = 1, engine = "R", diff = FALSE)) # R-poly diff vs. R-bin sum
all.equal(elementary_symmetric_functions(as.list(di20), order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(di20, order = 1, engine = "R", diff = TRUE)) # R-poly diff vs. R-bin diff

## second order derivatives (only implemented for R-bin sum/diff)
all.equal(elementary_symmetric_functions(di10, order = 2, engine = "R", diff = FALSE), elementary_symmetric_functions(di10, order = 2, engine = "R", diff = TRUE)) # R-bin sum vs. R-bin diff
all.equal(elementary_symmetric_functions(di20, order = 2, engine = "R", diff = FALSE), elementary_symmetric_functions(di10, order = 2, engine = "R", diff = TRUE)) # R-bin sum vs. R-bin diff


##################################################
##### polytomous items (zero and first order derivatives)
##################################################
pi10 <- unname(split(runif(10, -2.5, 2.5), factor(rep(1:5, each = 2))))
pi20 <- unname(split(runif(20, -2.5, 2.5), factor(rep(1:10, each = 2))))
elementary_symmetric_functions(pi10)
elementary_symmetric_functions(pi20)

## with 10 items, everything is fine.
all.equal(elementary_symmetric_functions(pi10, order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(pi10, order = 1, engine = "C", diff = FALSE)) # R-poly sum vs. C sum
all.equal(elementary_symmetric_functions(pi10, order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(pi10, order = 1, engine = "C", diff = TRUE))  # R-poly sum vs. C diff
all.equal(elementary_symmetric_functions(pi10, order = 1, engine = "R", diff = TRUE), elementary_symmetric_functions(pi10, order = 1, engine = "C", diff = FALSE))  # R-poly diff vs. C sum
all.equal(elementary_symmetric_functions(pi10, order = 1, engine = "R", diff = TRUE), elementary_symmetric_functions(pi10, order = 1, engine = "C", diff = TRUE))   # R-poly diff vs. C diff

## with 20 items we get (rounding) errors for difference algorithm :)
all.equal(elementary_symmetric_functions(pi20, order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(pi20, order = 1, engine = "C", diff = FALSE)) # R-poly sum vs. C sum
all.equal(elementary_symmetric_functions(pi20, order = 1, engine = "R", diff = FALSE), elementary_symmetric_functions(pi20, order = 1, engine = "C", diff = TRUE))  # R-poly sum vs. C diff
all.equal(elementary_symmetric_functions(pi20, order = 1, engine = "R", diff = TRUE), elementary_symmetric_functions(pi20, order = 1, engine = "C", diff = FALSE))  # R-poly diff vs. C sum
all.equal(elementary_symmetric_functions(pi20, order = 1, engine = "R", diff = TRUE), elementary_symmetric_functions(pi20, order = 1, engine = "C", diff = TRUE))   # R-poly diff vs. C diff


##################################################
##### check 'check'
##################################################
all.equal(elementary_symmetric_functions(di10, order = 1), elementary_symmetric_functions(as.list(di10), order = 1)) # dichotomous items as list / vector
inherits(try(elementary_symmetric_functions(di10, log = FALSE, engine = "C")), "try-error")                          # input on log scale for dichotmous items not possible (engine C)
inherits(try(elementary_symmetric_functions(pi10, log = FALSE, engine = "R")), "try-error")                          # input on log scale for polytomous items not possible (engine R)
inherits(try(elementary_symmetric_functions(pi10, log = FALSE, engine = "C")), "try-error")                          # input on log scale for polytomous items not possible (engine C)
inherits(try(elementary_symmetric_functions(di10, order = 2, engine = "C")), "try-error")                            # second order derivatives for dichotmous items not possible (engine C)
inherits(try(elementary_symmetric_functions(pi10, order = 2, engine = "R")), "try-error")                          # second order derivatives for polytomous items not possible (engine R)
inherits(try(elementary_symmetric_functions(pi10, order = 2, engine = "C")), "try-error")                          # second order derivatives for polytomous items not possible (engine C)

Try the psychotools package in your browser

Any scripts or data that you put into this service are public.

psychotools documentation built on July 9, 2023, 6:12 p.m.