Looking at how changes in noise and bias parameters affect model-fitting

library(grt)
## Loading required package: MASS
## 
## Attaching package: 'grt'
## The following object is masked from 'package:base':
## 
##     scale
#x <- (function(...)get(data(...,envir = new.env())))("subdemo.cj")
m <- list(c(100,200),c(100,100),c(200,100),c(200,200))
covs <- diag(30^2, ncol=2, nrow=2)
set.seed(1)
CJ <- grtrnorm(n=c(50,20,10,20), np=4, means=m, covs=covs)
CJ$category <- c(1,2,2,2)[CJ$category]
#create ramdom responses with 80% accuracy
CJ$response <- CJ$category
set.seed(1)
incorrect <- sample(1:100, size=20)
CJ$response[incorrect] <- abs(CJ$response[incorrect] - 3)

Change noise values, equal.noise = TRUE

When equal.noise is set to TRUE, the first value of the noise parameter determines the noise value for both decision bounds, the second noise parameter value is ignored

noise first value FALSE

#these specification gave the same AIC and plot
# 3 df AIC = 126.67
m.cj <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, TRUE),bias=c(FALSE,FALSE)))
plot(m.cj, main = "equal.noise=TRUE,noise=c(FALSE, TRUE),bias=c(FALSE,FALSE)", font.main = 1)

m.cj3 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed=list(noise=c(FALSE, FALSE),bias=c(FALSE,FALSE)))
plot(m.cj3, main = "equal.noise=TRUE,noise=c(FALSE, FALSE),bias=c(FALSE,FALSE)", font.main = 1)

noise first value TRUE

#these specification gave the same AIC and plot
# 2 df AIC = 671.94
m.cj1 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed=list(noise=c(TRUE, FALSE),bias=c(FALSE,FALSE)))
plot(m.cj1, main = "equal.noise=TRUE,noise=c(TRUE, FALSE),bias=c(FALSE,FALSE)", font.main = 1)

m.cj2 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed=list(noise=c(TRUE, TRUE),bias=c(FALSE,FALSE)))
plot(m.cj2, main = "equal.noise=TRUE,noise=c(TRUE, TRUE),bias=c(FALSE,FALSE)", font.main = 1)

Change bias values

When noise first value is FALSE

# 1 df AIC = 165.97
m.cj4 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, TRUE),bias=c(TRUE,TRUE)))
plot(m.cj4, main = "equal.noise=TRUE,noise=c(FALSE, TRUE),bias=c(TRUE,TRUE)", font.main = 1)

# 2 df AIC = 124.60
# vertical decision bound doesn't show up
m.cj5 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, TRUE),bias=c(FALSE,TRUE)))
plot(m.cj5, main = "equal.noise=TRUE,noise=c(FALSE, TRUE),bias=c(FALSE,TRUE)", font.main = 1)

# 2 DF AIC = 134.48
m.cj24 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, TRUE),bias=c(TRUE, FALSE)))
plot(m.cj24, main = "equal.noise=TRUE,noise=c(FALSE, TRUE),bias=c(TRUE, FALSE)", font.main = 1)

# 3 df AIC = 126.67
m.cj6 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, TRUE),bias=c(FALSE,FALSE)))
plot(m.cj6, main = "equal.noise=TRUE,noise=c(FALSE, TRUE),bias=c(FALSE,FALSE)", font.main = 1)

when noise first value is TRUE

# 1 df AIC = 165.97

# m.cj7 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, FALSE),bias=c(TRUE,TRUE)))

#Error in lims[1, ] : incorrect number of dimensions
# 1 df AIC = 749.35
m.cj8 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, FALSE),bias=c(FALSE,TRUE)))
plot(m.cj8, main = "equal.noise=TRUE,noise=c(TRUE, FALSE),bias=c(FALSE,TRUE)", font.main = 1)

# 1 DF, AIC 685.80
m.cj25 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, FALSE),bias=c(TRUE, FALSE)))
plot(m.cj25, main = "equal.noise=TRUE,noise=c(TRUE, FALSE),bias=c(TRUE, FALSE)", font.main = 1)

# 2 df AIC = 671.94
m.cj9 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, FALSE),bias=c(FALSE,FALSE)))
plot(m.cj9, main = "equal.noise=TRUE,noise=c(TRUE, FALSE),bias=c(FALSE,FALSE)", font.main = 1)

equal.noise = FALSE

noise first value is FALSE

change bias value when noise = c(FALSE, TRUE)

# 3 df AIC = 131.45
m.cj10 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, TRUE),bias=c(FALSE,FALSE)), equal.noise = FALSE)
plot(m.cj10, main = "equal.noise=FALSE,noise=c(FALSE, TRUE),bias=c(FALSE,FALSE)", font.main = 1)

# df 2 AIC = 514.06
m.cj11 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, TRUE),bias=c(FALSE,TRUE)), equal.noise = FALSE)
plot(m.cj11, main = "equal.noise=FALSE,noise=c(FALSE, TRUE),bias=c(FALSE,TRUE)", font.main = 1)

# 2 DF AIC = 131.43
m.cj20 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, TRUE),bias=c(TRUE, FALSE)), equal.noise = FALSE)
plot(m.cj20, main = "equal.noise=FALSE,noise=c(FALSE, TRUE),bias=c(TRUE, FALSE)", font.main = 1)

# 1 df AIC = 529.02
m.cj12 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, TRUE),bias=c(TRUE,TRUE)), equal.noise = FALSE)
plot(m.cj12, main = "equal.noise=FALSE,noise=c(FALSE, TRUE),bias=c(TRUE, TRUE)", font.main = 1)

### change bias value when noise = c(FALSE, FALSE)

# 4 df AIC = 128.67
m.cj13 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, FALSE),bias=c(FALSE,FALSE)), equal.noise = FALSE)
plot(m.cj13, main = "equal.noise=FALSE,noise=c(FALSE, FALSE),bias=c(FALSE,FALSE)", font.main = 1)

# 3 df AIC = 134.88
m.cj14 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, FALSE),bias=c(FALSE,TRUE)), equal.noise = FALSE)
plot(m.cj14, main = "equal.noise=FALSE,noise=c(FALSE, FALSE),bias=c(FALSE,TRUE)", font.main = 1)

# 3 DF AIC = 132.94
m.cj21 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, FALSE),bias=c(TRUE, FALSE)), equal.noise = FALSE)
plot(m.cj21, main = "equal.noise=FALSE,noise=c(FALSE, FALSE),bias=c(TRUE, FALSE)", font.main = 1)

# 2 df AIC = 167.97
m.cj15 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(FALSE, FALSE),bias=c(TRUE, TRUE)), equal.noise = FALSE)
plot(m.cj15, main = "equal.noise=FALSE,noise=c(FALSE, FALSE),bias=c(TRUE, TRUE)", font.main = 1)

noise first value is TRUE

change bias value when noise = c(TRUE, FALSE)

# 3 df AIC = 137.21
m.cj16 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, FALSE),bias=c(FALSE,FALSE)), equal.noise = FALSE)
plot(m.cj16, main = "equal.noise=FALSE,noise=c(TRUE, FALSE),bias=c(FALSE,FALSE)", font.main = 1)

# 2 DF AIC = 135.91
m.cj17 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, FALSE),bias=c(FALSE,TRUE)), equal.noise = FALSE)
plot(m.cj17, main = "equal.noise=FALSE,noise=c(TRUE, FALSE),bias=c(FALSE,TRUE)", font.main = 1)

# 2 DF AIC = 495.40
m.cj18 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, FALSE),bias=c(TRUE, FALSE)), equal.noise = FALSE)
plot(m.cj18, main = "equal.noise=FALSE,noise=c(TRUE, FALSE),bias=c(TRUE,FALSE)", font.main = 1)

# 1 DF AIC = 514.99
m.cj19 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, FALSE),bias=c(TRUE, TRUE)), equal.noise = FALSE)
plot(m.cj19, main = "equal.noise=FALSE,noise=c(TRUE, FALSE),bias=c(TRUE, TRUE)", font.main = 1)

### change bias value when noise = c(TRUE, FALSE)

# 2 df AIC = 671.94
m.cj13 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, TRUE),bias=c(FALSE,FALSE)), equal.noise = FALSE)
plot(m.cj13, main = "equal.noise=FALSE,noise=c(TRUE, TRUE),bias=c(FALSE,FALSE)", font.main = 1)

# 1 DF, AIC 749.35
m.cj22 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, TRUE),bias=c(FALSE,TRUE)), equal.noise = FALSE)
plot(m.cj22, main = "equal.noise=FALSE,noise=c(TRUE, TRUE),bias=c(FALSE,TRUE)", font.main = 1)

# 1 DF, AIC = 685.80
m.cj23 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, TRUE),bias=c(TRUE, FALSE)), equal.noise = FALSE)
plot(m.cj23, main = "equal.noise=FALSE,noise=c(TRUE, TRUE),bias=c(TRUE, FALSE)", font.main = 1)

# m.cj13 <- gcjc(response ~ x1 + x2, data=CJ, config=2, category=CJ$category, zlimit=7, fixed = list(noise=c(TRUE, TRUE),bias=c(TRUE, TRUE)), equal.noise = FALSE)

#ERROR

Conclusions:

  1. When equal.noise = TRUE, only the first noise parameter determine whether noise is fixed or not. The second parameter will be ignored.

  2. When both bias parameters are TRUE, different combinations of noise parameters all have the same results.

  3. Noises only play a role when bias parameter is not TRUE. The TRUE bias parameter all have the boundary in the same position.