Good afternoon,
Thank you for providing this SAS support online platform. I would be grateful if anyone could help me with this question.
I am looking at obtaining the broad sense heritability of a plant trait y measured under field conditions in four different environments, using proc glimmix and the heritability concept and basic SAS code (proc mixed) presented by Holland et al 2010.
The random effects of my model include: environment, rep(environment), genotype, genotype*environment and the covariance parameters are environment, rep(environment), genotype (Vg), genotype*environment (Vge) error (Vr).
The idea is to retrieve the estimate of the covariance parameters and obtain the heritability estimates via the formula : h2 = Vg / (Vge + Vg + Vr).
The traits I am looking at corresponds to proportion data so I am specifying a beta distribution with a logit link.
I have no problem using this code and obtaining my estimates with a normal or lognormal distributions.
However, I am wondering if any post-processing of the estimates of the covariance parameters are necessary under the beta distribution before being able to compute the heritability.
Please see my code below. Thank you for your support, Daisy
data first;
input env$ rep$ genotype$ RG;
datalines;
[...]
run;
*Estimate heritability from proc glimmix ;
proc glimmix data = first asycov;
title 'estimating heritability & covtest in Mixed Model';
class env rep genotype ;
model y = /dist = beta link = logit ;
random env rep(env) genotype genotype*env ;
ods exclude AsyCov CovParm;
ods output asycov = gl_covmat covparms = gl_estmat;
Run;
Data gl_estmat (drop=StdErr);
set gl_estmat;
Run;
proc iml;
start seh(V, C, LG, LP, H, SE, Vp, Vg) ;
Vp = LP`*V;
Vg = LG`*V;
H = VG/Vp;
d = (1/Vp)*(LG - (LP*H));
VH = d`*C*d;
SE = sqrt(VH);
finish seh;
use gl_estmat;
read all into V;
use gl_covmat;
read all into C;
* Note that SAS introduces an extra first column into the matrix which must be removed;
C = C(|1:nrow(C), 2:ncol(C)|);
*order of variance components in v and c matrices is V(E), V(RnestedinE), V(G), V(GE), V(error); *[P=G+GE+error];
LG = {0, 0, 1, 0, 0};
LP = {0, 0, 1, 1, 1};
call seh(V, C, LG, LP, H, SE, Vp, Vg);
print "Heritability on a Plot Basis", H, SE, Vp, Vg;
run;
This may be just whistling in the dark, but I don't see a way to "back-transform" the variance components to the original scale in any meaningful way that still preserves the modeling applied. If you have such a method, I would be curious to see it in action. My inclination, given that you have a method, would be to calculate the heritability using the result VCs and the "original scale" VCs and see which makes more sense biologically. This is a great question, and may well have been addressed in the R community. Have you checked there?
SteveDenham
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
ANOVA, or Analysis Of Variance, is used to compare the averages or means of two or more populations to better understand how they differ. Watch this tutorial for more.
Find more tutorials on the SAS Users YouTube channel.