4  第4章

第4章では3元表の条件付き連関モデルを扱っている.

library(tidyverse)
library(magrittr)
library(gnm)
library(broom)
library(knitr)
library(logmult)

モデル適合度を表示するための関数を準備する.すべてgnmによって推定を行う.

# 引数となるobjはgnmの結果
model.summary <- function(obj, Model = NULL){
  if (sum(class(obj) == "gnm") != 1)
    stop("estimate with gnm")
  aic <- obj$deviance - obj$df * 2 # AIC(L2)
  bic <- obj$deviance - obj$df * log(sum(obj$y)) #BIC(L2)
  delta <- 100 * sum(abs(obj$y - obj$fitted.values)) / (2 * sum(obj$y))
  p <- pchisq(obj$deviance, obj$df, lower.tail = FALSE)     #p<-ifelse(p<0.001,"<0.001",p)
  result <- matrix(0, 1, 7)
  if (is.null(Model)){ 
  Model <- deparse(substitute(obj))
  }
  result <- tibble(
    "Model Description" = Model,
    "df" = obj$df,
    "L2" = obj$deviance,
    #"AIC(L2)" = aic,
    "BIC" = bic,
    "Delta" = delta,
    "p" = p
  )
  return(result)
}

4.1 表4.3

# Table 4.3
Freq <- c(201,  29,   8,  13,   5,     152,  29,   2,   8,   0,
           18,   6,   3,   6,   0,      17,  12,   0,   3,   0,
          109,  74, 164,  89,  16,     101, 336,   9, 134,   2,
            7,   6,  45,  30,   6,       7,  41,   7,  63,   0,
          247,  58,  20,  23,   2,     288,  51,   1,  17,   3,
           48,  11,  16,  13,   1,      47,  38,   2,  18,   0,
          157,  68, 178, 116,  27,     165, 321,  27, 168,   1,
            7,   7,  50,  42,   5,      12,  25,   5,  29,   6)

Educ <- gl(4, 10, 4 * 5 * 2 * 2)
Occ <- gl(5, 1, 4 * 5 * 2 * 2)
Sex <- gl(2, 5, 4 * 5 * 2 * 2)
Year <- gl(2, 40, 4 * 5 * 2 * 2)
L <- Year:Sex
levels(L) <- factor(1:4)

Rscore <- as.numeric(Educ)
Cscore <- as.numeric(Occ)

freq_tab_3.1 <- tibble(Freq, Educ, Occ, Sex, Year, L, Rscore, Cscore) 
freq_tab_3.1
# A tibble: 80 × 8
    Freq Educ  Occ   Sex   Year  L     Rscore Cscore
   <dbl> <fct> <fct> <fct> <fct> <fct>  <dbl>  <dbl>
 1   201 1     1     1     1     1          1      1
 2    29 1     2     1     1     1          1      2
 3     8 1     3     1     1     1          1      3
 4    13 1     4     1     1     1          1      4
 5     5 1     5     1     1     1          1      5
 6   152 1     1     2     1     2          1      1
 7    29 1     2     2     1     2          1      2
 8     2 1     3     2     1     2          1      3
 9     8 1     4     2     1     2          1      4
10     0 1     5     2     1     2          1      5
# ℹ 70 more rows
# Model 1 - RC(0)-L(homogeneous)
model1 <- freq_tab_3.1 |> 
  gnm(
    Freq ~ Educ + Occ + L + Educ:L + Occ:L,
    family = poisson,
    data = _,
    trace = F,
    tolerance = 1e-12
  )
summary(model1)

Call:
gnm(formula = Freq ~ Educ + Occ + L + Educ:L + Occ:L, family = poisson, 
    data = freq_tab_3.1, tolerance = 1e-12, trace = F)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-9.2080  -2.2181  -0.4393   1.7534  10.3493  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  4.63188    0.07546  61.385  < 2e-16 ***
Educ2       -2.04867    0.18496 -11.076  < 2e-16 ***
Educ3        0.56850    0.07822   7.268 3.65e-13 ***
Educ4       -1.00188    0.12060  -8.307  < 2e-16 ***
Occ2        -1.06920    0.10808  -9.893  < 2e-16 ***
Occ3        -0.42050    0.08678  -4.846 1.26e-06 ***
Occ4        -0.88688    0.10115  -8.768  < 2e-16 ***
Occ5        -2.51829    0.20006 -12.588  < 2e-16 ***
L2          -0.58321    0.11600  -5.028 4.96e-07 ***
L3           0.35568    0.09908   3.590 0.000331 ***
L4           0.38267    0.09802   3.904 9.46e-05 ***
Educ2:L2     0.26213    0.26589   0.986 0.324189    
Educ3:L2     0.54569    0.11433   4.773 1.82e-06 ***
Educ4:L2     0.52029    0.16809   3.095 0.001966 ** 
Educ2:L3     0.67937    0.21978   3.091 0.001994 ** 
Educ3:L3    -0.12382    0.10396  -1.191 0.233635    
Educ4:L3    -0.14652    0.16251  -0.902 0.367276    
Educ2:L4     0.81653    0.21566   3.786 0.000153 ***
Educ3:L4     0.07042    0.10180   0.692 0.489078    
Educ4:L4    -0.54042    0.17410  -3.104 0.001908 ** 
Occ2:L2      1.48066    0.13298  11.135  < 2e-16 ***
Occ3:L2     -2.31314    0.25826  -8.957  < 2e-16 ***
Occ4:L2      0.60040    0.13656   4.397 1.10e-05 ***
Occ5:L2     -2.41258    0.73731  -3.272 0.001067 ** 
Occ2:L3     -0.09004    0.14424  -0.624 0.532465    
Occ3:L3     -0.13260    0.11618  -1.141 0.253725    
Occ4:L3      0.02568    0.13253   0.194 0.846332    
Occ5:L3     -0.05541    0.26603  -0.208 0.835011    
Occ2:L4      0.90622    0.12622   7.179 7.00e-13 ***
Occ3:L4     -2.26247    0.19508 -11.598  < 2e-16 ***
Occ4:L4      0.09529    0.12843   0.742 0.458122    
Occ5:L4     -1.41745    0.37680  -3.762 0.000169 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for poisson family taken to be 1)

Residual deviance: 1370.9 on 48 degrees of freedom
AIC: 1796.7

Number of iterations: 6
model.summary(model1)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta         p
  <chr>               <int> <dbl> <dbl> <dbl>     <dbl>
1 model1                 48 1371.  972.  23.8 1.37e-255
# Model 2 - RC(1)-L(homogeneous)
model2 <- freq_tab_3.1 |> 
  gnm(
  Freq ~ Educ + Occ + L + Educ:L + Occ:L + Mult(1, Educ, Occ),
  family = poisson,
  data = _,
  trace = F,
  tolerance = 1e-12
)
Initialising
Running start-up iterations..
Running main iterations..................................
Done
model.summary(model2)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta        p
  <chr>               <int> <dbl> <dbl> <dbl>    <dbl>
1 model2                 42  144. -205.  6.39 4.54e-13
# Model 3 - RC(1)-L(heterogeneous)
model3 <- freq_tab_3.1 |> 
  gnm(
  Freq ~ Educ + Occ + L + Educ:L + Occ:L + Mult(L, L:Educ, L:Occ),
  family = poisson,
  data = _,
  trace = F,
  tolerance = 1e-12
)
Initialising
Running start-up iterations..
Running main iterations.........................................................
........................
Done
model.summary(model3)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta          p
  <chr>               <int> <dbl> <dbl> <dbl>      <dbl>
1 model3                 24  69.1 -130.  3.04 0.00000303
# Model 4 - RC(2)-L(homogeneous)
model4 <- freq_tab_3.1 |> 
  gnm(
    Freq ~ Educ + Occ + L + Educ:L + Occ:L + instances(Mult(1, Educ, Occ), 2),
    family = poisson,
    data = _, 
    trace = F,
    tolerance = 1e-8
  )
Initialising
Running start-up iterations..
Running main iterations................
Done
model.summary(model4)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta        p
  <chr>               <int> <dbl> <dbl> <dbl>    <dbl>
1 model4                 38  117. -199.  5.24 4.93e-10
# Model 4 - RC(2)-L(heterogeneous)
model5 <- freq_tab_3.1 |> 
  gnm(
    Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
      instances(Mult(L, L:Educ, L:Occ), 2),
    family = poisson,
    data = _,
    trace = F,
    tolerance = 1e-10,
    iterStart = 5,
    iterMax = 1e6,
    verbose = F
  )
model.summary(model5)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model5                  8  5.83 -60.7 0.437 0.666
# Model 6 - RC(3)-L(homogeneous)
model6 <- freq_tab_3.1 |> 
  gnm(
    Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
      instances(Mult(1, Educ, Occ), 3),
    family = poisson,
    data = _,
    trace = F,
    tolerance = 1e-12
  )
Initialising
Running start-up iterations..
Running main iterations........
Done
model.summary(model6)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta        p
  <chr>               <int> <dbl> <dbl> <dbl>    <dbl>
1 model6                 36  113. -186.  5.19 6.60e-10
# Model 7 - RC(3)-L(heterogeneous)
model7 <- freq_tab_3.1 |> 
  gnm(
    Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
      instances(Mult(L, L:Educ, L:Occ), 3),
    family = poisson,
    data = _,
    trace = F,
    tolerance = 1e-12
  )
Initialising
Running start-up iterations..
Running main iterations.........................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
...........................................
Done
Warning in gnmFit(modelTools = modelTools, y = y, constrain = constrain, : Fitting algorithm has either not converged or converged
to a non-solution of the likelihood equations.
Use exitInfo() for numerical details of last iteration.
model.summary(model7)
# A tibble: 1 × 6
  `Model Description`    df       L2      BIC         Delta     p
  <chr>               <int>    <dbl>    <dbl>         <dbl> <dbl>
1 model7                  0 4.32e-11 4.32e-11 0.00000000657     0
# Model 8- U+RC (homogeneous)
model8 <- freq_tab_3.1 |> 
  gnm(
    Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
      Rscore:Cscore + 
      Mult(1, Educ, Occ),
    family = poisson,
    data = _,
    trace = F,
    tolerance = 1e-6,
    iterStart = 20,
    iterMax = 100000
  )
Initialising
Running start-up iterations....................
Running main iterations..............
Done
summary(model8)

Call:
gnm(formula = Freq ~ Educ + Occ + L + Educ:L + Occ:L + Rscore:Cscore + 
    Mult(1, Educ, Occ), family = poisson, data = freq_tab_3.1, 
    tolerance = 1e-06, iterStart = 20, iterMax = 1e+05, trace = F)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-3.09104  -0.98816  -0.05028   0.65984   4.48366  

Coefficients:
                      Estimate Std. Error z value Pr(>|z|)    
(Intercept)            4.39711         NA      NA       NA    
Educ2                 -3.14283         NA      NA       NA    
Educ3                 -2.04278         NA      NA       NA    
Educ4                 -5.76600         NA      NA       NA    
Occ2                  -2.85536         NA      NA       NA    
Occ3                  -4.44772         NA      NA       NA    
Occ4                  -6.38812         NA      NA       NA    
Occ5                  -9.68116         NA      NA       NA    
L2                    -0.45256    0.10138  -4.464 8.04e-06 ***
L3                     0.30784    0.08546   3.602 0.000315 ***
L4                     0.27495    0.08559   3.212 0.001317 ** 
Educ2:L2               0.21438    0.26790   0.800 0.423574    
Educ3:L2               0.60680    0.13272   4.572 4.83e-06 ***
Educ4:L2               0.84863    0.19679   4.312 1.62e-05 ***
Educ2:L3               0.67195    0.22185   3.029 0.002455 ** 
Educ3:L3              -0.13777    0.12302  -1.120 0.262766    
Educ4:L3              -0.17785    0.18557  -0.958 0.337863    
Educ2:L4               0.83889    0.21766   3.854 0.000116 ***
Educ3:L4               0.25621    0.11970   2.140 0.032320 *  
Educ4:L4              -0.10081    0.19889  -0.507 0.612248    
Occ2:L2                1.22119    0.14272   8.557  < 2e-16 ***
Occ3:L2               -2.67793    0.26863  -9.969  < 2e-16 ***
Occ4:L2                0.25078    0.15354   1.633 0.102387    
Occ5:L2               -2.76550    0.74142  -3.730 0.000191 ***
Occ2:L3               -0.02264    0.15282  -0.148 0.882219    
Occ3:L3               -0.01696    0.13679  -0.124 0.901323    
Occ4:L3                0.12779    0.14886   0.858 0.390653    
Occ5:L3                0.04374    0.27494   0.159 0.873605    
Occ2:L4                0.83473    0.13514   6.177 6.54e-10 ***
Occ3:L4               -2.31754    0.20662 -11.217  < 2e-16 ***
Occ4:L4                0.05314    0.14388   0.369 0.711886    
Occ5:L4               -1.43905    0.38269  -3.760 0.000170 ***
Rscore:Cscore          0.80506    0.23183   3.473 0.000515 ***
Mult(., Educ, Occ).    0.69031         NA      NA       NA    
Mult(1, ., Occ).Educ1 -0.58680         NA      NA       NA    
Mult(1, ., Occ).Educ2 -0.05428         NA      NA       NA    
Mult(1, ., Occ).Educ3  0.48246         NA      NA       NA    
Mult(1, ., Occ).Educ4  0.74448         NA      NA       NA    
Mult(1, Educ, .).Occ1 -0.30028         NA      NA       NA    
Mult(1, Educ, .).Occ2  0.07222         NA      NA       NA    
Mult(1, Educ, .).Occ3 -0.20754         NA      NA       NA    
Mult(1, Educ, .).Occ4 -3.36324         NA      NA       NA    
Mult(1, Educ, .).Occ5 -5.98616         NA      NA       NA    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for poisson family taken to be 1)

Std. Error is NA where coefficient has been constrained or is unidentified

Residual deviance: 124.75 on 41 degrees of freedom
AIC: 564.56

Number of iterations: 14
model.summary(model8)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta        p
  <chr>               <int> <dbl> <dbl> <dbl>    <dbl>
1 model8                 41  125. -216.  5.58 2.18e-10
# Model 9 - U+RC (heterogeneous)
model9 <- freq_tab_3.1 |> 
  gnm(
    Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
      Rscore:Cscore:L + 
      Mult(L, L:Educ, L:Occ),
    family = poisson,
    data = _,
    trace = F,
    tolerance = 1e-6,
    iterStart = 20,
    iterMax = 100000,
    verbose = F
  )
model.summary(model9)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model9                 20  27.5 -139.  1.50 0.122

4.2 表4.4

models <- list()
models[[1]] <- model.summary(model1)
models[[2]] <- model.summary(model2)
models[[3]] <- model.summary(model3)
models[[4]] <- model.summary(model4)
models[[5]] <- model.summary(model5)
models[[6]] <- model.summary(model6)
models[[7]] <- model.summary(model7)
models[[8]] <- model.summary(model8)
models[[9]] <- model.summary(model9)
models |> bind_rows() |> kable(digit = 3)
Model Description df L2 BIC Delta p
model1 48 1370.934 971.892 23.750 0.000
model2 42 143.827 -205.334 6.388 0.000
model3 24 69.062 -130.459 3.039 0.000
model4 38 117.384 -198.524 5.237 0.000
model5 8 5.834 -60.673 0.437 0.666
model6 36 113.180 -186.101 5.187 0.000
model7 0 0.000 0.000 0.000 0.000
model8 41 124.751 -216.097 5.581 0.000
model9 20 27.472 -138.795 1.496 0.122

4.3 表4.5

model_comparison <- function(x, y = 0) {
  models |> 
    bind_rows() |>
    dplyr::summarise(`Model Used` = 
                ifelse(y == 0,
                       paste0(x),
                       paste0(x,"-",y)),
              df = ifelse(y == 0, 
                          df[x], 
                          df[x] - df[y]),
              L2 = ifelse(y == 0, 
                          L2[x], 
                          L2[x] - L2[y]))
}

表4.5Aは次のように再現できる.

# Table 4.5 Panel A
bind_rows(model_comparison(1,2),
          model_comparison(2,4),
          model_comparison(4,6),
          model_comparison(6),
          model_comparison(1)) |> kable(digit = 3)
Model Used df L2
1-2 6 1227.106
2-4 4 26.444
4-6 2 4.204
6 36 113.180
1 48 1370.934
# Table 4.5 Panel B
bind_rows(model_comparison(1,3),
          model_comparison(3,5),
          model_comparison(5,7),
          model_comparison(1)) |> kable(digit = 3)
Model Used df L2
1-3 24 1301.872
3-5 16 63.228
5-7 8 5.834
1 48 1370.934

4.4 表4.6

# Table 4.6
Freq <- c(201, 29, 8,13, 5, 152,29, 2, 8, 0,
          18, 6, 3, 6, 0,17,12, 0, 3, 0,
          109,74, 164,89,16, 101, 336, 9, 134, 2,
          7, 6,45,30, 6, 7,41, 7,63, 0,
          247,58,20,23, 2, 288,51, 1,17, 3,
          48,11,16,13, 1,47,38, 2,18, 0,
          157,68, 178, 116,27, 165, 321,27, 168, 1,
          7, 7,50,42, 5,12,25, 5,29, 6)

Educ <- gl(4, 10, 4 * 5 * 2 * 2)
Occ <- gl(5, 1, 4 * 5 * 2 * 2)
Sex <- gl(2, 5, 4 * 5 * 2 * 2)
Year <- gl(2, 40, 4 * 5 * 2 * 2)
L <- Year:Sex
levels(L) <- factor(1:4)
Rscore <- as.numeric(Educ)
Cscore <- as.numeric(Occ)

# Model 1
model1.un <- freq_tab_3.1 |> gnm(
  Freq ~ Educ + Occ + L + Educ:L + Occ:L +
    Mult(L, Educ, L:Occ, inst = 1) +
    Mult(L, Educ, L:Occ, inst = 2),
  family = poisson,
  data = _,
  trace = F,
  tolerance = 1e-8,
  iterStart = 20,
  iterMax = 100000,
  verbose = F)
model.summary(model1.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model1.un              14  7.97 -108. 0.687 0.891
# Model 2
model2.un <- freq_tab_3.1 |> gnm(
  Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
    Mult(L, L:Educ, Occ, inst = 1) + 
    Mult(L, L:Educ, Occ, inst = 2),
    family = poisson,
    data = _,
    trace = F,
    tolerance = 1e-8,
    iterStart = 20,
    iterMax = 100000,
    verbose = F
  )
model.summary(model2.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta      p
  <chr>               <int> <dbl> <dbl> <dbl>  <dbl>
1 model2.un              20  29.2 -137.  1.82 0.0830
# Model 3
# it might not be fitted with gnm!

model2.un <- freq_tab_3.1 |> gnm(
  Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
    Mult(L, Educ, Occ, inst = 1) + 
    Mult(L, Educ, Occ, inst = 2),
    family = poisson,
    data = _,
    trace = F,
    tolerance = 1e-8,
    iterStart = 20,
    iterMax = 100000,
    verbose = F
  )
model.summary(model2.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model2.un              30  38.5 -211.  2.12 0.138
# Model 4
# it might not be fitted with gnm!

# Model 5
# it might not be fitted with gnm!

# Model 6
# it might not be fitted with gnm!

# Model 7
# it might not be fitted with gnm!

# Model 8
# it might not be fitted with gnm!

# Model 9
model9.un <- gnm(
  Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
    Mult(L, Educ, Occ, inst = 1) + 
    Mult(L, Educ, Occ, inst = 2),
  family = poisson,
  trace = F,
  tolerance = 1e-12,
  iterStart = 20,
  iterMax = 100000
)
Initialising
Running start-up iterations....................
Running main iterations.........................................................
......................................................
Done
model.summary(model9.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model9.un              30  38.5 -211.  2.12 0.138
mu1 <- getContrasts(
  model9.un,
  pickCoef(model9.un, "[.]Educ")[1:4],
  ref = "mean",
  scaleRef = "mean",
  scaleWeights = "unit"
)

nu1 <- getContrasts(
  model9.un,
  pickCoef(model9.un, "[.]Occ")[1:5],
  ref = "mean",
  scaleRef = "mean",
  scaleWeights = "unit"
)

mu2 <- getContrasts(
  model9.un,
  pickCoef(model9.un, "[.]Educ")[5:8],
  ref = "mean",
  scaleRef = "mean",
  scaleWeights = "unit"
)

nu2 <- getContrasts(
  model9.un,
  pickCoef(model9.un, "[.]Occ")[6:10],
  ref = "mean",
  scaleRef = "mean",
  scaleWeights = "unit"
)

con <- c(mu1$qvframe[, 1][c(1, 4)], 
         nu1$qvframe[, 1][c(1, 5)],
         mu2$qvframe[, 1][c(1, 4)], 
         nu2$qvframe[, 1][c(1, 5)])


set.seed(123456)
model9 <- gnm(
  Freq ~ Educ + Occ + L + Educ:L + Occ:L +
    Mult(L, Educ, Occ, inst = 1) + 
    Mult(L, Educ, Occ, inst = 2),
  constrain = c(37, 40, 41, 45, 50, 53, 54, 58),
  constrainTo = con,
  family = poisson,
  tolerance = 1e-12,
  iterStart = 20,
  iterMax = 100000
)
Initialising
Running start-up iterations....................
Running main iterations.........................................................
................................

Deviance is not finite
Warning: Algorithm failed - no model could be estimated
summary(model9)
Length  Class   Mode 
     0   NULL   NULL 
mu1
                                  Estimate Std. Error
Mult(L, ., Occ, inst = 1).Educ1 -0.6402222 0.02882211
Mult(L, ., Occ, inst = 1).Educ2 -0.2386164 0.03949527
Mult(L, ., Occ, inst = 1).Educ3  0.1683115 0.03139203
Mult(L, ., Occ, inst = 1).Educ4  0.7105272 0.02071164
nu1
                                  Estimate Std. Error
Mult(L, Educ, ., inst = 1).Occ1 -0.7654028 0.02524700
Mult(L, Educ, ., inst = 1).Occ2 -0.2501417 0.04589839
Mult(L, Educ, ., inst = 1).Occ3  0.3979180 0.05170619
Mult(L, Educ, ., inst = 1).Occ4  0.2733327 0.04831936
Mult(L, Educ, ., inst = 1).Occ5  0.3442938 0.08637688
mu2
                                  Estimate Std. Error
Mult(L, ., Occ, inst = 2).Educ1 -0.7309442 0.07862794
Mult(L, ., Occ, inst = 2).Educ2  0.2168538 0.14103742
Mult(L, ., Occ, inst = 2).Educ3  0.6355624 0.08287906
Mult(L, ., Occ, inst = 2).Educ4 -0.1214720 0.17120754
nu2
                                   Estimate Std. Error
Mult(L, Educ, ., inst = 2).Occ1  0.07059438 0.10141736
Mult(L, Educ, ., inst = 2).Occ2 -0.48030206 0.07332532
Mult(L, Educ, ., inst = 2).Occ3 -0.19772154 0.10545108
Mult(L, Educ, ., inst = 2).Occ4 -0.21626011 0.06608227
Mult(L, Educ, ., inst = 2).Occ5  0.82368933 0.03866984
model.summary(model9.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model9.un              30  38.5 -211.  2.12 0.138
# Model 10
Lc <- L
levels(Lc) <- c(1, 1, 2, 2)
model10.un <- gnm(
  Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
    Mult(Lc, Educ, Occ) + 
    Mult(L, Educ, Occ),
  family = poisson,
  trace = F,
  tolerance = 1e-8,
  iterStart = 20,
  iterMax = 100000,
  verbose = F
)
model.summary(model10.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model10.un             32  40.4 -226.  2.17 0.146
# Model 11
set.seed(1234)
model11.un <- gnm(
  Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
    Mult(1, Educ, Occ) + 
    Mult(L, Educ, Occ),
  family = poisson,
  trace = F,
  tolerance = 1e-8,
  iterStart = 20,
  iterMax = 100000,
  verbose = F
)
model.summary(model11.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model11.un             33  43.4 -231.  2.31 0.106
# Model 12
L.c <- L
levels(L.c) <- factor(c(1, 2, 3, 2))

set.seed(1234)
model12.un <-
  gnm(Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
        Mult(1, Educ, Occ) + 
        Mult(L.c, Educ, Occ),
    family = poisson,
    trace = F,
    tolerance = 1e-12,
    iterStart = 20,
    iterMax = 100000
  )
Initialising
Running start-up iterations....................
Running main iterations.........................................................
................................................................
Done
model.summary(model12.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model12.un             34  44.6 -238.  2.70 0.105
mu1 <- getContrasts(
  model12.un,
  pickCoef(model12.un, "[.]Educ")[1:4],
  ref = "mean",
  scaleRef = "mean",
  scaleWeights = "unit"
)

nu1 <- getContrasts(
  model12.un,
  pickCoef(model12.un, "[.]Occ")[1:5],
  ref = "mean",
  scaleRef = "mean",
  scaleWeights = "unit"
)

mu2 <- getContrasts(
  model12.un,
  pickCoef(model12.un, "[.]Educ")[5:8],
  ref = "mean",
  scaleRef = "mean",
  scaleWeights = "unit"
)

nu2 <- getContrasts(
  model12.un,
  pickCoef(model12.un, "[.]Occ")[6:10],
  ref = "mean",
  scaleRef = "mean",
  scaleWeights = "unit"
)

con <- c(mu1$qvframe[, 1][c(1, 4)], nu1$qvframe[, 1][c(1, 5)],
         mu2$qvframe[, 1][c(1, 4)], nu2$qvframe[, 1][c(1, 5)])

model12 <-
  gnm(Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
        Mult(1, Educ, Occ) + 
        Mult(L.c, Educ, Occ),
    constrain = c(34, 37, 38, 42, 46, 49, 50, 54),
    constrainTo = con,
    family = poisson,
    trace = F,
    tolerance = 1e-12,
    iterStart = 20,
    iterMax = 100000
  )
Initialising
Running start-up iterations....................
Running main iterations.........................................................
...................

Deviance is not finite
Warning: Algorithm failed - no model could be estimated
summary(model12)
Length  Class   Mode 
     0   NULL   NULL 
mu1
                        Estimate Std. Error
Mult(1, ., Occ).Educ1 -0.6496856 0.02689904
Mult(1, ., Occ).Educ2 -0.2266856 0.03916088
Mult(1, ., Occ).Educ3  0.1712502 0.02789996
Mult(1, ., Occ).Educ4  0.7051210 0.01869796
nu1
                        Estimate Std. Error
Mult(1, Educ, .).Occ1  0.7477472 0.03046619
Mult(1, Educ, .).Occ2  0.2798375 0.04956910
Mult(1, Educ, .).Occ3 -0.3926778 0.05281437
Mult(1, Educ, .).Occ4 -0.2590761 0.04731457
Mult(1, Educ, .).Occ5 -0.3758307 0.08654401
mu2
                          Estimate Std. Error
Mult(L.c, ., Occ).Educ1  0.7697514 0.05982573
Mult(L.c, ., Occ).Educ2 -0.1649990 0.14337525
Mult(L.c, ., Occ).Educ3 -0.6165380 0.08295724
Mult(L.c, ., Occ).Educ4  0.0117856 0.16680372
nu2
                           Estimate Std. Error
Mult(L.c, Educ, .).Occ1  0.04308284 0.07694408
Mult(L.c, Educ, .).Occ2 -0.47712634 0.07295173
Mult(L.c, Educ, .).Occ3 -0.22737747 0.10213888
Mult(L.c, Educ, .).Occ4 -0.16931700 0.06314427
Mult(L.c, Educ, .).Occ5  0.83073797 0.03112819
model.summary(model12.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta     p
  <chr>               <int> <dbl> <dbl> <dbl> <dbl>
1 model12.un             34  44.6 -238.  2.70 0.105
# Model 13
model13.un <-
  gnm(Freq ~ Educ + Occ + L + Educ:L + Occ:L + 
        Mult(1, Educ, Occ, inst = 1) + 
        Mult(1, Educ, Occ, inst = 2),
    family = poisson,
    trace = F,
    tolerance = 1e-8,
    iterStart = 20,
    iterMax = 100000,
    verbose = F
  )
model.summary(model13.un)
# A tibble: 1 × 6
  `Model Description`    df    L2   BIC Delta        p
  <chr>               <int> <dbl> <dbl> <dbl>    <dbl>
1 model13.un             38  117. -199.  5.24 4.93e-10
library(logmult)
d <- tibble(Freq, Educ, Occ, Sex, Year, L, Rscore, Cscore)
tab <- xtabs(Freq ~ Educ + Occ + L, data = d)

# Model 2
fit <- rcL(tab, nd = 1,
    layer.effect = "none")
Initialising
Running start-up iterations..
Running main iterations................
Done
fit
Call:
rcL(tab = tab, nd = 1, layer.effect = "none")

Intrinsic association coefficients:
     Dim1 
[1,] 0.657

Normalized row scores (Educ) for all layers:
     1      2      3      4 
 1.428  0.416 -0.477 -1.701 

Normalized column scores (Occ) for all layers:
     1      2      3      4      5 
 1.171 -0.236 -1.272 -1.076 -1.053 

Normalization weights: marginal
Deviance:              143.8274
Pearson chi-squared:   152.4751
Dissimilarity index:   6.388286%
Residual df:           42
BIC:                   -205.3338
AIC:                   59.82743
# Model 3
fit <- rcL(tab, nd = 1,
    layer.effect = "heterogeneous")
Initialising
Running start-up iterations..
Running main iterations.........................................................
...................
Done
fit
Call:
rcL(tab = tab, nd = 1, layer.effect = "heterogeneous")

Intrinsic association coefficients:
  Dim1 
1 0.644
2 0.870
3 0.562
4 0.683

Normalized row scores (Educ):
, , 1

  Dim1  
1  1.457
2  0.520
3 -0.542
4 -1.488

, , 2

  Dim1  
1  1.395
2  0.588
3 -0.470
4 -1.759

, , 3

  Dim1  
1  1.403
2  0.447
3 -0.452
4 -1.793

, , 4

  Dim1  
1  1.534
2  0.159
3 -0.598
4 -1.161


Normalized column scores (Occ):
, , 1

  Dim1  
1  1.093
2 -0.024
3 -1.537
4 -1.069
5 -0.715

, , 2

  Dim1  
1  1.195
2 -0.341
3 -1.118
4 -1.141
5 -0.413

, , 3

  Dim1  
1  0.958
2  0.312
3 -1.415
4 -1.294
5 -1.417

, , 4

  Dim1  
1  1.185
2 -0.383
3 -1.466
4 -0.827
5 -0.337


Normalization weights: marginal
Deviance:              69.06197
Pearson chi-squared:   88.05995
Dissimilarity index:   3.038593%
Residual df:           24
BIC:                   -130.4587
AIC:                   21.06197
# Model 4
fit <- rcL(tab, nd = 2,
    layer.effect = "none")
Initialising
Running start-up iterations..
Running main iterations.................
Done
fit
Call:
rcL(tab = tab, nd = 2, layer.effect = "none")

Intrinsic association coefficients:
     Dim1   Dim2  
[1,] 0.6277 0.0863

Normalized row scores (Educ) for all layers:
  Dim1   Dim2  
1  1.458  0.480
2  0.425 -0.103
3 -0.520 -0.695
4 -1.549  2.607

Normalized column scores (Occ) for all layers:
  Dim1    Dim2   
1  1.1703  0.3450
2 -0.2552 -1.4735
3 -1.3890  0.0154
4 -0.9827  1.1830
5 -0.8680  2.3096

Normalization weights: marginal
Deviance:              117.3838
Pearson chi-squared:   122.1628
Dissimilarity index:   5.236715%
Residual df:           38
BIC:                   -198.524
AIC:                   41.38378
# Model 5
fit <- rcL(tab, nd = 2,
    layer.effect = "heterogeneous")
Initialising
Running start-up iterations..
Running main iterations.........................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
...........................
Done
fit
Call:
rcL(tab = tab, nd = 2, layer.effect = "heterogeneous")

Intrinsic association coefficients:
  Dim1   Dim2  
1 0.6502 0.0943
2 4.2413 0.4108
3 0.5696 0.0757
4 0.6765 0.1914

Normalized row scores (Educ):
, , 1

  Dim1     Dim2    
1  1.45352  0.45162
2  0.51234 -0.02060
3 -0.53379 -0.69282
4 -1.51746  2.62495

, , 2

  Dim1     Dim2    
1  1.52661  0.24250
2 -0.00802  1.36857
3 -0.78150  0.23483
4  0.00888 -2.91553

, , 3

  Dim1     Dim2    
1  1.38340  0.71281
2  0.44660 -0.57412
3 -0.42823 -0.71739
4 -1.86901  2.36677

, , 4

  Dim1     Dim2    
1  1.54808  0.21241
2  0.13984 -0.58450
3 -0.63135 -0.54666
4 -0.99808  2.85541


Normalized column scores (Occ):
, , 1

  Dim1     Dim2    
1  1.06815  0.26848
2 -0.00474 -1.18599
3 -1.70563 -0.75487
4 -0.94238  1.42995
5 -0.56999  2.63870

, , 2

  Dim1     Dim2    
1  0.30521  1.09050
2  0.01328 -0.11121
3  0.10725 -1.32567
4 -0.02157 -1.23729
5 -7.28179  0.87125

, , 3

  Dim1     Dim2    
1  0.98305 -0.55082
2  0.24927  0.94783
3 -1.48810 -1.21427
4 -1.16872  0.97409
5 -1.78377 -3.81045

, , 4

  Dim1     Dim2    
1  1.15659 -0.16207
2 -0.42550 -0.63682
3 -1.48072  0.27185
4 -0.81835  0.40919
5  0.93490  6.79479


Normalization weights: marginal
Deviance:              5.833864
Pearson chi-squared:   4.354907
Dissimilarity index:   0.436722%
Residual df:           8
BIC:                   -60.67303
AIC:                   -10.16614
# Model 6
fit <- rcL(tab, nd = 3,
    layer.effect = "none")
Initialising
Running start-up iterations..
Running main iterations.....
Done
fit
Call:
rcL(tab = tab, nd = 3, layer.effect = "none")

Intrinsic association coefficients:
     Dim1   Dim2   Dim3  
[1,] 0.6287 0.0867 0.0499

Normalized row scores (Educ) for all layers:
  Dim1   Dim2   Dim3  
1  1.456  0.533  0.346
2  0.437 -0.631 -3.762
3 -0.521 -0.657  0.315
4 -1.549  2.584 -0.348

Normalized column scores (Occ) for all layers:
  Dim1    Dim2    Dim3   
1  1.1701  0.3410 -0.1004
2 -0.2525 -1.4473  0.3582
3 -1.3804  0.0413  0.1242
4 -0.9949  1.0643 -1.0180
5 -0.8408  3.0518  6.4839

Normalization weights: marginal
Deviance:              113.1797
Pearson chi-squared:   117.7575
Dissimilarity index:   5.186927%
Residual df:           36
BIC:                   -186.1013
AIC:                   41.17975
# Model 7
fit <- rcL(tab, nd = 3,
    layer.effect = "heterogeneous")
Initialising
Running start-up iterations..
Running main iterations.

Deviance is not finite
Warning: Algorithm failed - no model could be estimated
fit
NULL