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...
Hola, Como no he visto ningún comentario sobre tu duda, para confirmar si efectivamente podemos echarte una mano se me ocurren un par de cosas: - El si nos pudieras adjuntar algún conjunto de datos con el que pudiéramos reproducir tus resultados y pensar/probar sobre algo más concreto. - Sugerirte el que revisaras este libro, por si diera alguna clave: http://www.amazon.com/SAS-SPSS-Users-Statistics-Computing/dp/1461406846/ref=sr_1_1?ie=UTF8&qid=1320679525&sr=8-1 Saludos, Carlos Ortega www.qualityexcellence.es El 5 de noviembre de 2011 16:28, jose luis cañadas <canadasreche@gmail.com>escribió:> Hola a tod@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... > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Hola. Os comento las soluciones que he encontrado , por ahora... 1. Utilizando la librería survey ### probando survey ## library(survey) # nos creamos el data.frame con datos.muestrales <- data.frame(uso_int,edad,factor.elev) # nos creamos el objeto svydesign con factor.elev como peso ddatos <- svydesign(id=~1,weights=~factor.elev,data=datos.muestrales) # ahora uso svyglm con family binomial modelo <- svyglm(uso_int~edad,family=binomial,design=ddatos) modelo 1> modelo Independent Sampling design (with replacement) svydesign(id = ~1, weights = ~factor.elev, data = datos.muestrales) Call: svyglm(uso_int ~ edad, family = binomial, design = ddatos) Coefficients: (Intercept) edad 5.7885 -0.1109 Degrees of Freedom: 3484 Total (i.e. Null); 3483 Residual Null Deviance: 4671 Residual Deviance: 2926 AIC: 2924 Funciona bien, y permite además utilizar diseños muestrales complejos. Un gran descubrimiento la librería survey. De hecho hoy la he utilizado para una postestratificación que antes hacíamos con barbwin.. 2. De forma más sencilla con la función lrm de la librería rms (antes en la librería Design) library(rms) modelo.lrm <- lrm(uso_int~edad,weights=factor.elev) 3. Utilizando la tabla que se obtiene con xtabs, pasándola a data.frame y utilizar glm con la opción weights ,poniendo como peso las frecuencias que se obtienen en el data.frame. tabla2 <- xtabs(factor.elev ~ edad+uso_int) datos <- data.frame(tabla2) # convierto uso_int a numérica 0,1 datos$uso_int <- ifelse(datos$uso_int=="0",0,1) # convierto edad del data.frame que está en factor a numérica, conservando el número original datos$edad <- as.numeric(as.character(datos$edad)) # calculo el modelo. modelo.4 <- glm(uso_int ~ edad ,family=binomial,weights=Freq,data=datos) Y sigo investigando como aplicar ponderaciones a más técnicas . Con la librería survey, se pueden utilizar para glm y para factorial. También he visto la librería mda <http://cran.r-project.org/web/packages/mda/index.html> (mixture and flexible discriminant analysis) que tiene la función fda que permite utilizar ponderaciones en análisis discriminante, pero aún no la he probado.. El 07/11/11 16:29, Carlos Ortega escribió:> Hola, > > Como no he visto ningún comentario sobre tu duda, para confirmar si > efectivamente podemos echarte una mano se me ocurren un par de cosas: > - El si nos pudieras adjuntar algún conjunto de datos con el que > pudiéramos reproducir tus resultados y pensar/probar sobre algo más > concreto. > - Sugerirte el que revisaras este libro, por si diera alguna clave: > http://www.amazon.com/SAS-SPSS-Users-Statistics-Computing/dp/1461406846/ref=sr_1_1?ie=UTF8&qid=1320679525&sr=8-1 > <http://www.amazon.com/SAS-SPSS-Users-Statistics-Computing/dp/1461406846/ref=sr_1_1?ie=UTF8&qid=1320679525&sr=8-1> > > Saludos, > Carlos Ortega > www.qualityexcellence.es <http://www.qualityexcellence.es> > > El 5 de noviembre de 2011 16:28, jose luis cañadas > <canadasreche@gmail.com <mailto:canadasreche@gmail.com>> escribió: > > Hola a tod@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... > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org <mailto:R-help-es@r-project.org> > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]