Examples of discrete patterns

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

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.

Perfect functional patterns

A significant perfect functional pattern:

require(FunChisq)
f1 <- matrix(c(5,0,0,0,0,7,0,4,0), nrow=3)
f1
plot_table(f1, ylab="X (row)", xlab="Y (column)", 
           main="f1: significant perfect function")
fun.chisq.test(f1)

An significant perfect many-to-one functional pattern:

f2 <- matrix(c(7,0,3,0,6,0), nrow=3)
f2
plot_table(f2, col="salmon", ylab="X (row)", xlab="Y (column)",
           main="f2: sigificant perfect\nmany-to-one function")
fun.chisq.test(f2)

An insignificant perfect functional pattern:

f3 <- matrix(c(5,10,0,0,0,1), nrow=3)
f3
plot_table(f3, col="deepskyblue4", ylab="X (row)", xlab="Y (column)",
           main="f3: insigificant perfect function")
fun.chisq.test(f3)

A perfect constant functional pattern:

f4 <- matrix(c(5,4,7,0,0,0,0,0,0), nrow=3)
f4
plot_table(f4, col="brown", ylab="X (row)", xlab="Y (column)",
           main="f4: insignificant\nperfect constant function")
fun.chisq.test(f4)

Imperfect patterns

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 $\xi_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 $\xi_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
plot_table(p1, ylab="X (row)", xlab="Y (column)", 
           main="p1: significant function pattern")
fun.chisq.test(p1)
p2=matrix(c(5,1,1,1,5,0,5,1,1), nrow=3)
p2
plot_table(p2, col="red3", ylab="X (row)", xlab="Y (column)",
           main="p2: insignificant\nfunction pattern")
fun.chisq.test(p2)
p3=matrix(c(5,1,1,1,5,0,9,1,1), nrow=3)
p3
plot_table(p3, col="orange", ylab="X (row)", xlab="Y (column)",
           main="p3: significant function pattern")
fun.chisq.test(p3)
p4=p1*sum(p3)/sum(p1)
p4
plot_table(p4, col="purple", ylab="X (row)", xlab="Y (column)",
           main="p4: significant function pattern")
fun.chisq.test(p4)


Try the FunChisq package in your browser

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

FunChisq documentation built on May 31, 2023, 8:18 p.m.