library(here)library(tidyverse)library(lme4)library(glmmTMB)library(lmerTest)# fittare un modello specificato con formula per ogni id (|cluster)# model = lm/glm (o altro)# args = altri argomenti dentro la funzione (e.g., family = )# ad esempio, per stimare l'effetto di x1 + x2 per ogni cluster# y ~ x1 + x2 | clusterfit_by_cluster <-function(formula, data, model =NULL, args =NULL){if(is.null(model)){ model <- lm } parts <- lme4:::modelFormula(formula) groups <-as.character(parts$groups) datal <-split(data, data[[groups]]) args$formula <- parts$modellapply(datal, function(x){do.call(model, args =c(args, list(data = x))) })}dat <-readRDS(here("data/emoint.rds"))dat <-filter(dat, emotion_lbl !="neutral")dat$intensity0 <- (dat$intensity/10) -1fit1 <-glmer(acc ~ intensity0 + (intensity0|id),data = dat, family =binomial(link ="logit"))fit10 <-glmer(acc ~1+ (1|id),data = dat, family =binomial(link ="logit"))summary(fit1)
Generalized linear mixed model fit by maximum likelihood (Laplace
Approximation) [glmerMod]
Family: binomial ( logit )
Formula: acc ~ intensity0 + (intensity0 | id)
Data: dat
AIC BIC logLik -2*log(L) df.resid
30742.3 30783.2 -15366.2 30732.3 26265
Scaled residuals:
Min 1Q Median 3Q Max
-6.2930 -0.7394 0.3993 0.7623 2.1703
Random effects:
Groups Name Variance Std.Dev. Corr
id (Intercept) 0.069921 0.26443
intensity0 0.007283 0.08534 -0.43
Number of obs: 26270, groups: id, 71
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.09351 0.04058 -26.94 <2e-16 ***
intensity0 0.33490 0.01148 29.17 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Correlation of Fixed Effects:
(Intr)
intensity0 -0.545
Abbiamo inoltre visto alcuni esempi di Simpson’s Paradox (non nella sua forma più estrema) e come centrare le variabili in modo da separare l’effetto tra i cluster e dentro i cluster:
Esempio con esperimento simulato di sensibilità al contrasto qmd