Error in glm.nb : if (any(y < 0)) stop("negative values not allowed for the 'Poisson' family") : missing value where TRUE/FALSE needed

The mysteries are multiplying....

as.numeric (non_house_contact)

this code, has no apparent relation to 'df' which is the object passed to glb.nm in your example.
furthermore the str() if it is of df appears to show a different capitalisation Wave rather than wave etc, and R is case sensitive and will see these as different.

Hopefully these clues will be enough for you to progress.
If not, then you could get additional help by creating a more complete reprex, which you can read about how to do here