Should I use an offset for my Poisson GLM? I am carrying out research to look at differences in fish density and fish species richness when using two different underwater visual census methods. My data was originally count data but then typically this is changed to fish density but I have still decided to use a Poisson GLM, which I hope is right. 
model1 <- glm(g_den ~ method + site + depth, poisson)

My 3 predictor variables are method, site and depth which I ordered as factors when I input them. 
My response variables are grouper species richness, grouper density and the same for other fish groups. I am aware that density is not an integer and it is numerical data e.g 1.34849. I am now however getting this error: 

In dpois(y, mu, log = TRUE) : non-integer x = 0.037500

I've been reading up and many people suggest using an offset, is this the most advisable thing to do? 
 A: If you are going to model using the Poisson you have to have integer values for your response variable. You then have two options


*

*
Use area or some other suitable denominator as an offset. This would usually need to be logged first


*
Include area or etc as a predictor variable. Again this would usually be included as a log because you are modelling the log counts.



If you use the offset approach you are saying that if I double the area I would expect to get double the count. If you use the predictor approach you are sayinh that you know iif you multiply the area you multiply the counts but not necessarily by the same factor.
It is your call.
A: It looks like you divided the fish counts by the volume (or perhaps area) of water surveyed. In that case an offset is indeed appropriate, you should use the log of whatever you divided by. Perhaps
model1 <- glm(g_den ~ method + site + depth + offset(log(area)), poisson)
(edited from earlier incorrect version, missing the log)
The reason for the error message is that the poisson distribution is normally integer-valued but the response wasn't an integer. This changes once an offset is present; (response/offset) must be an integer (which of course it is, assuming the original counts were integers).
A: There are several issues here:  


*

*You need to use the observed counts as your response variable.  You should not use the densities (g_den).  

*If the observed counts are from differing areas, you need to take the log of those areas as a new variable:  
larea = log(area)


*You can control for the differing areas for the observations in two different ways:  


*

*By using larea as an offset.  This will make your response actually a rate (even though what is listed on the left hand side of your model is a count).  

*By using larea as a covariate.  This will control for the differing areas, but will not make your response equivalent to a rate.  This is a more flexible approach that will let you assess if increases in larea have an increasing or decreasing effect on the count (i.e., whether the slope is less than or greater than 1).  



There is more information about these issues in the following CV threads:  


*

*When to use an offset in a Poisson regression?

*In a Poisson model, what is the difference between using time as a covariate or an offset?
