[R-sig-ME] Question about flexible LME4 Variance-Covariance Structure
Peter Claussen
d@kot@judo @end|ng |rom m@c@com
Mon Aug 16 23:12:00 CEST 2021
Jared,
I’ll preface this by saying I’m the biometrician for GDM Solutions, and we provide software for managing agronomic trials. Our software is used by a wide range of scientists, many who collaborate with companies like BCS (and, IIRC, BCS holds a large number of licenses for our software). I think I’m familiar with the type of problem you’re trying to solve. We provide an interface for diagnostic screening of individual trials, including RCB designs, and we use R as the computational engine; we also write R scripts programmatically for independent analysis.
That said, I wouldn’t use lmer for this. I think lme might give you what you’re looking for. Try
lme(NUM_VALUE ~ TREATMENT, random = ~ 1 | BlockingName, data = zdf, weights=varIdent(form= ~ 1| BlockingName)
I would avoid specifying TREATMENT as a random effect to ’trick’ lmer into calculating variances. You might get numbers, but they don’t correspond to the correct model, so you really can’t be certain the variances are correct. The code I’ve given above should allow you to keep TREATMENT as fixed but will give ratios of residual variance within replicates. From an example trial, I get,
Linear mixed-effects model fit by REML
Data: ARMdata
Log-restricted-likelihood: 5.914592
Fixed: assessment18 ~ treatment
(Intercept) treatment2 treatment3 treatment4 treatment5 treatment6 treatment7 treatment8 treatment9 treatment10
0.9841966 -0.8691926 -0.8234544 -0.9225589 -0.9772064 -0.8645547 -0.9772064 -0.9772064 -0.9772064 -0.7643471
treatment11 treatment12
-0.9657557 -0.9772064
Random effects:
Formula: ~1 | replicate
(Intercept) Residual
StdDev: 0.02308651 0.134405
Variance function:
Structure: Different standard deviations per stratum
Formula: ~1 | replicate
Parameter estimates:
1 2 3 4 5 6
1.0000000 1.5128266 2.3479912 0.6976083 2.3369190 0.8236288
Number of Observations: 72
Number of Groups: 6
I’m making some assumptions about what you intend to do with the variances, but those would be beyond the scope of this group, I think. You can direct questions relating to those assumptions to me at Pete using gdmdata.com <mailto:Pete using gdmdata.com>
Cheers,
> On Aug 11, 2021, at 6:19 PM, Jared Anderson <jared.anderson.ext using bayer.com> wrote:
>
> Hello All,
>
> I am a Data Scientist with Bayer Crop Science and I deal often with generalized linear mixed models in my role. I am new to this subscription group and wanted to reach out because I am trying to fit two different kinds of models on the same data and use their residual variances as a statistic for assessing data quality.
> For our variance-ratio statistic, two slightly different linear models are used. Both models are simple single treatment factor randomized complete block design models. The difference is in the assumed covariance structure of the residuals.
> The first model makes the standard assumption that the residuals all have the same variance, while the second model assumes that the residuals variances differ from rep to rep.
> Model 1: y = m + T + R + e, where m = overall mean, T = treatment effect, R = blocking effect and e = random error which is assumed to be homoschedastic: cov(e) = common variance*I = Diag(common variance).
> Model 2: y = m + T + R + e, where m = overall mean, T = treatment effect, R = blocking effect and e = random error which is assumed to be heteroschedastic: cov(e) = D(var[i]) i=1, …, number of reps. The variance of the residuals is different for each rep.
> VR[i] = var[i]/common variance, one VR value for each rep.
>
> I have been able to build the desired Model1 in LME4
> Formula_LME4 <- as.formula(paste0(zParams$value,” ~ 1 + (1|”,zParams$factorLevelId,”) + (1|”BlockingName,”)”))
> HomoS_LME4 <- lmer(Formula_LME4,data=zdf) #covariance structure is the same for all reps
> (Treating the fixed effects (factorLevelId) as random is a way to trick the routines into calculating the needed variances.)
>
>
> Where I am running into a problem and was hoping to get your advice: I cannot seem to implement Model 2 successfully
> I think the LME4 Heteroscedastic formula is supposed to be this, if I understand it correctly:
> lmer(NUM_VALUE ~ 1 + (1 | TREATMENT) + (1 | BlockingName) + (0 | BlockingName),data=zdf)
> But it is throwing an error:
> Linear mixed model fit by REML ['lmerMod']
> Formula: NUM_VALUE ~ 1 + (1 | TREATMENT) + (1 | BlockingName) + (0 | BlockingName)
> Data: zdf
> REML criterion at convergence: 1384.89
> Error in thl[[i]] : subscript out of bounds
> And I was wondering if you’ve ever come across the error above?
>
>
> If it helps, back when we leveraged Asreml licenses for our work, I was able to generate Model 2 this way:
>
> fixedFormula_ASREML <- as.formula(paste0(zParams$value," ~ 1"))
> randomFormula_ASREML <- as.formula(paste0(" ~ ",zParams$factorLevelId," + ", BlockingName))
> covFormula_ASREML <- as.formula(paste0(" ~ at(", BlockingName, "):units"))
>
> HeteroS_ASREML <- asreml(fixed = fixedFormula_ASREML,
> random = randomFormula_ASREML,
> rcov = covFormula_ASREML,
> data = zdf)
>
>
> Best,
> Jared A.
>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-mixed-models using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
[[alternative HTML version deleted]]
More information about the R-sig-mixed-models
mailing list