Ce script génère d'abord un jeu de données simulé ('hair'). Il effectue ensuite une série d'analyses à l'aide de PROC GLIMMIX pour comparer des modèles linéaires et logistiques avec différents types d'effets aléatoires (G-side vs R-side). Enfin, il agrège les données pour ajuster un modèle complexe via PROC NLMIXED. Note technique : Une incohérence de variable ('id' vs 'subj_id') est présente dans la section de tri et d'agrégation.
Analyse des données
Type : CREATION_INTERNE
Toutes les données sont générées par le premier DATA STEP à l'aide de fonctions aléatoires (normal, uniform).
1 Bloc de code
DATA STEP Data
Explication : Génération du jeu de données de travail 'hair' contenant des mesures répétées simulées (1000 sujets, 8 semaines).
Copié !
data hair;
seed = 1999;
beta = 1.386294; *--- P is approximately 0.8;
do Subj_id=1 to 1000;
s1 = 2*normal(seed);
s2 = sqrt(1.5)*normal(seed);
do week=1 to 8;
score = round(s1 + normal(seed), 0.01);
p = 1/(1+exp(-beta - s2));
y = 0;
u = uniform(seed);
if u < p then y = 1;
output;
end;
end;
keep subj_id score y;
run;
1
DATA hair;
2
seed = 1999;
3
beta = 1.386294; *--- P is approximately 0.8;
4
DO Subj_id=1 to 1000;
5
s1 = 2*normal(seed);
6
s2 = sqrt(1.5)*normal(seed);
7
DO week=1 to 8;
8
score = round(s1 + normal(seed), 0.01);
9
p = 1/(1+exp(-beta - s2));
10
y = 0;
11
u = uniform(seed);
12
IF u < p THEN y = 1;
13
OUTPUT;
14
END;
15
END;
16
keep subj_id score y;
17
RUN;
2 Bloc de code
PROC GLIMMIX
Explication : Modèle mixte linéaire avec intercept aléatoire par sujet (G-side).
Copié !
ods html;
title "*** Linear Mixed Model with G-side Random Effects ***";
proc glimmix data=hair;
class subj_id;
model score = / s;
random int / subject=subj_id;
run;
1
ods html;
2
title "*** Linear Mixed Model with G-side Random Effects ***";
3
PROC GLIMMIXDATA=hair;
4
class subj_id;
5
model score = / s;
6
random int / subject=subj_id;
7
RUN;
3 Bloc de code
PROC GLIMMIX
Explication : Modèle mixte linéaire modélisant la structure de covariance résiduelle (R-side, type Compound Symmetry).
Copié !
title "*** Linear Mixed Model with R-side Random Effects ***";
proc glimmix data=hair;
class subj_id;
model score = / s;
random _residual_ / subject=subj_id type=cs;
run;
1
title "*** Linear Mixed Model with R-side Random Effects ***";
2
PROC GLIMMIXDATA=hair;
3
class subj_id;
4
model score = / s;
5
random _residual_ / subject=subj_id type=cs;
6
RUN;
4 Bloc de code
PROC GLIMMIX
Explication : Modèle logistique mixte avec effets aléatoires G-side.
Copié !
title "*** Logistic Model with G-side Random Effects ***";
proc glimmix data=hair;
class subj_id;
model y (ref='0') = / dist=binary link=logit s;
random int / subject=subj_id;
estimate 'P' int 1 / ilink;
run;
1
title "*** Logistic Model with G-side Random Effects ***";
2
PROC GLIMMIXDATA=hair;
3
class subj_id;
4
model y (ref='0') = / dist=binary link=logit s;
5
random int / subject=subj_id;
6
estimate 'P' int 1 / ilink;
7
RUN;
5 Bloc de code
PROC GLIMMIX
Explication : Modèle logistique mixte avec effets aléatoires R-side.
Copié !
title "*** Logistic Model with R-side Random Effects ***";
proc glimmix data=hair;
class subj_id;
model y (ref='0')= / dist=binary link=logit s;
random _residual_ / subject=subj_id type=cs;
estimate 'P' int 1 / ilink;
run;
ods html close;
1
title "*** Logistic Model with R-side Random Effects ***";
2
PROC GLIMMIXDATA=hair;
3
class subj_id;
4
model y (ref='0')= / dist=binary link=logit s;
5
random _residual_ / subject=subj_id type=cs;
6
estimate 'P' int 1 / ilink;
7
RUN;
8
ods html close;
6 Bloc de code
PROC SORT
Explication : Tri des données pour l'agrégation. (Attention : la variable 'id' semble incorrecte par rapport au 'subj_id' créé).
Copié !
proc sort data=hair;
by id;
run;
1
PROC SORTDATA=hair;
2
BY id;
3
RUN;
7 Bloc de code
PROC MEANS Data
Explication : Agrégation des données : somme de la variable réponse 'y' par identifiant.
Copié !
proc means data=hair sum noprint;
by id;
var y;
output out=sum_hair sum=t;
run;
1
PROC MEANSDATA=hair sum noprint;
2
BY id;
3
var y;
4
OUTPUT out=sum_hair sum=t;
5
RUN;
8 Bloc de code
DATA STEP Data
Explication : Préparation des données agrégées pour PROC NLMIXED (calcul des fréquences et renommage).
Copié !
data sum_hair;
set sum_hair;
m_t = _freq_ - t;
rename _freq_ = m;
drop _type_;
run;
1
DATA sum_hair;
2
SET sum_hair;
3
m_t = _freq_ - t;
4
rename _freq_ = m;
5
drop _type_;
6
RUN;
9 Bloc de code
PROC NLMIXED
Explication : Modélisation non-linéaire mixte définissant une fonction de log-vraisemblance personnalisée (ll).
ll = z + log( pi*p1**t*p1c**m_t + pic*p2**t*p2c**m_t );
11
model t ~ general( ll );
12
estimate 'P'1/(1+exp(-beta));
13
estimate 'Rho*Rho' rho*Rho;
14
RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.