Skip to content

GLM HELP NEEDED!

3 messages · CHIRIBOGA Xavier, Duncan Murdoch, David Winsemius

#
Dear colleagues,


I am trying to perform a GLM. I tried again without using attach()...but still is not working.

Do you have any idea to help me?


Thank you again,


Xavier



a <- read.table(file.choose(), h<-T)
time treatment transinduc
1    1   CHA0+Db     1,0768
2    1   CHA0+Db     1,0706
3    1   CHA0+Db     1,0752
4    1   CHA0+Db     1,0689
5    1   CHA0+Db     1,1829
6    1    PCL+Db     1,1423
time         treatment    transinduc
 Min.   :1.000   CHA0   :10   1,0488 : 6
 1st Qu.:1.000   CHA0+Db: 9   1,0724 : 4
 Median :1.000   Db     : 9   1,0752 : 3
 Mean   :1.433   HEALTHY:15   1,0954 : 3
 3rd Qu.:2.000   PCL    :10   1,0001 : 2
 Max.   :2.000   PCL+Db :14   1,0005 : 2
                              (Other):47
Error in if (any(y < 0)) stop("negative values not allowed for the 'Poisson' family") :
  valor ausente donde TRUE/FALSE es necesario
Adem?s: Warning message:
In Ops.factor(y, 0) : '<' not meaningful for factors
#
On 01/02/2017 8:28 AM, CHIRIBOGA Xavier wrote:
The "h<-T" argument doesn't make sense.  You are just lucky that it 
worked here. For arguments you almost always use "=".

It's also a bad idea to use "T" as an abbreviation for "TRUE", but that 
won't always cause problems.
I assume that transinduc is supposed to be real numbers, with comma as 
the decimal separator.  You need to use dec = "," in read.table to read 
that properly.
It doesn't make sense to use fractional values like 1.0488 in Poisson 
regression.

Duncan Murdoch
#
Learning to read R error messages carefully and for full meaning is an essential step toward full mastery of this wonderful gift from the R Core.

The business about "negative values" is a complete distraction. That was the consequent of an if statement and was only in there to show you where to look in the function if you were so inclined . The error is actually being thrown much earlier in parsing that statement by the "<" operator inside the `if` statement. The "real" error message that says:
Or in English:

 missing value where TRUE/FALSE needed


Examine this code:
Error in if (any(y < 0)) stop("negative values not allowed for the 'Poisson' family") : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In Ops.factor(y, 0) : ?<? not meaningful for factors

Because the "<" operator is not defined for factors the result that is passed to `if` is of length 0. Setting the factor variable on the RHS and using the integer values on hte LHS succeeds.
Call:  glm(formula = y ~ x, family = "poisson")

Coefficients:
(Intercept)           x2           x3           x4           x5  
  4.676e-11    6.931e-01    1.099e+00    1.386e+00    1.609e+00  

Degrees of Freedom: 4 Total (i.e. Null);  0 Residual
Null Deviance:	    3.591 
Residual Deviance: 6.661e-16 	AIC: 24.35

Duncan Murdoch points out that fractional values in the LHS of a formula for Poisson regression will not be accepted (since the poisson distribution is discrete), and if you do in fact need Poisson regression that you would need to use the quasi-binomial family.

On the other hand ... If those were counts in the thousands and needed to be converted to "whole numbers", you might need to convert the factor values to numeric with:

a$transinduc <- as.numeric( gsub( "[,]", "", a$transinduc) )