Regresión Completa
Regresión Completa
Regresión Completa
1.1.1 Tipos de regresión
El término regresión puede ser confuso porque existen muchas variantes especializadas de
regresión. Además, R tiene muchas funciones para ajustar una gran gama de modelos de
regresión.
Tabla 1. Algunos tipos básicos de regresión (hay muchos más)
Tipo de
regresión Uso típico
lineal simple Predicción de una variable de respuesta cuantitativa a partir de una variable predictora cuan
polinomial Predicción de una variable de respuesta cuantitativa a partir de una variable predictora cuan
modela como una función polinomial de orden nn
lineal múltiple Predicción de una variable de respuesta cuantitativa a partir de dos o más variables predicto
multivariada Predicción de más de una variable de respuesta cuantitativa a partir de una o más variables
logística Predicción de una variable categórica a partir de una o más predictoras
de Poisson Predicción de una variable de respuesta que representa un conteo a partir de una o más pred
no lineal Predicción de una variable de respuesta cuantitativa a partir de una o más predictoras, dond
robusta Predicción de una variable de respuesta cuantitativa a partir de una o más predictoras, usan
al efecto de observaciones influyentes
estimai=(modelo)+erroriestimai=(modelo)+errori.
Para obtener la máxima precisión (mínimo errorierrori) en nuestra estima o predicción,
tendremos que:
Sólo así podremos llegar a un compromiso óptimo entre realismo del modelo, grado de ajuste
del modelo a los datos, y mínima varianza de la estima.
Veamos como ejemplo el ajuste de modelos lineal y cuadrático (polinomial) para predecir el
peso de mujeres de 30-39 años en función de su altura (peso ~ altura) ¿Cuál de ellos se
ajusta mejor a los datos?
lineal: pesoˆ=−87.52+3.45∗alturapeso^=−87.52+3.45∗altura
polinomial: pesoˆ=261.88−7.35∗altura+0.083∗altura2peso^=261.88−7.35∗altur
a+0.083∗altura2
Residual standard error: 0.3841 on 12 degrees of freedom
Multiple R-squared: 0.9995, Adjusted R-squared: 0.9994
F-statistic: 1.139e+04 on 2 and 12 DF, p-value: < 2.2e-16
Visualmente es claro
que elmodelopolinomial(cuadrático)seajustamejoralosdatoselmodelopolinomial(cuadrático
)seajustamejoralosdatos, como indican los valores de R2R2 (coef. de determinación) y
los valores−pvalores−p asociados al estadístico−F−F.
¿Pero es este ajuste significativamente mejor? Comparando el ajuste de ambos modelos
mediane el criterio de información de Akaike (AIC), confirmamos que el modelo polinomial
es mucho mejor: aunque tiene un parámetro libre más a estimar de los datos (el
coeficiente b2∗altura2b2∗altura2) que el modelo lineal, el ajuste es ~ 40 unidades de AIC
mejor, por lo que rechazamos el modelo lineal en favor el cuadrático.
## df AIC
## fit 3 59.08158
## fit2 4 18.51270
Aprenderemos más adelante los detalles relativos a la selección del mejor modelo de
regresión, que es un aspecto esencial del modelado matemático.
En este capítulo nos enfocaremos en métodos que encajan en el rubro de modelos de
regresión de mínimos cuadrados ordinarios (OLS). El énfasis estará en los modelos
lineales simple y polinomiales, es decir, modelos en los que la analizamos
el comportamiento de la variable de respuesta cuantitativa en función de una variable
predictora o regresora cuantitativa, asumiendo una relación lineal o curvilínea entre ellas.
Yi=(a+bXi)+ϵiYi=(a+bXi)+ϵi
donde:
Los coeficientes de regresión los tenemos que estimar de los datos, usando el método de
mínimos cuadrados, basado en las siguientes fórmulas, y el criterio de optimización
de máxima verosimilitud.
b=∑i=1n(xi−x¯)(yi−y¯)∑i=1n(xi−x¯)2=∑xy−∑x∑yn∑x2−
(∑x)2n=SSXYSSX=sumacorregidadeproductossumadecuadradosdex b=∑i=1n(xi−x¯)
(yi−y¯)∑i=1n(xi−x¯)2=∑xy−∑x∑yn∑x2−
(∑x)2n=SSXYSSX=sumacorregidadeproductossumadecuadradosdex
a=y¯−bx¯=∑yn−b∑xna=y¯−bx¯=∑yn−b∑xn
Una vez estimados estos coeficientes los sustituímos en la fórmula general de la recta,
definiendo así el modelo lineal que ajustamos en el ejemplo gráfico
caso el punto de corte no tiene mucho sentido ya que no encontraremos una persona de 0
pulgadas de altura.
Por tanto la recta de regresión simple ajustada manualmente a los datos tiene la
fórmula: y=12−1.25xy=12−1.25x
Estos coeficientes no difieren mucho de los obtenidos al ajustar un modelo lineal con R:
d=y−y^d=y−y^
Dado y^y^ está sobre la recta a+bxa+bx, podemos reescribir la ecuación anterior como:
d=y−(a+bx)=y−a−bxd=y−(a+bx)=y−a−bx
La estima por mínimos cuadrados de la pendiente de regresión (bb) se calcula por tanto
rotando la línea hasta que el error de la suma de cuadrados, SSESSE, sea minimizada. El
algoritmo por tanto tiene que encontrar el mínimo de ∑(y−a−bx)2∑(y−a−bx)2. Tomando la
derivada de SSE con respecto a bb:
dSSEdb=−2∑x(y−a−bx)dSSEdb=−2∑x(y−a−bx)
Operando llegamos a que:
b=∑xy−∑x∑yn∑x2−(∑x)2nb=∑xy−∑x∑yn∑x2−(∑x)2n
Que se abrevia como:
b=SSXYSSX=sumacorregidadeproductossumadecuadradosdexb=SSXYSSX=sumacorre
gidadeproductossumadecuadradosdex
Para que tengan una impresión de los cálculos involucrados, es útil graficar la suma de
cuadrados de los resíduos SSESSE contra el valor del parámetro que estamos tratando de
estimar. Veamos el caso de la pendiente bb.
b <- seq(-1.43,-1,0.002)
sse <- numeric(length(b))
for (i in 1:length(b)) {
a <- mean(dfr1$Y)-b[i]*mean(dfr1$X)
residual <- dfr1$Y - a - b[i]*dfr1$X
sse[i] <- sum(residual^2)
}
b=∑i=1n(xi−x¯)(yi−y¯)∑i=1n(xi−x¯)2=∑xy−∑x∑yn∑x2−
(∑x)2n=SSXYSSX=sumacorregidadeproductossumadecuadradosdex b=∑i=1n(xi−x¯)
(yi−y¯)∑i=1n(xi−x¯)2=∑xy−∑x∑yn∑x2−
(∑x)2n=SSXYSSX=sumacorregidadeproductossumadecuadradosdex
a=y¯−bx¯=∑yn−b∑xna=y¯−bx¯=∑yn−b∑xn
y recordando las fórmulas de las sumas de cuadrados y productos corregidas, que son
absolutamente centrales en todo lo que seguirá sobre regresión y análisis de la varianza:
SSY=∑y2−(∑y)2nSSY=∑y2−(∑y)2n
SSX=∑x2−(∑x)2nSSX=∑x2−(∑x)2n
SSXY=∑xy−∑x∑yn∑x2−(∑x)2nSSXY=∑xy−∑x∑yn∑x2−(∑x)2n
podemos calcular fácilmente los coeficientes de regresión, como muestra el siguiente bloque
de código:
cat("SSX =", SSX, "| SSY =", SSY, "| SSXY =", SSXY, "\n")
## SSX = 60 | SSY = 108.8889 | SSXY = -73
# por tanto:
b <- SSXY/SSX
a <- (sum(dfr1$Y)/length(dfr1$Y)) - (b*sum(dfr1$X)/length(dfr1$X))
par(mfrow = c(1,2))
for(i in 1:9)
{
lines( c(dfr1$X[i],dfr1$X[i]), c(dfr1$Y[i], fitted[i]), col="red",
lty=3)
}
par(opar)
Definiciones
SSYSSY o SSTSST es la suma total de cuadrados, ya que representa la variación
máxima o total, respecto del modelo nulo (media)
SSESSE es la suma cuadrada de resíduos y representa el grado de error del
modelo ajustado, o variación no explicada por el modelo
SSMSSM o SSRSSR es la suma de cuadrados del modelo de regresión y mide
la diferencia entre SSY y SSE, indicando la ganancia en precisión de la estima al
ajustar un modelo, con respecto a la media, o variación explicada por el modelo
(∑(y−a−bx)2)SSR=SSY−SSE=(∑y2−(∑y)2n)−(∑(y−a−bx)2)
Pero podemos hacerlo más sencillo, si en vez de tomar SSE=∑(y−a−bx)2SSE=∑(y−a−bx)2,
usamos el siguiente atajo:
SSR=b∗SSXYSSR=b∗SSXY
Podemos así calcular fácilmente SSRSSR usando los valores
de bb y SSXYSSXY previamente calculados:
SSR=−1.21667X−73=88.81667SSR=−1.21667X−73=88.81667
Teniendo SSYSSY y SSRSSR calculados, es trivial calcular SSESSE:
SSE=SSY−SSR=108.8889−88.81667=20.07222SSE=SSY−SSR=108.8889−88.81667=2
0.07222
MSM=SSRg.l.=SSRno. parámetros estimados en el modelo: b (1 g.l. en ml simple)MS
M=SSRg.l.=SSRno. parámetros estimados en el modelo: b (1 g.l. en ml simple)
y
MSE=SSEg.l.=SSEno. observaciones−no. parámetros libres: a, b (n−2)MSE=SSEg.l.=S
SEno. observaciones−no. parámetros libres: a, b (n−2)
Construyamos la tabla de ANOVA correspondiente, paso a paso:
Ya tenemos calculados las sumas de cuadrados de cada fuente de variación, como se
muestra abajo.
var=s2=suma de cuadradosgrados de libertadvar=s2=suma de cuadradosgrados de liberta
d
Esta columna (4) es muy fácil de llenar, ya que tenemos los valors que necesitamos pre-
calculados en las columnas 2 y 3. La var totalvar total no nos hace falta, pero sí
el cociente−F=88.8172.86764cociente−F=88.8172.86764, que incluímos tambien en la tabla de
ANOVA, completándola.
Fuente Suma de cuadrados Grados de libertad Media de cuadrados (Vari
p <- 1-pf(Fstat,glNum,glDenom)
cat("CI95% = ", CI95_F, "| CI99% = ", CI99_F, " | p = ", p, "\n")
## CI95% = 5.591448 | CI99% = 12.24638 | p = 0.0008460725
SEb=s2SSX−−−−−√=2.86760−−−−−√=0.2186SEb=s2SSX=2.86760=0.2186
SEa=s2∑x2n∗SSX−−−−−−−−√=2.867∗2049∗60−−−−−−−−−
−√=1.0408SEa=s2∑x2n∗SSX=2.867∗2049∗60=1.0408
En regresión lineal simple, los grados de libertad para los predictores (pp) se calculan
como: N−p−1N−p−1, donde NN tamaño de muestra, y pp es el número de predictores (1 en
este caso: bb).
Claramente el ajuste del modelo a los datos en la gráfica derecha es mucho mejor que en la
izquierda. Llevado al extremo ideal, los puntos caerían todos sobre la recta, reflejando
una dispersión=0dispersión=0. En el otro extremo, xx podría no explicar ninguna de la
variación observada en yy. En dicho caso las variables no estarían correlacionadas, el ajuste
del modelo lineal sería 0 y la magnitud de la dispersión sería de 100%.
Combinando lo que hemos aprendido sobre SSYSSY, SSRSSR y SSESSE debería quedar
claro que podemos derivar una métrica que mida la fracción de la variación total
en yy explicada por la regresión. A esta medida es a la que llamamos coeficiente de
determinación: R2=SSRSSYR2=SSRSSY.
R2R2 varía entre 0, cuando la regresión no explica ninguna de la variación obserbada
en yy (SSE=SSYSSE=SSY; dispersión = 100%), y 1, cuando la regresión explica toda la
variación en y (SSR=SSYSSR=SSY; dispersión = 0%). Gráficamente:
## * Coeficientes para fit1: 0 0
## * Coeficientes para fit2: 0.5 2
Una primera opción para comprobar si el modelo cumple estos supuestos es mediante la
generación de cuatro gráficas de checado del modelo a partir de la información que viene
integrada en el objeto que regresa la función lm()lm() usando la función plot()plot()
opar <- par(no.readonly = TRUE)
par(opar)
La primera gráfica (arriba izda.) nos ayuda a decidir si las variables están linealmente
relacionadas. Si es así, no debería de existir una relación sistemática entre los
resíduos (errores) y los valores predichos (ajustados). Es decir, el modelo debería de
capturar toda la varianza sistemática de los datos, dejando sólo ruido
estocástico sin explicar. Por tanto, esta gráfica debe de verse como “las estrellas en
el firmamento”, sin un patrón claro de asociación. Si es así, sugiere además que se
cumple el supuesto de homocedasticidad.
La segunda es la gráfica de quantil-quantil normal. Los puntos deberían seguir la
diagonal si los resíduos están normalmente distribuidos. Si aparecen patrones tipo “S”
o “banana”, posiblemente necesitemos ajustar otro modelo.
La tercera gráfica es como la primera, pero usando una escala diferente, |
residuos estandarizados|−−−−−−−−−−−−−−−−−−−−−√|residuos estandarizados|,
y sirve para comprobar la homocedasticidad, la cual se cumple si los puntos forman
una banda estocástica en torno a la horizontal.
La última gráfica (abajo, dcha.) trata sobre la identificación de puntos influyentes,
aberrantes y con efecto palanca. Vemos que la observación 4 es la que tiene el
mayor resíduo estandarizado, la 7 tiena la mayor Cook−DCook−D y la nueve al
mayor efecto palanca.
o observaciones influyentes: son aquellas con un impacto desproporcionado en
la determinación de los parámetros del modelo. Se identifican usando la
distancia de Cook, Cooks−DCooks−D. Son de preocupar los puntos
con Cooks−D>1Cooks−D>1
o punto aberrante: es una observación que no es predicha satisfactoriamente por
el modelo de regresión (con un valor positivo o negativo grande del resíduo)
o observación con alto efecto palanca tienen una combinación inusual de valores
predictores. Es decir, son aberrantes en el espacio predictor.
##
## Call:
## lm(formula = amount ~ time)
##
## Residuals:
## Min 1Q Median 3Q Max
## -19.065 -10.029 -2.058 5.107 40.447
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 84.5534 5.0277 16.82 < 2e-16 ***
## time -2.8272 0.2879 -9.82 9.94e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 14.34 on 29 degrees of freedom
## Multiple R-squared: 0.7688, Adjusted R-squared: 0.7608
## F-statistic: 96.44 on 1 and 29 DF, p-value: 9.939e-11
Podemos ver que los coeficientes son altamente significativos, y que el modelo explica
más de 76% de la variación en la variable de respuesta (un valor muy alto de R2R2).
La moraleja es que valores−pvalores−p y R2R2 nos hablan del ajuste, pero no
indican si el tipo of familia de modelo ajustado es el más adecuado.
Dado que los datos son de decaimiento radiactivo, parece razonable pensar que
una función exponencial negativa y=ae−bxy=ae−bx pueda ajustarse mejor a los datos.
Probemos esta hipótesis, linearizando la ecuación exponencial, tomando logaritmo a ambos
lados de la igualdad y operando así:
y=ae−bxy=ae−bx
log(y)=log(a)−bxlog(y)=log(a)−bx
Cambiemos log(y)log(y) por YY y log(a)log(a) por AA, que representa un modelo lineal, con
un punto de corte AA y una pendiente bb
Y=A−bxY=A−bx
Grafiquemos el modelo linearizado:
summary(lm(log(amount)~time))
##
## Call:
## lm(formula = log(amount) ~ time)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.5935 -0.2043 0.0067 0.2198 0.6297
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.547386 0.100295 45.34 < 2e-16 ***
## time -0.068528 0.005743 -11.93 1.04e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.286 on 29 degrees of freedom
## Multiple R-squared: 0.8308, Adjusted R-squared: 0.825
## F-statistic: 142.4 on 1 and 29 DF, p-value: 1.038e-12
Vemos que el error estándar de los resíduos ha decrecido mucho, y que R2R2 es mayor
aún, al igual que el nivel de significancia de los coeficientes. El ajuste a los datos es sin duda
mejor.
Podemos formalmente seleccionar el mejor de ambos modelos usando el criterio de
informacón de Akaike (AIC), que indica claramente que el modelo linearizado es mucho más
adecuado.
Está claro por tanto que fue una decisión crítica elegir el modelo linearizado.
Parece no haber problemas con el supuesto de normalidad, pero sí parece hablerlos con
respecto al supuesto de homocedasticidad, como muestra la forma en punta de flecha de la
primera gráfica y la caída que muestran los resíduos estandarizados en función de los valores
ajustados (3a. gráfica). La última gráfica muestra que los puntos 30 y 31 tienen alto valor de
palanca (“leverage”), mientras que el 28 tiene un valor muy alto del resíduo asociado.
Además debemos saber que R grafica curvas como múltiples segmentos rectilíneos.
Necesitamos > 100 de estos segmentos en el ancho de una gráfica para que la curva se vea
razonablemente “lisa”. Viendo el gráfico de dispersión original (no transformado), vemos que
el rango para xx es: 0≤x≤300≤x≤30. Por tanto, para tener > 100 segmentos queremos > 3
segmentos por unidad de tiempo, es decir, está bien usar intervalos de 0.25. Usaremos la
variable xvxv para almacenar los “valores de x”: xv<−seq(0,30,0.25)xv<−seq(0,30,0.25), es
decir, tendremos length(xv)length(xv) segmentos. Veamos el código:
plot(time, amount, pch = 21, col = "blue", bg = "green",
main ="* exp: amount = 94.38536 * exp(-0.068528 * time)\n
* recta: amount = 84.5534 + (-2.8272 * time)")
xv <- seq(0,30,0.25)
yv <- 94.38536 * exp(-0.068528 * xv)
lines(xv, yv, col="red")
abline(fit1, col="blue")
y=a+bx+cx2+dx3...y=a+bx+cx2+dx3...
El concepto básico es sencillo. Tenemos una sola variable explicativa contínua, xx, pero
podemos ajustar potencias mayores de xx, como x2x2, x3x3… y añadirlas al modelo, junto
a xx, para describir diversos tipos de curvatura en la relación y xy x. Las funciones
polinomiales presentan gran flexibilidad de formas, incluso al añadir un solo término
cuadrático, dependiendo de los signos de los términos lineales y cuadrático, como se muestra
seguidamente:
opar <- par(no.readonly = TRUE)
par(mfrow=c(2,2))
curve(4+2*x-0.1*x^2,0,10,col="red",ylab="y", main = "y = 4 + 2*x -0.1 *
x^2")
curve(4+2*x-0.2*x^2,0,10,col="red",ylab="y", main = "y = 4 + 2*x -0.2 *
x^2")
curve(12-4*x+0.3*x^2,0,10,col="red",ylab="y", main = "y = 12 - 4*x +
0.3*x^2")
curve(4+0.5*x+0.1*x^2,0,10,col="red",ylab="y", main = "y = 12 - 0.5*x +
0.1*x^2")
par(opar)
Vemos que un simple modelo cuadrático con sólo tres parámetros (punto de corte, pendiente
para xx y pendiente para x2x2) puede describir un amplio rango de relaciones
funcionales yy ~ xx.
Veamos cómo se ajusta un modelo cuadrático de 3 parámetros (model3model3) y cómo se
compara con uno lineal de dos parámetros (model2model2).
model2 <- lm(amount~time)
model3 <- lm(amount~time+I(time^2))
model3
##
## Call:
## lm(formula = amount ~ time + I(time^2))
##
## Coefficients:
## (Intercept) time I(time^2)
## 106.3888 -7.3448 0.1506
summary(model3)
##
## Call:
## lm(formula = amount ~ time + I(time^2))
##
## Residuals:
## Min 1Q Median 3Q Max
## -22.302 -6.044 -1.603 4.224 20.581
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 106.38880 4.65627 22.849 < 2e-16 ***
## time -7.34485 0.71844 -10.223 5.90e-11 ***
## I(time^2) 0.15059 0.02314 6.507 4.73e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.205 on 28 degrees of freedom
## Multiple R-squared: 0.908, Adjusted R-squared: 0.9014
## F-statistic: 138.1 on 2 and 28 DF, p-value: 3.122e-15
AIC(model2,model3)
## df AIC
## model2 3 257.0016
## model3 4 230.4445
anova(model2,model3)
## Analysis of Variance Table
##
## Model 1: amount ~ time
## Model 2: amount ~ time + I(time^2)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 29 5960.6
## 2 28 2372.6 1 3588.1 42.344 4.727e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
AICi=−2lnLi+2∗NiAICi=−2lnLi+2∗Ni
Ni=no. de parámetros libres en el modeloiNi=no. de parámetros libres en el modelo
i
Li=verosimilitud bajo el modeloiLi=verosimilitud bajo el modeloi
predict(objeto.modelo,...)predict(objeto.modelo,...)
Si lo llamamos así, sin argumentos opcionales, nos regresa los valores ajustados como vimos
en ejemplos anteriores.
Si queremos calcular los valores predichos por el modelo modelo para nuevos valores de la
variable predictora, le pasamos una lista o dataframe como argumento a newdata=newdata=.
predict(objeto.modelo,newdata=data.frame(varPredictora=c(x1,x2...)))predict(objeto.m
odelo,newdata=data.frame(varPredictora=c(x1,x2...))) Es importante notar que el nombre
de varPredictoravarPredictora debe ser el de la que hemos usado para construir el modelo
(timetime en el caso que nos ocupa)
Además de las estimas puntuales, podemos pedirle a predict()predict() que regrese también
el intervalo de confiaza del nivel deseado (level=.95level=.95 por defecto) para las
predicciones en las que estamos interesados, pasándole el valor “prediction” al
parámetro interval: interval="prediction"interval="prediction". Este intervalo de la
predicción es el rango de la distribución de la predicción.
predict(objeto.modelo,newdata=data.frame(varPredictora=c(x1,x2...)),interval="pred
iction",level=.99)predict(objeto.modelo,newdata=data.frame(varPredictora=c(x1,x2...)),inter
val="prediction",level=.99)
Esto quedará más claro con los ejemplos de código que se muestran seguidamente, para
estimar los valores de la variable de respuesta “amount”de radiación en función de valores de
la variable regresora “time” en los que estamos interesados.
1.6.1 Interpolaciones
# los valores de interés de la var. regresora se pasan como un vector con
el nombre de
# la variable regresora, almacenados en una lista o dataframe
# En este caso los valores de x están dentro del rango de las
observaciones usadas
# para construir el modelo: vamos a "interpolar"
preds <- data.frame(time=c(3, 12.5, 22.2, 29))
1.6.2 extrapolaciones
# estos valores de la variable regersora time están fuera del rango de
las observaciones.
# por tanto estamos EXTRAPOLANDO:
preds <- data.frame(time=c(35, 50, 65, 95, 125))
prediction.extrapol.ci <- predict(model2.lin, newdata=preds,
interval="confidence",
level=.95)
prediction.extrapol.pi <- predict(model2.lin, newdata=preds,
interval="prediction",
level=.95)
exp(prediction.extrapol.ci)
## fit lwr upr
## 1 8.57534033 6.629701032 11.0919725
## 2 3.06781008 2.007038793 4.6892261
## 3 1.09750265 0.604375227 1.9929871
## 4 0.14046230 0.054567845 0.3615620
## 5 0.01797687 0.004917582 0.0657168
exp(prediction.extrapol.pi)
## fit lwr upr
## 1 8.57534033 4.526126493 16.24710709
## 2 3.06781008 1.489370114 6.31908658
## 3 1.09750265 0.475940138 2.53080579
## 4 0.14046230 0.046207508 0.42697951
## 5 0.01797687 0.004336027 0.07453083
Como nota final, hay que tener en cuenta que estos intervalos de predicción son
extremadamente sensibles a las desviaciones del supuesto de normalidad. Si hay claros
indicios de que la variable de respuesta no presenta una distribución normal, considera
usar técnicas no-paramétricas, robustas a dichas violaciones, com el bootstrapbootstrap.
3 Bibliografía selecta
3.1 Libros
3.1.1 R y estadística
Andy Field, Discovering statistics using R (A. P. Field, Miles, and Field 2012)
Michael J. Crawley, Statistics - An introduction using R (Crawley 2015)
Tilman M. Davies - The book of R - a first course in programming and statistics (Davies
2016)
3.1.5 R - programación
Garrett Grolemund, Hands on programming with R (Grolemund 2014)
Norman Matloff, The art of R programming (Matloff 2011)
mean()
lines()
log()
numeric()
par()
pairs()
plot()
points()
predict()
segments()
seq()
sqrt()
str()
subset()
sum()
summary()
summary.aov()
tail()
which()
4.1.3 Paquetes especializados
car (Fox and Weisberg 2016)
5 Recursos en línea
5.1 The comprehensive R archive network
(CRAN)
CRAN
5.2 Cursos
RStudio - online learning
datacamp - learning R
swirl - learn R, in R
5.3 Consulta
R cookbook
QuickR
downloadable books o R and stats
Use R!
Official CRAN documentation
[r], stackoverflow
Referencias
Allaire, JJ, Joe Cheng, Yihui Xie, Jonathan McPherson, Winston Chang, Jeff Allen, Hadley
Wickham, Aron Atkins, and Rob Hyndman. 2016. Rmarkdown: Dynamic Documents for
R. https://CRAN.R-project.org/package=rmarkdown.
Boehmke, Bradley. 2016. Data Wrangling with R. 1st ed.
Springer. http://www.springer.com/la/book/9783319455983.
Cotton, Richard. 2013. Learning R. 1st ed. O’Reilly.
Crawley, Michael J. 2012. The R book. 2nd ed. Wiley.
———. 2015. Statistics : an introduction using R. 2nd ed. Wiley.
Dahl, David B. 2016. Xtable: Export Tables to Latex or Html. https://CRAN.R-
project.org/package=xtable.
Davies, Tilman M. 2016. The book of R - a first course in programming and statistics. 1st ed.
No Starch Press.
Field, Andy P., Jeremy Miles, and Zoe. Field. 2012. Discovering statistics using R. 1st ed.
London: Sage.
Fox, John, and Sanford Weisberg. 2016. Car: Companion to Applied
Regression. https://CRAN.R-project.org/package=car.
Gandrud, Christopher. 2015. Reproducible research with R and RStudio. 2nd ed. Chapman &
Hall. https://github.com/christophergandrud/Rep-Res-Book.
Grolemund, Garrett. 2014. Hands-on programming with R. O’Reilly.
Kabacoff, Robert. 2015. R in action : data analysis and graphics with R. 2nd ed.
Manning. https://github.com/kabacoff/RiA2 http://www.statmethods.net/.
Lander, Jared P. 2014. R for everyone : advanced analytics and graphics. New York, N.Y.:
Addison-Wesley.
MacFerlane, John. 2016. “Pandoc - a universal document converter.” http://pandoc.org/.
Matloff, Norman S. 2011. The art of R programming : tour of statistical software design. No
Starch Press. http://heather.cs.ucdavis.edu/{~}matloff/132/NSPpart.pdf.
Murrell, Paul. 2009. “R Graphics.” In Wiley Interdisciplinary Reviews: Computational Statistics,
1:216–20. doi:10.1002/wics.22.
R Core Team. 2016. R: A Language and Environment for Statistical Computing. Vienna,
Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
RStudio Team. 2016. RStudio: Integrated Development Environment for R. Boston, MA:
RStudio, Inc. http://www.rstudio.com/.
Teetor, Paul, and Michael Kosta. Loukides. 2011. R cookbook. O’Reilly. http://www.cookbook-
r.com/.
Wickham, Hadley. 2016. Ggplot2. 2nd ed. Use R! Cham: Springer International Publishing.
doi:10.1007/978-3-319-24277-4.
Xie, Yihui. 2016. Knitr: A General-Purpose