Hopefully your friend has graduated by now, but if not, the following might help.

You were on the right track in your original post https://stats.stackexchange.com/questions/93450/partitioning-variance-from-logistic-regression, using `glmer()` for mixed-effects logistic regression.

I would recommend against: the advisor's "solution", using lm() for logistic regression, and weighting rows equally (you should weight by N_indiv).

Generalized linear mixed models are tough.  http://glmm.wikidot.com/faq has some good information - including the fact that you need many levels of a random factor in order to estimate its variance component.

My code below requires the lme4 package and the data from your link.

    # Seroprevalance has been rounded, that's not OK
    # to do logistic regression, (proportion * weight) must equal an integer
    prev$seroexact <- round(prev$Seroprevalence * prev$N_indiv)/prev$N_indiv
    
    # Host.Species is nested within Social.system, but you didn't reuse 
    # species letters between Social.systems, so you can specify 
    # Host.Species as a random effect without explicitly nesting it
    
    # First random effect model
    prev1.glmer = glmer(seroexact ~ Pathogen + Social.System + (1|Host.Species),
                      family=binomial(link="logit"), weights=N_indiv, data = prev)
    summary(prev1.glmer)
    
    ## Fixed effects:
    # Intercept is pathogen A and social.system A.  
    # The z-test of the intercept is testing if the logit=0
    # I.e. it's testing whether the combination of
    # pathogen A and social.system A has prob=0.5.
    # The other z-tests are testing whether other levels of the factors
    # yield different probabilities than pathogen A and social.system A
    
    ## Random effects:
    # This doesn't give you separate Host.Species and residual variances,
    # Host.Species is treated as a random effect, so this model is the same as if
    # you had summed the results of all studies with identical values of
    # Host.Species, Pathogen, and Social.System. I.e. sum the results of the
    # first 8 rows and create a single proportion and N_indiv, like so:
    
    prevsum<-aggregate(cbind(N_indiv, prop=(seroexact*N_indiv)) ~ 
                       Social.System+Host.Species+Pathogen, data=prev, sum)
    prevsum$prop<-prevsum$prop/prevsum$N_indiv
    
    # which gives the same model:
    prevsum.glmer = glmer(prop ~ Pathogen + Social.System + (1|Host.Species),
                          family=binomial(link="logit"), weights=N_indiv, data = prevsum)
    summary(prevsum.glmer)
    
    # So why are they broken up into multiple rows?  If each row represents
    # one geographic area/time/litter/study/etc. then animals in one row
    # might be more similar to eachother than they are to animals in
    # another row that has the same values of Social, Species, & Pathogen.
    # I think this is what the advisor wants as a "residual".
    
    # To allow a random component for each row:
    prev2<-cbind(resid=paste("Row_", row.names(prev), sep=""), prev)
    
    prev2.glmer = glmer(seroexact ~ Pathogen + Social.System + (1|Host.Species) + (1|resid),
                       family=binomial(link="logit"), weights=N_indiv, data = prev2)
    summary(prev2.glmer)
    
    # This isn't a bad start, but I'm not comfortable with it because:
    table(prev2[,2:3])
    
    # Social.Sytstem D is only observed in Species F.
    # This is called confounding, and it makes it hard to draw conclusions
    # about Social Sytstem D.  How do you know what is caused by social
    # system D and what is caused by species F?  If your friend really wants to
    # make inferences about Social System D, she should collect data from
    # another host species that uses Social System D.
    
    # Leave out Soc_D:
    prev3.glmer = glmer(seroexact ~ Pathogen + Social.System + (1|Host.Species) + (1|resid),
                        family=binomial(link="logit"), weights=N_indiv, 
                        data = prev2[prev2$Social.System != "Soc_D",])
    summary(prev3.glmer)
    
    # Even though Host Species is conceptually a random factor, you really need to observe
    # more than 2 species per social system for a mixed model to accurately estimate
    # the species variance.  As far as species variance is concerned, each species is a
    # single sample (not animals or even litters), and you can't hope to estimate variance
    # accurately with only two samples.
    
    # We can fit the model with species as a fixed effect, but we don't have
    # enough degrees of freedom to estimate all levels of Species:
    prev4.glmer = glmer(seroexact ~ Pathogen + Social.System + Host.Species + (1|resid),
                        family=binomial(link="logit"), weights=N_indiv, 
                        data = prev2[prev2$Social.System != "Soc_D",])
    
    # Your friend doesn't need to estimate the level of each species in order to test
    # whether species has any noticeable effect at all.  Unfortunately, we can't just
    # Use the F statistic from anova() because calculating the denominator df for a
    # GLMM is not straightforward.
    anova(prev4.glmer) #Gives you an F statistic, but no denominator df or p-value
    
    # Instead we fit a simpler model without Species:
    prev5.glmer = glmer(seroexact ~ Pathogen + Social.System + (1|resid),
                        family=binomial(link="logit"), weights=N_indiv, 
                        data = prev2[prev2$Social.System != "Soc_D",])
    
    # And we'll compare the two models With a Likelihood-Ratio test using anova()
    anova(prev5.glmer,prev4.glmer)
    
    # With a p-value of 0.01331 we can say it's worth keeping Species in the model.
    
    # Now let's check the pathogen * social system interaction:
    prev6.glmer = glmer(seroexact ~ Pathogen * Social.System + Host.Species + (1|resid),
                        family=binomial(link="logit"), weights=N_indiv, nAGQ=2, 
                        data = prev2[prev2$Social.System != "Soc_D",])
    summary(prev6.glmer) #Neither interaction term is significant
    anova(prev6.glmer)
    # We don't need a denominator df to know that the F statistic of 0.0774 for
    # the interaction is insignificant.
    
    # Since the interaction between Pathogen and Social System was not significant,
    # we don't need to include the interaction term.  Similarly, I don't see a 
    # statistical reason to  split the model into two separate 'pathogen specific'
    # models, but maybe there's a scientific reason to do so:
    
    # Separate tests for each pathogen:
    prev7A.glmer = glmer(seroexact ~ Social.System + Host.Species + (1|resid),
                        family=binomial(link="logit"), weights=N_indiv, 
                        data = prev2[prev2$Social.System != "Soc_D" & prev$Pathogen == "Path_A",])
    summary(prev7A.glmer)
    # Social System B looks different from Social System A in pathogen A prevalance:
    
    # Calculate the odds of having Pathogen A for Social System A vs B
    beta7A<-fixef(prev7A.glmer)
    exp(-beta7A[2]) #negative sign means odds of A:B instead of B:A
    # So animals with Social System A have about 25 times the odds of
    # animals with social system B of having Pathogen A
    
    # Test for Pathogen B:
    prev7B.glmer = glmer(seroexact ~ Social.System + Host.Species + (1|resid),
                        family=binomial(link="logit"), weights=N_indiv, 
                        data = prev2[prev2$Social.System != "Soc_D" & prev$Pathogen == "Path_B",])
    summary(prev7B.glmer)
    # The only significant effects are species-specific, which are not of interest
    
    # Let's return to prev4.glmer, which models both pathogens:
    summary(prev4.glmer)
    
    # The only significant fixed effect in prev4.glmer is Pathogen.
    beta4<-fixef(prev4.glmer)
    
    # For a randomly selected animal, the odds of having Pathogen B to having Pathogen A are:
    exp(beta4[2])
    
    # That's about as much as you can interpret with the data she has.
    
    # To answer the Advisor's request for variance components:
    # Residual variance is:
    getME(prev4.glmer, "theta")^2
    
    # You can't do a good job of estimating species variance with these data.
    # If her advisor won't listen, then you can tell him that your estimate is:
    getME(prev3.glmer, "theta")[2]^2
    # But it's a really crappy estimate.
    
    # There is no such thing as a variance component for Social System because
    # it's a fixed effect.  But you can get its sum of squares:
    anova(prev4.glmer)