1 Opinión sobre Relaciones Sexuales Prematrimoniales y Control

Anuncio
Opinión sobre Relaciones Sexuales Prematrimoniales y Control de Natalidad. En un
estudio sobre control de natalidad en adolescentes se llevó a cabo una encuesta de la que se
extraejeron los datos correspondientes a la variable PREMSEX: opinión sobre las relaciones
sexuales prematrimoniales (codificada según: 1=siempre es un error, 2=casi siempre es un
error, 3=sólo a veces es un error, 4=nunca es un error) y a la variable CNATALID: opinión
sobre si los adolescentes deberían tener acceso a métodos de control de natalidad (codificada
según: 1=fuerte desacuerdo, 2=desacuerdo, 3=acuerdo, 4=fuerte acuerdo).
Los datos se presentan a continuación, en formato PREMSEX, CNATALID, FRECUENCIA:
1 1
3 1
81
18
1 2
3 2
68
41
1 3 60
3 3 74
1 4 38
3 4 42
2 1
4 1
24
36
2 2
4 2
26
57
2 3 29
4 3 161
2 4 14
4 4 157
¿Cómo podemos explicar las relaciones entre ambas variables?
> y <- c(81,68,60,38,24,26,29,14,18,41,74,42,36,57,161,157)
> ps <- gl( 4, 4, length(y) ) ### premsex
> cn <- gl( 4, 1, length(y) ) ### cnatalid
> rbind( y, ps, cn )
y
ps
cn
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16]
81
68
60
38
24
26
29
14
18
41
74
42
36
57
161
157
1
1
1
1
2
2
2
2
3
3
3
3
4
4
4
4
1
2
3
4
1
2
3
4
1
2
3
4
1
2
3
4
> ### tabla de contingencia 4*4
> tabla.y <- xtabs( y ~ ps + cn )
> addmargins( tabla.y )
cn
ps
1
2
3
4
1
81 68 60 38
2
24 26 29 14
3
18 41 74 42
4
36 57 161 157
Sum 159 192 324 251
Sum
247
93
175
411
926
> summary( tabla.y ) ### test de independencia
Call: xtabs(formula = y ~ ps + cn)
Number of cases in table: 926
Number of factors: 2
Test for independence of all factors:
Chisq = 128.68, df = 9, p-value = 2.212e-23
Se rechaza la independencia entre ambas variables.
>
>
>
>
### proporciones de la tabla ###
p.filas <- prop.table( tabla.y, margin=1 )
p.col <- prop.table( tabla.y, margin=2 )
round( addmargins( prop.table( tabla.y ) ), 3 )
Proporciones totales:
cn
ps
1
2
3
1
0.087 0.073 0.065
2
0.026 0.028 0.031
3
0.019 0.044 0.080
4
0.039 0.062 0.174
Sum 0.172 0.207 0.350
4
0.041
0.015
0.045
0.170
0.271
Sum
0.267
0.100
0.189
0.444
1.000
1
4
3
2
> round( addmargins( p.filas ), 3 )
cn
ps
1
2
3
4
Sum
1
0.328 0.275 0.243 0.154 1.000
2
0.258 0.280 0.312 0.151 1.000
3
0.103 0.234 0.423 0.240 1.000
4
0.088 0.139 0.392 0.382 1.000
Sum 0.776 0.928 1.369 0.926 4.000
1
opinión sobre relaciones sexuales prematrimoniales
Proporciones por filas:
0.0
0.2
0.4
0.6
0.8
1.0
1.0
proporciones en 4 clases de cnatalid
0.6
0.0
0.2
Sum
1.200
0.432
0.722
1.646
4.000
0.4
3 )
proporciones en 4 clases de premsex
> round( addmargins( p.col ),
cn
ps
1
2
3
4
1
0.509 0.354 0.185 0.151
2
0.151 0.135 0.090 0.056
3
0.113 0.214 0.228 0.167
4
0.226 0.297 0.497 0.625
Sum 1.000 1.000 1.000 1.000
0.8
Proporciones por columnas:
1
2
3
4
opinión sobre control de natalidad
>
>
+
+
>
>
+
+
par(pty="s")
barplot( t(p.filas), horiz=T, space=0.5,
xlab="proporciones en 4 clases de cnatalid",
ylab="opinión sobre relaciones sexuales prematrimoniales")
x11()
barplot( p.col, horiz=F, space=0.5,
ylab="proporciones en 4 clases de premsex",
xlab="opinión sobre control de natalidad")
2
> ### modelo de Asociación Uniforme ###
> ps.num <- as.numeric( ps )
> cn.num <- as.numeric( cn )
> v <- ps.num*cn.num
> m.AU <- glm( y ~ ps + cn + v, family=poisson (link=log) )
> summary( m.AU )
Call:
glm(formula = y ~ ps + cn + v, family = poisson(link = log))
Deviance Residuals:
Min
1Q
-1.35834 -0.91606
Median
0.07972
3Q
0.61648
Coefficients:
Estimate Std. Error z value
(Intercept) 4.10684
0.08951 45.881
ps2
-1.64596
0.13473 -12.216
ps3
-1.77002
0.16464 -10.751
ps4
-1.75369
0.23432 -7.484
cn2
-0.46411
0.11952 -3.883
cn3
-0.72452
0.16201 -4.472
cn4
-1.87966
0.24910 -7.546
v
0.28584
0.02824 10.122
--Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01
Max
1.57618
Pr(>|z|)
< 2e-16
< 2e-16
< 2e-16
7.20e-14
0.000103
7.74e-06
4.50e-14
< 2e-16
***
***
***
***
***
***
***
***
‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 431.078
Residual deviance: 11.534
AIC: 118.21
on 15
on 8
degrees of freedom
degrees of freedom
Number of Fisher Scoring iterations: 4
Test de juste del modelo m.AU: ¿Es lícito en este caso?
> 1-pchisq( deviance(m.AU), m.AU$df.residual )
[1] 0.1732532
> anova( m.AU, test="Chisq" )
Analysis of Deviance Table
Model: poisson, link: log
Response: y
Terms added sequentially (first to last)
NULL
ps
cn
v
Df Deviance Resid. Df Resid. Dev
15
431.08
3
236.30
12
194.78
3
67.13
9
127.65
1
116.12
8
11.53
P(>|Chi|)
6.012e-51
1.759e-14
4.476e-27
El modelo de Asociación Uniforme ofrece un buen ajuste a la tabla observada.
3
> npar.AU <- length( m.AU$coef ) ### número de parámetros del modelo
> vcoef <- m.AU$coef[npar.AU]
> se.vcoef <- sqrt( vcov( m.AU )[npar.AU, npar.AU] )
>
>
>
>
>
alfa <- 0.05; confianza <- 1-alfa;
### IC's de Wald y basados en la verosimilitud perfil ###
v.ic.inf <- vcoef - qnorm(1-alfa/2)*se.vcoef
v.ic.sup <- vcoef + qnorm(1-alfa/2)*se.vcoef
round( cbind( vcoef, se.vcoef, v.ic.inf, v.ic.sup, confianza ), 4 )
vcoef se.vcoef v.ic.inf v.ic.sup confianza
v 0.2858
0.0282
0.2305
0.3412
0.95
> v.ic.perfil <- as.numeric( confint( m.AU, parm = "v" ) )
Waiting for profiling to be done...
> v.ic.perfil
[1] 0.2313044 0.3420855
>
>
>
>
>
### bajo m.AU: OR de tabla 2*2 de elementos adyacentes e IC perfil ###
ORadyacente <- exp( vcoef )
ORady.ic.inf <- exp( v.ic.perfil[1] )
ORady.ic.sup <- exp( v.ic.perfil[2] )
round( cbind( ORadyacente, ORady.ic.inf, ORady.ic.sup), 4 )
v
ORadyacente ORady.ic.inf ORady.ic.sup
1.3309
1.2602
1.4079
> ### bajo m.AU: valores esperados estimados ###
> predAU <- matrix( m.AU$fitted.values, 4, 4, byrow=T )
> round( addmargins( predAU ), 3 )
[,1]
[,2]
[,3]
[,4] [,5]
[1,] 80.857 67.654 69.396 29.094 247
[2,] 20.750 23.107 31.543 17.600
93
[3,] 24.394 36.152 65.681 48.773 175
[4,] 33.000 65.088 157.379 155.533 411
[5,] 159.000 192.000 324.000 251.000 926
> ### OR's respecto de la clase (1,1) ###
> round( OR.11( predAU ), 4 )
[,1]
[,2]
[,3]
[,4]
[1,]
1 1.0000 1.0000 1.0000
[2,]
1 1.3309 1.7712 2.3573
[3,]
1 1.7712 3.1372 5.5567
[4,]
1 2.3573 5.5567 13.0988
>
>
>
>
>
>
### bajo m.AU: OR de subtablas 2*2 iguales a exp(dist*vcoef) ###
### con dist la "distancia" entre clases. (k-i)*(l-j) ###
dist <- c( 1, 2, 3, 4, 6, 9 )
OR.dist <- exp( dist*vcoef )
OR.dist.inf <- exp( dist*v.ic.perfil[1] )
OR.dist.sup <- exp( dist*v.ic.perfil[2] )
> round( cbind( dist, OR.dist, OR.dist.inf, OR.dist.sup ), 4 )
dist OR.dist OR.dist.inf OR.dist.sup
[1,]
1 1.3309
1.2602
1.4079
[2,]
2 1.7712
1.5882
1.9821
[3,]
3 2.3573
2.0015
2.7906
[4,]
4 3.1372
2.5224
3.9288
[5,]
6 5.5567
4.0061
7.7874
[6,]
9 13.0988
8.0184
21.7316
4
> ### Modelo QS de cuasi-simetría o Asociación Simétrica ###
> sime <- v; sime[6] <- 7
> sime <- as.factor( sime )
> m.QS <- glm( y ~ ps + cn + sime, family=poisson )
> summary( m.QS )
Call:
glm(formula = y ~ ps + cn + sime, family = poisson)
Deviance Residuals:
1
2
0.000e+00 -4.654e-01
8
9
-4.736e-02 -1.910e-01
15
16
2.308e-01
1.429e-07
3
1.067e-01
10
6.016e-01
4
5.152e-01
11
9.424e-08
Coefficients: (3 not defined because of
Estimate Std. Error z value
(Intercept)
4.3944
0.1111 39.550
ps2
-2.0172
0.1875 -10.760
ps3
-0.8642
0.1458 -5.926
ps4
0.3874
0.1079
3.590
cn2
-0.7419
0.1558 -4.761
cn3
0.2813
0.1243
2.264
cn4
0.2744
0.1079
2.543
sime2
0.6229
0.1789
3.482
sime3
-0.5952
0.1562 -3.811
sime4
-1.1160
0.1350 -8.269
sime6
0.8298
0.2139
3.880
sime7
1.6227
0.3355
4.836
sime8
NA
NA
NA
sime9
0.4925
0.2140
2.301
sime12
NA
NA
NA
sime16
NA
NA
NA
Null deviance: 431.0781
Residual deviance:
2.5505
AIC: 119.23
on 15
on 3
5
8.463e-01
12
-4.391e-01
6
-3.650e-08
13
-5.007e-01
7
-6.655e-01
14
2.360e-02
singularities)
Pr(>|z|)
< 2e-16 ***
< 2e-16 ***
3.10e-09 ***
0.000330 ***
1.92e-06 ***
0.023580 *
0.010985 *
0.000497 ***
0.000139 ***
< 2e-16 ***
0.000104 ***
1.32e-06 ***
NA
0.021365 *
NA
NA
degrees of freedom
degrees of freedom
Number of Fisher Scoring iterations: 4
El modelo de cuasi-simetría proporciona un buen ajuste global a la tabla observada y
es fácilmente interpretable como modelo de asociación simétrica, pero ajusta peor
que el modelo de asociación uniforme, si consideramos el equilibrio entre ajuste y
complejidad dado por el AIC.
> anova( m.QS, test="Chisq" )
Analysis of Deviance Table
Model: poisson, link: log
Response: y
Terms added sequentially (first to last)
NULL
ps
cn
sime
Df Deviance Resid. Df Resid. Dev
15
431.08
3
236.30
12
194.78
3
67.13
9
127.65
6
125.10
3
2.55
P(>|Chi|)
6.012e-51
1.759e-14
1.379e-24
5
> ### tabla de valores esperados estimados bajo m.QS
> predQS <- matrix( m.QS$fitted.values, 4, 4, byrow=T )
> round( addmargins( predQS ), 4 )
[,1]
[,2]
[,3]
[,4] [,5]
[1,] 81.0000 71.9107 59.1776 34.9117 247
[2,] 20.0893 26.0000 32.7327 14.1780
93
[3,] 18.8224 37.2673 74.0000 44.9103 175
[4,] 39.0883 56.8220 158.0897 157.0000 411
[5,] 159.0000 192.0000 324.0000 251.0000 926
> ### bajo m.QS las OR de subtablas 2*2 de clases simétricas son iguales
> predQS[1,2]*predQS[4,3]/(predQS[4,2]*predQS[1,3])
[1] 3.380825
> predQS[2,1]*predQS[3,4]/(predQS[2,4]*predQS[3,1])
[1] 3.380825
> ### las variables dummy sime8, sime12 y sime16 son superfluas
> model.matrix(m.QS)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(Intercept) ps2 ps3 ps4 cn2 cn3 cn4 sime2 sime3 sime4 sime6 sime7 sime8 sime9 sime12 sime16
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
1
0
0
1
0
0
0
0
0
0
1
0
0
0
0
1
1
0
0
0
1
0
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
1
0
0
0
0
0
1
0
0
0
1
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
1
0
0
0
0
0
0
0
1
0
0
1
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
1
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
1
1
0
0
0
0
0
0
0
1
0
0
0
1
0
0
1
0
1
0
0
0
0
0
0
0
0
1
0
1
0
0
1
0
0
1
0
0
0
0
0
0
0
0
1
attr(,"assign")
[1] 0 1 1 1 2 2 2 3 3 3 3 3 3 3 3 3
attr(,"contrasts")
attr(,"contrasts")$ps
[1] "contr.treatment"
attr(,"contrasts")$cn
[1] "contr.treatment"
attr(,"contrasts")$sime
[1] "contr.treatment"
>
>
>
>
explica <- model.matrix(m.QS)[,c(1:12, 14)]
ee <- explica[,8:13]
s1 <- ee[,1]; s2 <- ee[,2]; s3 <- ee[,3]; s4 <- ee[,4];
s5 <- ee[,5]; s6 <- ee[,6]
> m.QS2 <- glm( y ~ ps + cn + s1+s2+s3+s4+s5+s6, family=poisson )
> summary( m.QS2 )
Call:
glm(formula = y ~ ps + cn + s1 + s2 + s3 + s4 + s5 + s6, family = poisson)
Deviance Residuals:
1
2
0.000e+00 -4.654e-01
8
9
3
1.067e-01
10
4
5.152e-01
11
5
8.463e-01
12
6
-3.650e-08
13
7
-6.655e-01
14
6
-4.736e-02
15
2.308e-01
-1.910e-01
16
1.429e-07
6.016e-01
9.424e-08
-4.391e-01
-5.007e-01
2.360e-02
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept)
4.3944
0.1111 39.550 < 2e-16 ***
ps2
-2.0172
0.1875 -10.760 < 2e-16 ***
ps3
-0.8642
0.1458 -5.926 3.10e-09 ***
ps4
0.3874
0.1079
3.590 0.000330 ***
cn2
-0.7419
0.1558 -4.761 1.92e-06 ***
cn3
0.2813
0.1243
2.264 0.023580 *
cn4
0.2744
0.1079
2.543 0.010985 *
s1
0.6229
0.1789
3.482 0.000497 ***
s2
-0.5952
0.1562 -3.811 0.000139 ***
s3
-1.1160
0.1350 -8.269 < 2e-16 ***
s4
0.8298
0.2139
3.880 0.000104 ***
s5
1.6227
0.3355
4.836 1.32e-06 ***
s6
0.4925
0.2140
2.301 0.021365 *
Null deviance: 431.0781
Residual deviance:
2.5505
AIC: 119.23
on 15
on 3
degrees of freedom
degrees of freedom
Number of Fisher Scoring iterations: 4
> anova( m.QS2, test="Chisq" )
Analysis of Deviance Table
Model: poisson, link: log
Response: y
Terms added sequentially (first to last)
NULL
ps
cn
s1
s2
s3
s4
s5
s6
Df Deviance Resid. Df Resid. Dev
15
431.08
3
236.30
12
194.78
3
67.13
9
127.65
1
13.34
8
114.31
1
17.10
7
97.21
1
67.48
6
29.74
1
1.32
5
28.41
1
20.53
4
7.88
1
5.33
3
2.55
P(>|Chi|)
6.012e-51
1.759e-14
2.598e-04
3.544e-05
2.133e-16
0.25
5.874e-06
0.02
> ### Modelo m.SI de simetría
> sime <- v; sime[6] <- 7
> sime <- as.factor( sime )
> m.SI <- glm( y ~ sime, family=poisson )
> summary( m.SI )
Null deviance: 431.08
Residual deviance: 150.27
AIC: 260.95
on 15
on 6
degrees of freedom
degrees of freedom
El modelo de simetría proporciona muy mal ajuste.
7
Aplicación de SAS
options pagesize=500;
data A;
input P C fobs @@;
AU = P*C; * para el modelo de Asociacion Uniforme;
cards;
1 1 81
1 2 68
1 3 60
1 4 38
2 1 24
2 2 26
2 3 29
2 4 14
3 1 18
3 2 41
3 3 74
3 4 42
4 1 36
4 2 57
4 3 161 4 4 157
;
proc freq; weight fobs;
table P*C / chisq;
title Tabla: Prematrimoniales y Control de natalidad;
run;
* modelo log-lineal de Asociacion Uniforme;
proc genmod data=A; class P C;
model fobs = P C AU / dist=poisson link=log covb xvars;
output out=sal_AU predicted=frec_AU xbeta=xbeta stdxbeta=stdxbeta
resdev=resdev l=inf u=sup;
title Modelo log-lineal de Asociacion Uniforme;
run;
proc print data=sal_AU; var P C AU fobs frec_AU xbeta inf sup; run;
* Tabla de valores observados;
proc freq data = sal_AU; weight fobs;
table P*C / nopercent norow nocol;
title Tabla de valores Observados;
run;
* Tabla de valores esperados bajo Asociacion Uniforme;
proc freq data=sal_AU; weight frec_AU;
table P*C / nopercent norow nocol;
title Tabla de valores esperados bajo Asociacion Uniforme;
run;
8
Descargar