De nuevo volvemos a la entrada de ayer para replicar el código SAS utilizado en R. Se trata de realizar 3 modelos de regresión logística con R para estudiar como influyen en los parámetros el uso de un conjunto de datos con sobremuestreo o el uso de un conjunto de datos donde asignamos pesos a las observaciones. El programa es sencillo pero tiene un uso interesante de la librería de R sampling. Aquí tenéis el código:
#Regresión logística perfecta
num = 100000
x = rnorm(num); y=rnorm(num)
p=1/(1+exp(-(-5.5+2.55*x-1.2*y)))
z=rbinom(num,1,p)
datos_ini=data.frame(cbind(x,y,z))
table(datos_ini$z)
modelo.1 = glm(z~x+y,data=datos_ini,family=binomial)
summary(modelo.1)
El mismo modelo que planteamos con SAS en la anterior entrada nos permite realizar una regresión logística perfecta. Veamos como se plantea la realización del sobremuestreo con R:
#Realizamos el sobremuestreo con la librería sampling
library( sampling )
selec <- strata( datos_ini,
stratanames = c("z"),
size = c(50000,50000), method = "srswr" )
table(selec$z)
modelo.2 = glm(z~x+y,data=datos_ini[selec$ID_unit,],
family=binomial)
summary(modelo.2)
Habrá que volver sobre el tema del muestreo para analizar las posibilidades de la librería sampling, en este caso realizamos muestreo estratificado con la función strata y muestreo aleatorio con reemplazamiento. Replicamos el proceso asignando pesos:
#Realizamos el proceso asignando pesos
pct=sum(datos_iniz)/num
datos_inipeso = ifelse(datos_iniz==1, 0.5/pct, 0.5/(1-pct))
tapply(datos_inipeso,datos_ini$z,sum)
modelo.3 = glm(z~x+y,data=datos_ini,
family=binomial, weights=peso)
summary(modelo.3)
Y obtenemos los mismos resultados (que sorpresa). Saludos.
Y para el caso en que tengamos un diseño muestral complejo, se puede utilizar la librería survey. Replico el ejemplo con esta librería
library(survey)
ddatos <- svydesign(id=~1,weights=~peso,data=datos_ini)
modelo.4 <- svyglm(z~ x+y,family=binomial,design=ddatos)
summary(modelo.4)