If perOOgivenP has too many zeroes, it may cause the coefficients fails to NA. It can be a big problem. Even if you get the fitting values, it may not be accurate. You need to show more information about this variable.
It is hard to say whenther this residual plot is biased or not. One obvious thing you can do is to run lm(residuals~c(1:n)), where n is the length or residuals. The coefficients of the fitting line should be close to 0. Also, I suggest use abline(h=0) for residual plot.