Indeed the word pairs that can occur are only a small subset of all possible pairs; and the distinction allowed/forbidden is quite well marked in most cases.
Also, there is a fairly small number of 2x2 submatrices that have all four counts positive (that is, quadruples {A1,A2} and {B1,B2} where all four A-B pairs are allowed). And only a subset of these really follow the ": : pattern" (with R close to zero).
But only some of the 2x2 submatrices that you marked really fit the ": : pattern"
Thus while {mit,von} pair up indifferently with {der,den}, the other quadruples show at last a bit of bias. Some of that can be attributed to sampling error (17 is essentially the same as 18, etc.) The most biased of those quadruples is {in,von} x {den,dem}: "in" definitely prefers to be followed by "den", and "von" by "dem".
Now let me see again the table for Voynichese...
Code:
#! /usr/bin/python3
# Last edited on 2025-12-02 17:14:25 by stolfi
from math import sqrt
from sys import stdout as out, stderr as err
def main():
submats = ( \
( ('sie','sich'), ('nicht','in'), ((12,10),(16,14)) ),
( ('sie','sich'), ('nicht','mit'), ((12, 7),(16,13)) ),
( ('sie','sich'), ('in','mit'), ((10, 7),(14,13)) ),
( ('in','mit'), ('der','den'), ((16,20),(18,10)) ),
( ('in','mit'), ('der','dem'), ((16,10),(18,17)) ),
( ('in','mit'), ('den','dem'), ((20,10),(10,17)) ),
( ('in','von'), ('der','den'), ((16,20),(18,10)) ),
( ('in','von'), ('der','dem'), ((16,10),(18,18)) ),
( ('in','von'), ('den','dem'), ((20,10),(10,18)) ),
( ('mit','von'), ('der','den'), ((18,10),(18,10)) ),
( ('mit','von'), ('der','dem'), ((18,17),(18,18)) ),
( ('mit','von'), ('den','dem'), ((10,17),(10,18)) ),
)
for A, B, M in submats:
ab, cd = M; a, b = ab; c, d = cd;
D, T, R = compute_R(a,b,c,d)
Af = f"{A}"; Bf = f"{B}"
out.write(f"{Af:25} {Bf:25} [[{a:4d} {b:4d}] [{c:4d} {d:4d}]]")
out.write(f" {D = :8d} {R = :6.4f}\n")
return
# ----------------------------------------------------------------------
def compute_R(a,b,c,d):
D = a*d-b*c
if D > 0:
D = -D
T = b + c
else:
T = a + d
L1 = abs(T/2 + sqrt(T*T/4 - D))
L2 = abs(T/2 - sqrt(T*T/4 - D))
R = min(L1,L2)/max(L1,L2)
return D, T, R
# ----------------------------------------------------------------------
main()