Este script primero genera un conjunto de datos simulados ('hair'). Luego, realiza una serie de análisis utilizando PROC GLIMMIX para comparar modelos lineales y logísticos con diferentes tipos de efectos aleatorios (G-side vs R-side). Finalmente, agrega los datos para ajustar un modelo complejo a través de PROC NLMIXED. Nota técnica: Una inconsistencia de variable ('id' vs 'subj_id') está presente en la sección de clasificación y agregación.
Análisis de datos
Type : CREATION_INTERNE
Todos los datos son generados por el primer DATA STEP usando funciones aleatorias (normal, uniform).
1 Bloque de código
DATA STEP Data
Explicación : Generación del conjunto de datos de trabajo 'hair' que contiene medidas repetidas simuladas (1000 sujetos, 8 semanas).
¡Copiado!
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 Bloque de código
PROC GLIMMIX
Explicación : Modelo mixto lineal con intercepto aleatorio por sujeto (G-side).
¡Copiado!
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 Bloque de código
PROC GLIMMIX
Explicación : Modelo mixto lineal que modela la estructura de covarianza residual (R-side, tipo Compound Symmetry).
¡Copiado!
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 Bloque de código
PROC GLIMMIX
Explicación : Modelo logístico mixto con efectos aleatorios G-side.
¡Copiado!
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 Bloque de código
PROC GLIMMIX
Explicación : Modelo logístico mixto con efectos aleatorios R-side.
¡Copiado!
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 Bloque de código
PROC SORT
Explicación : Clasificación de datos para la agregación. (Atención: la variable 'id' parece incorrecta en comparación con el 'subj_id' creado).
¡Copiado!
proc sort data=hair;
by id;
run;
1
PROC SORTDATA=hair;
2
BY id;
3
RUN;
7 Bloque de código
PROC MEANS Data
Explicación : Agregación de datos: suma de la variable respuesta 'y' por identificador.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación : Preparación de datos agregados para PROC NLMIXED (cálculo de frecuencias y renombramiento).
¡Copiado!
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 Bloque de código
PROC NLMIXED
Explicación : Modelado no lineal mixto que define una función de verosimilitud logarítmica personalizada (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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.