PROGRAM t_logistic
! Illustration of the problem of a boundary between two regions.
! In one region, every case falls into one category, in the other
! region, every case is in the other category.
USE Logistic_Regression
IMPLICIT NONE
REAL (dp) :: x(16,2), chisq, devnce, beta(0:2), se_beta(0:2), scale
INTEGER :: n(16), s(16), i, iostatus, ndf, ier
! Read in the artificial data
OPEN(UNIT=8, FILE='clearcut.dat', STATUS='OLD')
i = 1
DO
READ(8, *, IOSTAT=iostatus) x(i,1), x(i,2), s(i), n(i)
IF (iostatus < 0) EXIT
IF (iostatus > 0) CYCLE
i = i + 1
IF (i > 16) EXIT
END DO
CALL logistic(16, x, 2, s, n, chisq, devnce, ndf, beta, se_beta, ier)
WRITE(*, *) 'IER =', ier
WRITE(*, *)
WRITE(*, *) 'If IER = 7, it means that there is a linear boundary'
WRITE(*, *) 'between cases in which s = 0 and s = 1'
IF (ier == 0) WRITE(*, '(a, f8.3, a, f8.3, a, i3, a)') &
' Deviance = ', devnce, ' Chi-square = ', chisq, &
' with ', ndf, ' deg. of freedom'
WRITE(*, *)
WRITE(*, *) ' Coefficient'
DO i = 0, 2
WRITE(*, '(i3, g12.4)') i, beta(i)
END DO
WRITE(*, *)
scale = SQRT(ABS(beta(1))*ABS(beta(2)))
beta = beta / scale
WRITE(*, *) 'Boundary is approx:'
WRITE(*, '(f9.4, a, f9.4, a, f9.4, a)') &
beta(0), ' + ', beta(1), ' * X1 + ', beta(2), ' * X2 = 0.0'
STOP
END PROGRAM t_logistic