Overview
I got the following error when I ran a binomial logistic regression with the glm function in R:
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
Therefore, I am wondering if there is something inherent in the structure of my data that is causing this issue.
I have observation data on two species, Species 1 and Species 2 (response variable), and ecological data for these two species, including foraging height, attack maneuver, foliage density, and foraging substrate (predictor variables). My goal is to infer what predictor variables contribute to the ecological differences between those species.
Input data 'niche_data_recoded.csv':
| Species | Attack_maneuver | Foraging_height | Foraging_substrate | Foliage_density |
|---|---|---|---|---|
| Species_1 | 1 | 3 | 1 | 3 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 3 | 1 | 3 |
| Species_1 | 1 | 3 | 1 | 3 |
| Species_1 | 3 | 5 | 3 | 3 |
| Species_1 | 1 | 4 | 1 | 3 |
| Species_1 | 3 | 4 | 3 | 2 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 4 | 1 | 1 |
| Species_2 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 3 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 5 | 1 | 2 |
| Species_1 | 1 | 2 | 1 | 2 |
| Species_1 | 1 | 3 | 1 | 3 |
| Species_1 | 2 | 1 | 2 | 4 |
| Species_1 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 2 | 1 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 1 | 1 | 1 |
| Species_1 | 1 | 1 | 1 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 5 | 1 | 1 |
| Species_1 | 1 | 5 | 1 | 2 |
| Species_1 | 3 | 5 | 3 | 3 |
| Species_1 | 1 | 5 | 1 | 1 |
| Species_1 | 1 | 4 | 1 | 1 |
| Species_1 | 1 | 5 | 1 | 1 |
| Species_1 | 1 | 4 | 1 | 1 |
| Species_1 | 1 | 3 | 1 | 1 |
| Species_1 | 2 | 1 | 2 | 2 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 1 | 1 | 3 |
| Species_1 | 1 | 1 | 1 | 1 |
| Species_1 | 1 | 1 | 1 | 2 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 1 | 1 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 3 | 1 | 2 |
| Species_1 | 1 | 1 | 1 | 1 |
| Species_1 | 1 | 3 | 1 | 1 |
| Species_1 | 1 | 5 | 1 | 1 |
| Species_1 | 2 | 1 | 3 | 1 |
| Species_1 | 2 | 1 | 3 | 1 |
| Species_1 | 2 | 1 | 3 | 1 |
| Species_1 | 1 | 1 | 1 | 1 |
| Species_1 | 2 | 1 | 2 | 1 |
| Species_1 | 1 | 2 | 1 | 2 |
| Species_1 | 2 | 1 | 2 | 2 |
| Species_1 | 1 | 3 | 1 | 2 |
| Species_1 | 1 | 1 | 1 | 2 |
| Species_1 | 1 | 1 | 1 | 2 |
| Species_1 | 3 | 5 | 3 | 4 |
| Species_1 | 2 | 1 | 2 | 3 |
| Species_2 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 3 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 2 | 1 | 1 |
| Species_2 | 1 | 3 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 2 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 1 | 1 | 1 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 2 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
| Species_2 | 2 | 1 | 2 | 1 |
Code:
niche.dat <- read.csv('niche_data_recoded.csv',header=T,na.strings=c(""))
cols <- c("Species", "Attack_maneuver", "Foraging_height", "Foraging_substrate", "Foliage_density")
niche.dat[cols] <- lapply(niche.dat[cols], factor)
str(niche.dat)
model <- glm(Species ~ Attack_maneuver + Foraging_height + Foraging_substrate + Foliage_density,family=binomial,data=niche.dat)
summary(model)
Output:
> model <- glm(Species ~ Attack_maneuver + Foraging_height + Foraging_substrate + Foliage_density,family=binomial,data=niche.dat)
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
> summary(model)
Call:
glm(formula = Species ~ Attack_maneuver + Foraging_height + Foraging_substrate +
Foliage_density, family = binomial, data = niche.dat)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.45706 -1.25836 -0.00008 0.92146 2.04286
Coefficients: (1 not defined because of singularities)
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.18833 0.49204 0.383 0.7019
Attack_maneuver2 -18.75440 3765.84720 -0.005 0.9960
Attack_maneuver3 4.80062 5754.42487 0.001 0.9993
Foraging_height2 0.21481 1.17207 0.183 0.8546
Foraging_height3 0.07142 0.98094 0.073 0.9420
Foraging_height4 -19.31781 4991.11811 -0.004 0.9969
Foraging_height5 -17.73391 1922.24348 -0.009 0.9926
Foraging_substrate2 19.20303 3765.84717 0.005 0.9959
Foraging_substrate3 NA NA NA NA
Foliage_density2 -2.59109 1.10344 -2.348 0.0189 *
Foliage_density3 -18.30482 1988.67327 -0.009 0.9927
Foliage_density4 -18.37471 4310.78632 -0.004 0.9966
Signif. codes: 0 ‘*’ 0.001 ‘’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 156.77 on 113 degrees of freedom
Residual deviance: 111.63 on 103 degrees of freedom
AIC: 133.63
Number of Fisher Scoring iterations: 17
I'm also not sure what the NAs mean in this situation.