We showcase applications of the functinal chi-square (FunChisq) test on several types of discrete patterns. Here we use the row to represent independent variable X and column for the dependent variable Y. The FunChisq test statistically determines whether Y is a function of X.
A pattern represents a perfect function if and only if function index is 1; otherwise, the pattern represents an imperfect function. A function pattern is statistically significant if the p-value from the FunChisq test is less than or equal to 0.05.
A significant perfect functional pattern:
require(FunChisq)
f1 <- matrix(c(5,0,0,0,0,7,0,4,0), nrow=3)
f1
#> [,1] [,2] [,3]
#> [1,] 5 0 0
#> [2,] 0 0 4
#> [3,] 0 7 0
plot_table(f1, ylab="X (row)", xlab="Y (column)",
main="f1: significant perfect function")
fun.chisq.test(f1)
#>
#> Functional chi-squared test
#>
#> data: f1
#> statistic = 31.125, parameter = 4, p-value = 2.887e-06
#> sample estimates:
#> non-constant function index xi.f
#> 1
An significant perfect many-to-one functional pattern:
f2 <- matrix(c(7,0,3,0,6,0), nrow=3)
f2
#> [,1] [,2]
#> [1,] 7 0
#> [2,] 0 6
#> [3,] 3 0
plot_table(f2, col="salmon", ylab="X (row)", xlab="Y (column)",
main="f2: sigificant perfect\nmany-to-one function")
fun.chisq.test(f2)
#>
#> Functional chi-squared test
#>
#> data: f2
#> statistic = 15, parameter = 2, p-value = 0.0005531
#> sample estimates:
#> non-constant function index xi.f
#> 1
An insignificant perfect functional pattern:
f3 <- matrix(c(5,10,0,0,0,1), nrow=3)
f3
#> [,1] [,2]
#> [1,] 5 0
#> [2,] 10 0
#> [3,] 0 1
plot_table(f3, col="deepskyblue4", ylab="X (row)", xlab="Y (column)",
main="f3: insigificant perfect function")
fun.chisq.test(f3)
#>
#> Functional chi-squared test
#>
#> data: f3
#> statistic = 3.75, parameter = 2, p-value = 0.1534
#> sample estimates:
#> non-constant function index xi.f
#> 1
A perfect constant functional pattern:
We contrast four imperfect patterns to illustrate the differences in
FunChisq test results. p1
and p4
represent the
same non-monotonic function pattern in different sample sizes;
p2
is the transpose of p1
, no longer
functional; and p3
is another non-functional pattern. Among
the first three examples, p3
is the most statistically
significant, but p1
has the highest function index ξf. This can be explained by a larger
sample size but a smaller effect in p3
than
p1
. However, when p1
is linearly scaled to
p4
to have exactly the same sample size with
p3
, both the p-value
and the function index ξf favor
p4
over p3
for representing a stronger
function.
p1 <- matrix(c(5,1,5,1,5,1,1,0,1), nrow=3)
p1
#> [,1] [,2] [,3]
#> [1,] 5 1 1
#> [2,] 1 5 0
#> [3,] 5 1 1
plot_table(p1, ylab="X (row)", xlab="Y (column)",
main="p1: significant function pattern")
fun.chisq.test(p1)
#>
#> Functional chi-squared test
#>
#> data: p1
#> statistic = 10.043, parameter = 4, p-value = 0.03971
#> sample estimates:
#> non-constant function index xi.f
#> 0.544288
p2=matrix(c(5,1,1,1,5,0,5,1,1), nrow=3)
p2
#> [,1] [,2] [,3]
#> [1,] 5 1 5
#> [2,] 1 5 1
#> [3,] 1 0 1
plot_table(p2, col="red3", ylab="X (row)", xlab="Y (column)",
main="p2: insignificant\nfunction pattern")
fun.chisq.test(p2)
#>
#> Functional chi-squared test
#>
#> data: p2
#> statistic = 8.3805, parameter = 4, p-value = 0.07859
#> sample estimates:
#> non-constant function index xi.f
#> 0.4582991
p3=matrix(c(5,1,1,1,5,0,9,1,1), nrow=3)
p3
#> [,1] [,2] [,3]
#> [1,] 5 1 9
#> [2,] 1 5 1
#> [3,] 1 0 1
plot_table(p3, col="orange", ylab="X (row)", xlab="Y (column)",
main="p3: significant function pattern")
fun.chisq.test(p3)
#>
#> Functional chi-squared test
#>
#> data: p3
#> statistic = 10.221, parameter = 4, p-value = 0.03686
#> sample estimates:
#> non-constant function index xi.f
#> 0.4701105