introduction to r by david lucy cap 12-16

Post on 06-Jul-2015

765 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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.

top related