> On Sep 28, 2016, at 9:49 AM, Greg Snow <538...@gmail.com> wrote:
> 
> There are multiple ways of doing this, but here are a couple.
> 
> To just test the fixed effect of treatment you can use the glm function:
> 
> test <- read.table(text="
> replicate treatment n X
> 1 A 32 4
> 1 B 33 18
> 2 A 20 6
> 2 B 21 18
> 3 A 7 0
> 3 B 8 4
> ", header=TRUE)
> 
> fit1 <- glm( cbind(X,n-X) ~ treatment, data=test, family=binomial)
> summary(fit1)
> 
> Note that the default baseline value may differ between R and SAS,
> which would result in a reversed sign on the slope coefficient (and
> different intercept).
> 
> To include replicate as a random effect you need an additional
> package, here I use lme4 and the glmer function:
> 
> library(lme4)
> fit2 <- glmer( cbind(X, n-X) ~ treatment + (1|replicate), data=test,
> family=binomial)
> summary(fit2)
> 
> 
> 
> On Tue, Sep 27, 2016 at 9:03 PM, Shuhua Zhan <sz...@uoguelph.ca> wrote:
>> Hello R-experts,
>> I am interested to determine if the ratio of counts from two groups differ 
>> across two distinct treatments. For example, we have three replicates of 
>> treatment A, and three replicates of treatment B. For each treatment, we 
>> have counts X from one group and counts Y from another group. My 
>> understanding is that that GLIMMIX procedure in SAS can calculate whether 
>> the ratio of counts in one group (X/X+Y) significantly differs between 
>> treatments.
>> 
>> I think this is the way you do it in SAS. The replicate and treatment 
>> variables are self-explanatory. The first number (n) refers to the total 
>> counts X + Y; the second number (X) refers to the counts X. Is there a way 
>> to do this in R? Since we have 20,000 datasets to be tested, it may be 
>> easier to retrive the significant test as the given dataset below and its 
>> p>F value and mean ratios of treatments in R than SAS.
>> 
>> 
>> data test;
>> input replicate treatment$ n X;
>> datalines;
>> 1 A 32 4
>> 1 B 33 18
>> 2 A 20 6
>> 2 B 21 18
>> 3 A 7 0
>> 3 B 8 4
>> ;
>> 

Greg has already shown you how that is done in R and how to do logistic 
regression:

#  I usually think of Poisson regression when I hear a desire is to model 
ratios of counts that have a denominator. The log(sample_size) is supplied as 
an offset to correct for the variation in size of subsamples.


fit1 <- glm( X ~ treatment+offset(log(n)), data=test, family=poisson)
summary(fit1)

#  And the lme4 analogue with replication:

library(lme4)
fit2 <- glmer( X ~ treatment + offset(log(n))+ (1|replicate), data=test,
family=poisson)
summary(fit2)
#----output----
Generalized linear mixed model fit by maximum likelihood (Laplace  
Approximation)
 [glmerMod]
 Family: poisson  ( log )
Formula: X ~ treatment + offset(log(n)) + (1 | replicate)
   Data: test

     AIC      BIC   logLik deviance df.resid 
    31.9     31.3    -13.0     25.9        3 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.0504 -0.4146 -0.3487  0.3956  1.0791 

Random effects:
 Groups    Name        Variance Std.Dev.
 replicate (Intercept) 0.03159  0.1777  
Number of obs: 6, groups:  replicate, 3

Fixed effects:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -1.7875     0.3372  -5.301 1.15e-07 ***
treatmentB    1.3365     0.3529   3.787 0.000152 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
           (Intr)
treatmentB -0.838

Compare with the binomial model:
#============


 fitBin <- glmer( cbind(X,n-X) ~ treatment +  (1|replicate), data=test,
 family=binomial)
 coef(fitBin)
#----
$replicate
  (Intercept) treatmentB
1  -2.0487694   2.364695
2  -0.9908556   2.364695
3  -2.1844435   2.364695

attr(,"class")
[1] "coef.mer"
#-----
 summary(fitBin)
#---------
Generalized linear mixed model fit by maximum likelihood (Laplace  
Approximation)
 [glmerMod]
 Family: binomial  ( logit )
Formula: cbind(X, n - X) ~ treatment + (1 | replicate)
   Data: test

     AIC      BIC   logLik deviance df.resid 
    30.1     29.4    -12.0     24.1        3 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-0.88757 -0.35065 -0.03137  0.26897  0.67505 

Random effects:
 Groups    Name        Variance Std.Dev.
 replicate (Intercept) 0.4123   0.6421  
Number of obs: 6, groups:  replicate, 3

Fixed effects:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -1.7442     0.5438  -3.208  0.00134 ** 
treatmentB    2.3647     0.4741   4.988 6.11e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
           (Intr)
treatmentB -0.568

The binomial model has a logit link. Your glimmix procedure appears to have a 
gaussian/normal distributional assumption and an identity link by default. If 
we run this using those assumptions in lme4::glmer we get these results (with a 
warning that in this case we can overlook since the results with lmer turned 
out to be identical)
#--------
 fitNorm <- glmer( I(X/n) ~ treatment +  (1|replicate), data=test,
                  family=gaussian)

#-------
Warning message:
In glmer(I(X/n) ~ treatment + (1 | replicate), data = test, family = gaussian) :
  calling glmer() with family=gaussian (identity link) as a shortcut to lmer() 
is deprecated; please call lmer() directly
> coef(fitNorm); summary(fitNorm)
$replicate
  (Intercept) treatmentB
1 0.091096925  0.4925325
2 0.324579602  0.4925325
3 0.009323473  0.4925325

attr(,"class")
[1] "coef.mer"
Linear mixed model fit by REML ['lmerMod']
Formula: I(X/n) ~ treatment + (1 | replicate)
   Data: test

REML criterion at convergence: -4.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-0.7864 -0.4278 -0.1152  0.5143  0.8246 

Random effects:
 Groups    Name        Variance Std.Dev.
 replicate (Intercept) 0.027895 0.16702 
 Residual              0.002356 0.04854 
Number of obs: 6, groups:  replicate, 3

Fixed effects:
            Estimate Std. Error t value
(Intercept)  0.14167    0.10042   1.411
treatmentB   0.49253    0.03963  12.427

Correlation of Fixed Effects:
           (Intr)
treatmentB -0.197

That's (probably) the model to compare to your SAS results if my reading of the 
SAS Proc GLIMMIX manual page is correct.

-- 
David.

>> proc glimmix data=test;
>> class replicate treatment;
>> model X/n = treatment / solution;
>> random intercept / subject=replicate;
>> run;
>> 
>> ods select lsmeans;
>> proc glimmix data=test;
>> class replicate treatment;
>> model X/n = treatment / solution;
>> random intercept / subject=replicate;
>> lsmeans treatment / cl ilink;
>> run;
>> 
>> I appreciate your help in advance!
>> Joshua
>> 
>> 
>>        [[alternative HTML version deleted]]
>> 
>> ______________________________________________
>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
> 
> 
> 
> -- 
> Gregory (Greg) L. Snow Ph.D.
> 538...@gmail.com
> 
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius
Alameda, CA, USA

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to