For use with output from ModelMatrix
or data frames derived from such output.
It is a generic function which means that methods for other input objects can be added.
Usage
# Default S3 method
FormulaSelection(x, formula, intercept = NA, logical = FALSE)
FormulaSelection(x, formula, intercept = NA, logical = FALSE)
formula_selection(x, formula, intercept = NA, logical = FALSE)
Arguments
- x
Model matrix or a data frame
- formula
Formula representing the limitation or character string(s) to be converted to a formula (see details)
- intercept
Parameter that specifies whether a possible intercept term (overall total) should be included in the output. Default is
TRUE
when a formula is input. Otherwise, see details.- logical
When
TRUE
, the logical selection vector is returned.
Details
The selection is based on startCol
or startRow
attribute in input x
.
With formula as character:
~
is included: Input is converted byas.formula
and default intercept isTRUE
.~
is not included: Internally, input data is converted to a formula by adding~
and possibly+
's when the length is>1
. Default intercept isFALSE
unless"1"
or"(Intercept)"
(is changed internally to"1"
) is included.
Examples
z <- SSBtoolsData("sprt_emp_withEU")
z$age[z$age == "Y15-29"] <- "young"
z$age[z$age == "Y30-64"] <- "old"
x <- ModelMatrix(z, formula = ~age * year)
FormulaSelection(x, "age")
#> 18 x 2 sparse Matrix of class "dgCMatrix"
#> old-Total young-Total
#> [1,] . 1
#> [2,] . 1
#> [3,] . 1
#> [4,] 1 .
#> [5,] 1 .
#> [6,] 1 .
#> [7,] . 1
#> [8,] . 1
#> [9,] . 1
#> [10,] 1 .
#> [11,] 1 .
#> [12,] 1 .
#> [13,] . 1
#> [14,] . 1
#> [15,] . 1
#> [16,] 1 .
#> [17,] 1 .
#> [18,] 1 .
FormulaSelection(x, ~year)
#> 18 x 4 sparse Matrix of class "dgCMatrix"
#> Total-Total Total-2014 Total-2015 Total-2016
#> [1,] 1 1 . .
#> [2,] 1 1 . .
#> [3,] 1 1 . .
#> [4,] 1 1 . .
#> [5,] 1 1 . .
#> [6,] 1 1 . .
#> [7,] 1 . 1 .
#> [8,] 1 . 1 .
#> [9,] 1 . 1 .
#> [10,] 1 . 1 .
#> [11,] 1 . 1 .
#> [12,] 1 . 1 .
#> [13,] 1 . . 1
#> [14,] 1 . . 1
#> [15,] 1 . . 1
#> [16,] 1 . . 1
#> [17,] 1 . . 1
#> [18,] 1 . . 1
FormulaSelection(x, ~year:age)
#> 18 x 7 sparse Matrix of class "dgCMatrix"
#> Total-Total old-2014 old-2015 old-2016 young-2014 young-2015 young-2016
#> [1,] 1 . . . 1 . .
#> [2,] 1 . . . 1 . .
#> [3,] 1 . . . 1 . .
#> [4,] 1 1 . . . . .
#> [5,] 1 1 . . . . .
#> [6,] 1 1 . . . . .
#> [7,] 1 . . . . 1 .
#> [8,] 1 . . . . 1 .
#> [9,] 1 . . . . 1 .
#> [10,] 1 . 1 . . . .
#> [11,] 1 . 1 . . . .
#> [12,] 1 . 1 . . . .
#> [13,] 1 . . . . . 1
#> [14,] 1 . . . . . 1
#> [15,] 1 . . . . . 1
#> [16,] 1 . . 1 . . .
#> [17,] 1 . . 1 . . .
#> [18,] 1 . . 1 . . .
# x1, x2, x3, x4 and x4 are identical
x1 <- FormulaSelection(x, ~age)
x2 <- FormulaSelection(x, "~age")
x3 <- FormulaSelection(x, "age", intercept = TRUE)
x4 <- FormulaSelection(x, c("1", "age"))
x5 <- FormulaSelection(x, c("(Intercept)", "age"))
a <- ModelMatrix(z, formula = ~age * geo + year, crossTable = TRUE)
b <- cbind(as.data.frame(a$crossTable),
sum = (t(a$modelMatrix) %*% z$ths_per)[, 1],
max = DummyApply(a$modelMatrix,
z$ths_per, max))
rownames(b) <- NULL
attr(b, "startRow") <- attr(a$modelMatrix, "startCol", exact = TRUE)
FormulaSelection(b, ~geo * age)
#> age geo year sum max
#> 1 Total Total Total 680.8 122.1
#> 2 old Total Total 437.3 122.1
#> 3 young Total Total 243.5 69.1
#> 4 Total Iceland Total 10.6 1.9
#> 5 Total Portugal Total 108.8 25.8
#> 6 Total Spain Total 561.4 122.1
#> 10 old Iceland Total 5.0 1.9
#> 11 old Portugal Total 70.3 25.8
#> 12 old Spain Total 362.0 122.1
#> 13 young Iceland Total 5.6 1.9
#> 14 young Portugal Total 38.5 14.2
#> 15 young Spain Total 199.4 69.1
FormulaSelection(b, "age:geo")
#> age geo year sum max
#> 10 old Iceland Total 5.0 1.9
#> 11 old Portugal Total 70.3 25.8
#> 12 old Spain Total 362.0 122.1
#> 13 young Iceland Total 5.6 1.9
#> 14 young Portugal Total 38.5 14.2
#> 15 young Spain Total 199.4 69.1
FormulaSelection(b, ~year - 1)
#> age geo year sum max
#> 7 Total Total 2014 222.3 120.3
#> 8 Total Total 2015 225.0 119.6
#> 9 Total Total 2016 233.5 122.1
FormulaSelection(b, ~geo:age, logical = TRUE)
#> [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
#> [13] TRUE TRUE TRUE