[R-es] como ponderar casos en R

jose luis cañadas canadasreche en gmail.com
Sab Nov 5 16:28:44 CET 2011


Hola a tod en s.

Se trata de un tema que lleva tiempo rondándome la cabeza, pero que
nunca he encontrado una solución. Se que existe el paquete survey, pero
me gustaría saber si existe algo más sencillo.

Por ejemplo, estaba analizando los últimos datos de la encuesta de
equipamientos tecnológicos del INE y dicho fichero tiene dos variables
con factores de elevación, una para hogares y otra para las personas
informantes.

Si yo hago una regresión logística, (es sólo un ejemplo) del uso de
internet de las personas que contestan a la encuesta y con variable
independiente la edad.
Si lo hago sin tener en cuenta los factores de elevación, obtengo ( para
datos de Andalucía)

uso_int <- datos$USO_INT
uso_int <- ifelse(uso_int==1,1,0)
sexo <- datos$SEXO
edad <- datos$EDAD
tamhogar <- datos$TAMHOG
factor.elev <- datos$FACTOR_P
factor.hog <- datos$FACTOR_H
modelo.1 <- glm(uso_int~edad,binomial)

1> summary(modelo.1)

Call:
glm(formula = uso_int ~ edad, family = binomial)

Deviance Residuals:
Min 1Q Median 3Q Max
-2.7102 -0.5973 -0.2022 0.6640 2.9093

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 5.668886 0.187706 30.20 <2e-16 ***
edad -0.112343 0.003605 -31.16 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 4817.0 on 3484 degrees of freedom
Residual deviance: 2916.8 on 3483 degrees of freedom
AIC: 2920.8

Number of Fisher Scoring iterations: 5

Que da las mismas estimaciones que en SPSS. Ahora bien, si pondero por
FACTOR_P en SPSS obtengo una estimación de -5,788 para la constante y de
0.111 para la edad.

¿puedo utilizar la variable de ponderación en la opción weights de glm?
Si lo hago obtengo
1> # uso round porque weights solo admite valores enteros
1> modelo.2 <- glm(uso_int~edad,binomial,weights=round(factor.elev))
Mensajes de aviso perdidos
glm.fit: fitted probabilities numerically 0 or 1 occurred
1> summary(modelo.2)

Call:
glm(formula = uso_int ~ edad, family = binomial, weights =
round(factor.elev))

Deviance Residuals:
Min 1Q Median 3Q Max
-766.5 0.0 0.0 0.0 727.7

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 2.657e+15 7.358e+04 3.611e+10 <2e-16 ***
edad -5.142e+13 1.475e+03 -3.485e+10 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 8554552 on 3484 degrees of freedom
Residual deviance: 89235796 on 3483 degrees of freedom
AIC: 89235800

Number of Fisher Scoring iterations: 10

Que no se parece en nada a lo estimado por SPSS.

¿Hay alguna forma de hacerlo?
Según leo en la ayuda de spss
"Ponderar casos proporciona a los casos diferentes ponderaciones
(mediante una réplica simulada) para el análisis estadístico.

- Los valores de la variable de ponderación deben indicar el número de
observaciones representadas por casos únicos en el archivo de datos.

--Los casos con valores perdidos, negativos o cero para la variable de
ponderación se excluyen del análisis.

- Los valores fraccionarios son válidos; se usan exactamente donde
adquieren sentido y, con mayor probabilidad, donde se tabulan los casos"

¿Alguna idea?

Gracias...



Más información sobre la lista de distribución R-help-es