Introduction to R by David Lucy Cap 12-16
-
Upload
harmonious32 -
Category
Documents
-
view
766 -
download
0
Transcript of Introduction to R by David Lucy Cap 12-16
SURKY BONILLA,LUIS PONS ,JUAN
FERREIRA
R es un lenguaje muy usado para crear
modelos matematicos en base a data.
El comando lm ( en r) es usado para crear
modelos lineales. Tambien para buscar
regresion lineal, varianza y covarianza.
Provee ademas muchos recursos para
normalizar dispersion de valores en graficas
e identificar relaciones y patrones.
Los pasos de un modelo lineal son:
1. Escribir el modelo matemático con todas sus
hipótesis.
2. Estimación de los parámetros del modelo.
3. Inferencias sobre los parámetros.
4. Diagnóstico del modelo.
La función que realiza los modelos lineales
en R es lm "lineal model".
Este objeto puede ser utilizado para
cualquier función para realizar un análisis de
la varianza (medida de la dispersion) , un
modelo autoregresivo etc…
La función lm tiene la siguiente sintaxis:
lm(formula, data, subset, weights, method =
"qr", model = TRUE, x = FALSE, y = FALSE, qr
= TRUE, contrasts = NULL, ...)
En “formula” ponemos el modelo expresado:
y ~ x1+ x2 + ...+ xn
En “data” especificamos el data frame que
contiene las variables del modelo en el caso
de que trabajemos con un data frame.
En “subset” especificamos un subconjunto de
observaciones para validar posteriormente el
modelo.
En “weights” especificamos los pesos, es muy
útil si buscamos mínimos cuadrados
ponderados.
Con “method” especificamos el método. Si
no entramos ninguno , sólo es posible
obtener el modelo por mínimos cuadrados
ponderados.
En “model” con “TRUE” decimos a R que ha
de guardarse en el objeto, la matriz del
modelo, el “frame”, etc.. En “contrast”
pode-mos especificar objetos con los que
realizar contrastes sobre los parámetros.
Tenemos múltiples opciones, para ver cuales
son empleamos la ayuda (?lm) y asi vemos la
documentación R sobre el procedimiento lm.
El tiempo que tarda un sistema informático
en red en ejecutar una instrucción depende
del número de usuarios conectados a él. Si
no hay usuarios el tiempo es 0. Tenemos los
siguientes datos:
Nº usuarios Tiempo de ejecución
10 1
15 1.2
20 2
20 2.1
25 2.2
30 2
30 1.9
Se pretende ajustar un modelo lineal sin
término independiente, construir la tabla
ANOVA y comparar el modelo con el de
término independiente. Veamos las
instrucciones en R:
> tiempo <- c(1,1.2,2,2.1,2.2,2,1.9)
> usuarios <- c(10,15,20,20,25,30,30)
> ejemplo <-lm(tiempo~usuarios-1)
# El modelo se crea en un objeto.
> summary (ejemplo)
Call: lm (formula = tiempo ~ usuarios - 1)
Residuals:
Min 1Q Median 3Q Max
-0.4831 -0.1873 0.2056 0 .3127 0.5113
Coefficients:
Estimate Std. Error t value Pr(>|t|)
usuarios 0.079437 0.006496 12.23 1.82e-05 ***
---
Signif. codes: 0 „***‟ 0.001 „**‟ 0.01 „*‟ 0.05 „.‟ 0.1 „ ‟ 1
Residual standard error: 0.3871 on 6 degrees of freedom
Multiple R-squared: 0.9614, Adjusted R-squared: 0.955
F-statistic: 149.5 on 1 and 6 DF, p-value: 1.821e-05
En este caso el modelo resultante sería:
tiempo de ejecución=0.0794 usuarios,
también vemos que es un excelente modelo
lineal ya que el Multiple R-Squared: 0.9614
(coeficiente de determinación ajustado) es
bastante próximo a 1 (el mejor valor
posible).
Para construir la tabla del análisis de la
varianza emplearemos „anova‟ como objeto.
> an. varianza<-anova (ejemplo)
> summary (an. varianza)
Df Sum Sq Mean Sq F value Pr(>F)
Min.:1.00 Min.:0.8989 Min.:0.1498 Min.:149.5 Min. :1.821e-
05
1st Qu.:2.25 1st Qu.: 6.2744 1st Qu.: 5.7126 1st Qu.:149.5
1st Qu.:1.821e-05
Median :3.50 Median :11.6500 Median :11.2755 Median
:149.5 Median :1.821e-05
Mean :3.50 Mean :11.6500 Mean :11.2755 Mean :149.5
Mean :1.821e-05
3rd Qu.:4.75 3rd Qu.:17.0256 3rd Qu.:16.8383 3rd
Qu.:149.5 3rd Qu.:1.821e-05
Max. :6.00 Max. :22.4011 Max. :22.4011 Max. :149.5 Max.
:1.821e-05
NA's : 1.0 NA's :1.000e+00
Los modelos lineales (regresion, ANOVA,
ANCOVA), se basan en los siguientes
supuestos:
1. Los errores se distribuyen normalmente.
2. La varianza es constante.
3. La variable respuesta se relaciona
linealmente con la(s) variable(s)
independiente(s).
Aunque existen diferentes tipos de
distribuciones, en general, las exponenciales
son las mas comunes y segun la aplicacion.
Asi por ejemplo la distribucion exponencial
ha ganado mucha importancia en
aplicaciones en diversas ciencias y
disciplinas, en particular en actuaria,
seguros de perdida , donde se hacen mas
realistas.
Poisson, muy útiles para conteos (p.e.
numero de muertos por accidentes de
trafico; numero de dias con heladas en el
mes de enero; numero de colonias de
bacterias en una placa de agar; numero de
especies de plantas leñosas en un cuadrado
de muestreo de 10 m2).
Binomiales, de gran utilidad para
proporciones y datos de presencia/ausencia
(p.e. tasas de mortalidad; tasas de infección;
porcentaje de parasitismo; porcentaje de
éxito reproductivo; presencia o ausencia de
una determinada especie.
Muy útiles con datos que muestran un
coeficiente de variación constante, esto es,
en donde la varianza aumenta según
aumenta la media de la muestra de manera
constante (p.e. numero de presas comidas
por un predador en función del numero de
presas disponibles).
glm (formula, family = gaussian, data,
weights, subset, na.action, start = NULL,
etastart, mustart, offset, control = list(...),
model = TRUE, method = "glm.fit", x = FALSE,
y = TRUE, contrasts = NULL, ...)
Formula: descripcion del modelo ; Family :
tipo de funcion, binomial ,gausiana etc. ;
cada subcomando permite mas detalle, segun
las necesidades . ( ver R)
> library (MASS)
> data (menarche) ( primer periodo )
> head (menarche)
Age Total Menarche
1 9.21 376 0
2 10.21 200 0
3 10.58 93 0
4 10.83 120 2
5 11.08 90 2
6 11.33 88 5
Para modelar estos datos usando glm convertimoslos datos en una matriz de numeros de quienes hanalcanzado la menarquia y quienes no.
> yes <- menarche $ Menarche
> no <- menarche Total - menarche$Menarche
> y <- c bind(yes, no)
> head(y)
yes no
[1,] 0 376
[2,] 0 200
[3,] 0 93
[4,] 2 118
[5,] 2 88
[6,] 5 83
Usando este comando en R
> mod.6 <- glm (y menarche$Age, family=
binomial(link="logit")) donde se puede ver
que la respuesta es binaria. Donde la
funcion “logit” su uso tipico es en casos 1,0
; si ,no; vivo,muerto; continuo,discreto,etc.
lineariza el modelo y permite una mejor
interpretacion ; recordemos a mayor
dispersion de los datos, usualmente es mu-
cho mas dificil ponerlos en una ecuacion,
que podamos utilizar para predicciones etc.
Call: glm(formula = y 1 + menarche$Age, family = binomial(link = "logit"))
Deviance Residuals:
Min 1Q Median 3Q Max
-2.0363 -0.9953 -0.4900 0.7780 1.3675
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -21.22639 0.77068 -27.54 <2e-16 ***
Menarche $ Age 1.63197 0.05895 27.68 <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: 3693.884 on 24 degrees of freedom
Residual deviance: 26.703 on 23 degrees of freedom
AIC: 114.76
> anova(mod.6, test="Chisq")
Analysis of Deviance Table
Model: binomial, link: logit
Response: y
Terms added sequentially (first to last)
Df Deviance Resid. Df Resid. Dev P(>|Chi|)
NULL 24 3693.9
menarche$Age 1 3667.2 23 26.7 0.0
which in this case is 26.7, and is still highly
significant.
En muchas ocasiones, sin embargo,
encontramos con que uno o varios de estos
supuestos no se cumplen. Estos problemas
se pueden llegar a solucionar mediante la
transformación de la variable respuesta (por
ejemplo tomando logaritmos).
Sin embargo estas transformaciones no
siempre consiguen corregir la falta de
normalidad, la heterocedasticidad (varianza
no constante) o la no linealidad de nuestros
datos.
Muchas veces es difícil interpretar los resultados
obtenidos y a veces se complica aun mas cuando
utilizamos otro tipo de transformaciones, como
las exponenciales, las potencias, etc..
Una alternativa a la transformación de la
variable respuesta y a la falta de normalidad es
el uso de los modelos lineales generalizados.
GLM son una extensión de los modelos lineales
que permiten utilizar distribuciones no normales
de los errores (Binomiales, Poisson, Gamma,
etc.) y varianzas no constantes.
Específicamente, podemos considerar utilizar
GLM cuando la variable respuesta es:
un conteo de casos (p.e. abundancia de una
especie);
un conteo de casos expresados como
proporciones (p.e. porcentaje de plantas
muertas en un experimento de vivero);
una respuesta binaria (p.e. vivo o muerto,
infectado o no infectado, etc.)
Area de seguros en general, perdida y
desastres.
R es muy util para analizar data sobre
supervivencia ; los datos se convierten en
formato “data frame” primero ; luego se
pueden usar comandos para hacer
inferencias sobre ratas de eventos (EVENT
RATES).
En R usualmente se pueden ademas crear
funciones especificas, o caracteristicas
adicionales que nos facilite analizar
cualquier “data frame”. La biblioteca de R
,como es “open source” crece cada vez mas.
El análisis formal y detallado de las
curvas de sobrevivencia (“análisis de
sobrevivencia”) trata del estudio de la
distribución de los tiempos de vida.
Usualmente se aplica a poblaciones
humanas pero puede ser igualmente
utilizado con cualquier población donde
se sigan los individuos, uno a uno, hasta la
ocurrencia de un evento (usualmente la
muerte).
También puede usarse con procesos,
fenomenos ,maquinarias o cualquier caso en
donde la respuesta individual en el tiempo
sea binaria : ocurre – no ocurre; 1,0 ; si,no;
Mas aun la funcion survreg() ,puede ser
usada para analizar ,distribuciones
parametricas incluyendo, Weibull,
exponencial, lognormal, and loglogistic
distribuciones. Un listado mas completo
puedes ser encontrado bajo
survreg.distributions.
En general, los análisis de sobrevivienciapresentan las siguientes características:
1. Los tiempos (de respuesta) no estánusualmente distribuidos normalmente.
2. Usualmente tampoco se puede esperar aque todos los individuos de una poblaciónproduzcan “el evento” que se está estudiando.Por ejemplo, en pacientes humanos que están enun protocolo experimental de drogas específicas,no todos de ellos continúan con el protocolo oalgunos de ellos abandonan antes de que finaliceel experimento.
Supongamos que T denota el tiempo de vida deuna variable aleatoria. Este tomará valores entre(0, ∞) y su distribución continua puede serexpresada por una función de distribuciónacumulada F con una función de densidad f.
Para describir los tiempos de vida es usualtrabajar con las siguientes funciones:
Función de sobrevivencia, que es la probabilidadde que un individuo esté vivo (o sin presentar elevento) en un tiempo dado:
S(t) = 1 - F (t) = P(T > t)
Y la función acumulada de riesgo, que define la
probabilidad acumulada de que el sujeto
presente el evento en el tiempo t considerando
que ha estado libre de el en los tiempos
anteriores:
H (t) = ∫ h(s) ds donde la integral se calcula
entre 0 y s.
Todas ellas están relacionadas de la forma:
h(t) = f (t)/S(t) , H (t) =- log S (t)
Ahora bien, es necesario considerar los individuos que no alcanzan el evento durante el tiempo del análisis (“censored” en inglés).
El método mas comúnmente utilizado es el de Kaplan-Meier, donde la
función de sobreviviencia S(t) se estima mediante la fórmula:
S (t) = r(ti ) – di / r(ti)
donde r(ti) es el número de casos vivos (que no han presentado el
evento), es decir el número de individuos “a riesgo” y di el número
de muertos (eventos) ocurridos en el intervalo Ii= [ti, ti+1).
La función de riesgo es estimada por:
H (t) = d j / r(t j )
Aqui analizaremos un Data Base de las
muertes de un cementerio , para obtener
diversos resultados que nos ayuden a ilustrar
los usos de algunas funciones de R.
Lo mas facil es tomar la data y llevarla a
Excel para ir creando un “data frame ” y
facilitar su interface con R via la funcion
.csv.
Es importante crear columnas con nombres
sobre ellas que faciliten manipularlas en R.
Importaremos la data via excel usando :
Tumbas <- read.csv (file=”todos_all.csv”,
header=TRUE)
Luego aplicamos la funcion “summary” para
obtener algunos datos iniciales.
Note que se han construido 6 columnas con
nacimiento (year) ,muerte(year) ,
cementerio (1 o 2) , sexo, edad, status.
El paso siguiente consiste en importar los
datos a R . Para ello y suponiendo que estos
se encuentran registrados en Excel, lo mas
fácil es grabar la matriz de datos mediante la
opción (en Excel) “grabar como archivo
separado por comas (csv)”. El archivo de
datos debe estar ordenado con las variables
en las columnas y los casos en las filas. El
nombre de las variables debe estar en la
primera fila y deben ser claros .
Este archivo contiene las siguientes
variables:
Cem : cementerio. 1 = Sur, 2 = Este ; Sexo : 1
= masculino, 2 = femenino Nacimiento : año
de nacimiento Muerte : año de muerte
Edad : Edad de muerte
Status : 1 = muerto, 2 = vivo (¿Cuántos casos
vivos hay en estos datos?)
El archivo csv puede ser leído en R
utilizando la función read.csv(). Por
ejemplo
suponiendo que el archivo de datos se llama
“todos_all.csv” y queremos ingresarlo a una
tabla de datos (“data frame”) llamado
“tumbas”, debemos ejecutar el siguiente
comando:
Tumbas <- read.csv(file=”todos_all.csv”,
header=TRUE)
La opción header=TRUE indica que los
nombres de las variables se encuentran en la
primera línea.
> summary(tumbas)
cem sexo nacimiento muerte edad
Min. :1.000 Min. :1.000 Min. :1806 Min. :1868 Min. : 0.00
1st Qu.:1.000 1st Qu.:1.000 1st Qu.:1907 1st Qu.:1979 1st Qu.: 50.00
Median :2.000 Median :1.000 Median :1920 Median :1990 Median : 69.00
Mean :1.530 Mean :1.444 Mean :1922 Mean :1985 Mean : 62.54
3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:1936 3rd Qu.:1997 3rd Qu.: 79.00
Max. :2.000 Max. :2.000 Max. :2004 Max. :2006 Max. :101.00
status
Min. :1
1st Qu.:1
Median :1
Mean :1
3rd Qu.:1
Max. :1
La función “summary” aplicada a una tabla
de datos nos muestra, para cada variable, el
valor mínimo, máximo, la media, la mediana
y el primer y tercer cuartil. Si queremos ver
la tabla por cementerio, por ejemplo,
podemos utilizar un subconjunto de datos
mediante la función
summary(tumbas[cem==1]), en este caso
para el Cementerio del Sur solamente.
Histogram of edad
40
0
300
Fre
que
ncy
200
10
0
0
0 20 40 60 80 100
edad
Las rutinas de sobrevivencia funcionan
con objetos de la clase Surv, que es una
estructura de datos que combina el tiempo
y los eventos.
Esta función toma dos argumentos: el
tiempo y el código que indica el evento.
Así:
> attach(tumbas)
> tumbas.surv <- Surv(edad, status)
Asi se crea un objeto de sobrevivencia contodos los datos del archivo, utilizando lavariable edad como indicador del tiempo ystatus como indicador del evento. NOTA: elprograma asume que el evento ocurre si lavariable que lo define toma valor de 1. En casodiferente, este valor debe ser indicadoexplícitamente (ejemplo Surv(edad,status==3), el código 3 indica que lapersona murió). Usaremos Kaplan –Mier si haydatos perdidos.
Si hay datos perdidos se puede usar K-M para la función de sobrevivencia y se logra con función survfit().
> survfit(tumbas.surv)
Call: survfit(formula = tumbas.surv)
n events median 0.95LCL 0.95UCL
1675 1675 69 67 70
Podemos así identificar el tiempo mediano de sobrevivencia y los intervalos de confianza de 95% para este valor. En este caso y como todos los individuos presentaron el evento, la mediana de la sobrevivencia coincide con la mediana de tiempo de vida.
> summary(surv.all, cedad)
Call: survfit(formula= tumbas.surv)
time n.risk n.event survival std.err lower 95% CI upper 95% CI
0 1675 26 0.98448 0.00302 0.978575 0.99042
5 1625 26 0.96896 0.00424 0.960685 0.97730
10 1618 9 0.96358 0.00458 0.954653 0.97260
15 1599 23 0.94985 0.00533 0.939456 0.96036
20 1569 26 0.93433 0.00605 0.922541 0.94627
30 1469 100 0.87463 0.00809 0.858912 0.89063
40 1371 101 0.81433 0.00950 0.795918 0.83316
50 1269 109 0.74925 0.01059 0.728781 0.77030
60 1102 183 0.64000 0.01173 0.617421 0.66340
70 809 305 0.45791 0.01217 0.434662 0.48240
80 411 388 0.22627 0.01022 0.207093 0.24722
90 112 289 0.05373 0.00551 0.043949 0.06569
100 6 86 0.00239 0.00119 0.000897 0.00636
La tabla presenta los valores de la función de
sobrevivencia para los tiempo especificados.
Así, la probabilidad de que un individuo se
encuentre libre de evento (vivo) a los 5 años
es de 0.96996 y para los 80 años de 0.22627.
R es un lenguaje gratuito, muy flexible que
permite construir modelos y manipular data
de diversas maneras y tipos .
En el caso de la ACTUARIA su uso se ha
extendido en campos como :
la teoria de la utilidad ; los seguros; los
modelos individuales y colectivos; teoria
del riesgo; teoria de la ruina; premiums
(costo de polizas) ; modelos generalizados
etc. ,ecologia,ciencias,otras disciplinas etc.
http://127.0.0.1:26705/library/stats/html/l
m.html : Fitting Linear Models.
Modern Actuarial Risk Theory , J. Dhaene, S.
Vanduffel, MJ Goovaerts, R. Kaas, D. Vyncke
– 2005.
http://www.maths.lancs.ac.uk/~lucy/course
s/CFAS404/notes/mathematics-for-
statistics.pdf.
http://www.maths.lancs.ac.uk/~lucy/course
s/CFAS422/notes/course-notes-pink.pdf.