Mostrando entradas con la etiqueta Regresión lineal. Mostrar todas las entradas
Mostrando entradas con la etiqueta Regresión lineal. Mostrar todas las entradas

2018-12-17

Gráficos de An Introduction to Statistical Learning con ggplot2 - Figura 3.1.

Gráfico a replicar

Continuamos con la serie iniciada sobre la creación de gráficos del libro An Introduction to Statistical Learning. En esta ocasión replicaremos el gráfico de la figura 3.1. Utiliza el conjunto de datos Advertising.Los puntos rojos representan los valores observados de ventas (sales) y los presupuestos de televisión (TV). La línea azul representa la recta de regresión. Las líneas grises verticales representan el error asociado con cada observación. Hay errores positivos (si la observación se sitúa por encima de la líneaazul) y negativos (si la observación se sitúa por debajo de la curva).

Solución

Con la función theme personalizamos el formato: rotamos las etiquetas del eje y, eliminamos el color de fondo, y añadimos el borde.

library(tidyverse)
ggplot(ad_fitted, aes(x = budgets, y = sales)) +
  geom_point(colour = "red") +
  geom_smooth(se = FALSE, method = lm) +
  geom_segment(aes(
    x = budgets,
    y = sales,
    xend = budgets,
    yend = fitted
  )) +
  scale_x_continuous(breaks = seq(0, 300, by = 50)) +
  scale_y_continuous(breaks = seq(0, 25, by = 5)) +
  theme(
    axis.text.y = element_text(angle = 90, hjust = 1),
    panel.background = element_blank(),
    panel.border = element_rect(fill = NA)
  )
Si deseamos mantener la cuadrícula, pero eliminar el color de fondo (theme_bw) y modificar el título del eje x (labs):

ggplot(ad_fitted, aes(x = budgets, y = sales)) +
  geom_point(colour = "red") +
  geom_smooth(se = FALSE, method = lm) +
  geom_segment(aes(
    x = budgets,
    y = sales,
    xend = budgets,
    yend = fitted
  )) +
  labs(x = "TV")+
  scale_x_continuous(breaks = seq(0, 300, by = 50)) +
  scale_y_continuous(breaks = seq(0, 25, by = 5)) +
  theme_bw()+
  theme(axis.text.y = element_text(angle = 90, hjust = 1))

Entradas relacionadas

Referencias

2018-09-04

Gráficos de An Introduction to Statistical Learning con ggplot2 - Figura 2.2.

Gráfico a replicar

Continuamos con la serie iniciada sobre la creación de gráficos del libro An Introduction to Statistical Learning. En esta ocasión replicaremos los gráficos de la figura 2.2. Utiliza el conjunto de datos Income (renta). A la izquierda los puntos rojos representan los valores observados de renta (en miles de dólares) y los años de educación de 30 individuos. A la derecha la curva azul representa la verdadera relación subyacente entre la renta y los años de educación, que es generalmente desconocida (pero es conocida en este caso porque los datos fueron simulados). Las líneas negras representan el error asociado con cada observación. Hay errores positivos (si la observación se sitúa por encima de la curva azul) y negativos (si la observación se sitúa por debajo de la curva). En total, la media de estos errores es aproximadamente cero.

Solución

Necesitamos crear un nuevo data frame, en el que añadimos una nueva columna con los valores ajustados calculado por el modelo usado por ggplot2 (el método loess es usado para menos de 1.000 observaciones)

library(ggplot2)
library(cowplot)
income_1 <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Income1.csv")

# Gráfico A
p1 <- ggplot(income_1, aes(x= Education, y = Income)) + 
  geom_point()+
  geom_smooth()

# Gráfico B
mod <- loess(Income ~ Education, data = income_1)
income <- transform(income_1, fitted = fitted(mod))
p2 <- ggplot(income, aes(x= Education, y = Income)) + 
  geom_point(colour = "red")+
  geom_smooth(se = FALSE)+
  geom_segment(aes(x = Education, y = Income,
                   xend = Education, yend = fitted))

# Ambos gráficos
theme_set(theme_grey()) # Mantiene theme_grey
plot_grid(p1, p2 , labels = "AUTO")

Entradas relacionadas

Referencias

2018-09-02

Gráficos de An Introduction to Statistical Learning con ggplot2 - Figura 2.1.

Gráfico a replicar

Continuamos con la serie iniciada sobre la creación de gráficos del libro An Introduction to Statistical Learning. En esta ocasión replicaremos los gráficos de la figura 2.1. Utilizan el conjunto de datos Advertising. El gráfico representa las ventas en unidades de mil como una función de los presupuestos de televisión, radio o prensa, para 200 mercados. En cada gráfico se muestra la recta de regresión lineal que mejor se ajusta para las ventas y cada variable, descrito en el capítulo 3 del libro. En otras palabras, cada línea azul representa un modelo simple que puede ser usado para predecir las ventas usando la televisión, radio o prensa respectivamente.

Solución

library(tidyr)
library(ggplot2)
ad <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
ad_long <-  gather(ad, media, budgets,  TV:newspaper, factor_key = TRUE)
ggplot(ad_long, aes(x = budgets, y = sales, colour = media)) +
  geom_point()
ggplot(ad_long, aes(x = budgets, y = sales)) +
  geom_point() +
  facet_grid( ~ media, scales = "free") +
  geom_smooth(method = "lm")

Entradas relacionadas

2015-01-09

Regresión lineal simple en R con ggplot2

Title En una entrada anterior vimos un ejemplo de regresión lineal simple y creamos el diagrama de dispersión y la recta de regresión con funciones del paquete graphics. En esta ocasión emplearemos el paquete ggplot2. Como ejemplo, usamos los datos cats del peso corporal y del corazón de una muestra gatos del paquete MASS en R.

Código

library(MASS)
library(ggplot2)
ggplot(cats, aes(Bwt, Hwt))+
  geom_point(shape = 1)+   
  geom_smooth(method = lm, # Recta de regresión
              se = FALSE)  # Oculta intervalo de confianza

Diagrama de dispersión

Notas

Con la función qplot podemos obtener un gráfico muy similar.

qplot(Bwt, Hwt, data = cats)+ 
  stat_smooth(method = lm, se = FALSE)

Referencias

2014-11-18

Regresión lineal simple para principiantes en Excel

Title La regresión lineal simple sirve para evaluar la relación entre dos variables, una variable independiente X o predictora y una variable dependiente o explicada Y. Se trata de encontrar una ecuación lineal con fines predictivos.

Datos

Como ejemplo, usamos los datos del peso corporal y del corazón de una muestra gatos machos y hembras del paquete MASS en R. Importamos o copiamos los datos en Excel. Tendremos 4 columnas con 144 observaciones. Fichero cats.csv

Obs - número de observaciones
Sex - sexo
Bwt - Body Weight, peso corporal
Hwt - Heart Weight, peso del corazón

Diagrama de dispersión

1. Seleccionamos las columnas Bwt y Hwt.
2. En la ficha Insertar, en el grupo Gráficos, hacemos clic en Dispersión.

Recta de regresión y R²

3. Botón secundario sobre los puntos del gráfico y seleccionamos Agregar línea de tendencia.

4. En Opciones de línea de tendencia, por defecto aparece marcado el tipo lineal, y en la parte inferior marcamos Presentar ecuación en el gráfico y Presentar el valor R cuadrado en el gráfico.
5. Formateamos el gráfico apropiadamente

Alternativa

1. En la ficha Presentación, en el grupo Análisis, clic en Línea de tendencia.

2. Clic sobre la línea de tendencia y seleccionamos Formato de línea de tendencia y, en la parte inferior, marcamos Presentar ecuación en el gráfico y Presentar el valor R cuadrado en el gráfico.

Aplicación del modelo

Con la ecuación de la recta de regresión podemos calcular el valor de la variable dependiente Y introduciendo un valor de la variable independiente X en la misma: y = mx + b

Definimos los nombres:

Bwt= =Hoja1!$C$2:$C$145
Hwt = =Hoja1!$D$2:$D$145

Calculamos la pendiente y la intersección en Y:

m - pendiente: =PENDIENTE(Hwt;Bwt)
b - intersección Y: =INTERSECCION.EJE(Hwt;Bwt)

Ejemplos:

Si un gato pesa 5 Kg, ¿cuál es el peso estimado de su corazón?: = 5*4,03406-0,35666 = 19,81365
Si un gato pesa 3 Kg, ¿cuál es el peso estimado de su corazón?: = 3*4,03406-0,35666 = 11,74552

Bondad del modelo

R², el coeficiente de determinación, nos informa de la bondad del ajuste del modelo. Se calcula elevando al cuadrado el coeficiente de correlación de Pearson. Varía entre 0 y 1.

    0 - las variables son independientes
    1 - existe una relación perfecta entre las variables
En nuestro ejemplo es 0,6466. Indica que conociendo el peso de un gato mejoramos un 64,66% nuestra estimación del peso del corazón, si usamos nuestro modelo en lugar del peso medio del corazón de un gato.

Referencias

2014-11-02

Regresión lineal simple para principiantes en R

Title La regresión lineal simple sirve para evaluar la relación entre dos variables, una variable independiente X o predictora y una variable dependiente o explicada Y. Se trata de encontrar una ecuación lineal con fines predictivos.

Datos

Como ejemplo, usamos los datos cats del peso corporal y del corazón de una muestra gatos machos y hembras del paquete MASS en R.

install.packages("MASS") # Si no está instalado
library(MASS)
str(cats)
summary(cats)
str(cats)
'data.frame': 144 obs. of  3 variables:
 $ Sex: Factor w/ 2 levels "F","M": 1 1 1 1 1 1 1 1 1 1 ...
 $ Bwt: num  2 2 2 2.1 2.1 2.1 2.1 2.1 2.1 2.1 ...
 $ Hwt: num  7 7.4 9.5 7.2 7.3 7.6 8.1 8.2 8.3 8.5 ...
Sex - sexo - factor con los niveles hembras "F" y machos "M"
Bwt - Body Weight, peso corporal
Hwt - Heart Weight, peso del corazón

summary(cats)
 Sex         Bwt             Hwt       
 F:47   Min.   :2.000   Min.   : 6.30  
 M:97   1st Qu.:2.300   1st Qu.: 8.95  
        Median :2.700   Median :10.10  
        Mean   :2.724   Mean   :10.63  
        3rd Qu.:3.025   3rd Qu.:12.12  
        Max.   :3.900   Max.   :20.50 

Diagrama de dispersión

with(cats, plot(Hwt ~ Bwt)) # Alternativa 1
plot(cats$Bwt, cats$Hwt, xlab = "Bwt", ylab = "Hwt") # Alternativa 2
plot(Hwt ~ Bwt, cats)  # Alternativa 3

Recta de regresión y R²

reglineal <- lm(cats$Hwt ~ cats$Bwt) # Alternativa 1
reglineal <- lm(Hwt ~ Bwt, cats) # Alternativa 2
abline(reglineal, col = "red") # Añadimos recta de regresión
# Pendiente e intersección
reglineal
   # Alternativas:
  reglineal[[1]]
  summary(reglineal)$coef[, 1]
  reglineal$coef
Call:
lm(formula = cats$Hwt ~ cats$Bwt)

Coefficients:
(Intercept)     cats$Bwt  
    -0.3567       4.0341  
(Intercept) - b, intersección Y
cats$Bwt - m, pendiente

Más información:

summary(reglineal)
 Call:
lm(formula = cats$Hwt ~ cats$Bwt)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5694 -0.9634 -0.0921  1.0426  5.1238 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -0.3567     0.6923  -0.515    0.607    
cats$Bwt      4.0341     0.2503  16.119   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.452 on 142 degrees of freedom
Multiple R-squared:  0.6466, Adjusted R-squared:  0.6441 
F-statistic: 259.8 on 1 and 142 DF,  p-value: < 2.2e-16

Aplicación del modelo

Con la ecuación de la recta de regresión podemos calcular el valor de la variable dependiente Y introduciendo un valor de la variable independiente X en la misma: y = mx + b

Accedemos a la pendiente y la intersección en Y:

# Intersección
  # coef o coefficients son intercambiables
summary(reglineal)$coef[1, 1]
reglineal$coef[1]  
coef(reglineal)[1] # Sintaxis recomendada
(Intercept) 
 -0.3566624 
# Pendiente
summary(reglineal)$coef[2, 1]
reglineal$coef[2] 
coef(reglineal)[2] 
cats$Bwt 
4.034063

Ejemplos:

Si un gato pesa 5 Kg, ¿cuál es el peso estimado de su corazón?

# Gato de 5kg
pesocorazon <- 5*coef(reglineal)[2]+coef(reglineal)[1] 
pesocorazon
     Bwt 
19.81365 
Si un gato pesa 3 Kg, ¿cuál es el peso estimado de su corazón?

# Gato de 3kg
pesocorazon <- 3*coef(reglineal)[2]+coef(reglineal)[1] 
pesocorazon
     Bwt 
11.74553 

Función

Creamos una sencilla función que nos pregunte el peso del gato en la consola y calcule el peso estimado de su corazón.

fun <- function(){
  x1 <- as.numeric(readline("¿Cuál es peso del gato en kg?"))
    # Check if is NA instead of lenght >1 as we did with  
  if (is.na(x1))  {
    x1 <- 0
  }
  reglineal <- lm(cats$Hwt ~ cats$Bwt)
  pesocorazon <- x1*coef(reglineal)[2]+coef(reglineal)[1]
  print(c("El peso estimado del corazón en gramos es:", 
          round(unname(pesocorazon), 5)), quote = FALSE)
}
¿Cuál es peso del gato en kg?3
[1] El peso estimado del corazón en gramos es:
[2] 11.74553  

Bondad del modelo

El Coeficiente de correlación de Pearson r, nos indica el grado de correlación lineal entre la dos variables. Es la covarianza dividida por el producto de las desviaciones típicas de las dos variables

    -1 - correlación negativa perfecta
    0 - no existe relación lineal
    1 - correlación positiva perfecta

# Coeficiente de correlación de Pearson
cor(cats$Bwt, cats$Hwt)
[1] 0.8041274
Como es próximo a 1, concluimos que existe una correlación lineal positiva entre ambas variables.

El coeficiente de determinación R², nos informa de la bondad del ajuste del modelo. Se calcula elevando al cuadrado el coeficiente de correlación de Pearson. Varía entre 0 y 1. Podemos acceder a él mediante la función summary.lm, como hicimos anteriormente.

    0 - las variables son independientes
    1 - existe una relación perfecta entre las variables

# Coeficiente de determinación
cor(cats$Bwt, cats$Hwt)^2
summary(reglineal)$r.squared  # Mediante summary.lm
[1] 0.6466209
En nuestro ejemplo es 0,6466. Indica que conociendo el peso de un gato mejoramos un 64,66% nuestra estimación del peso del corazón, si usamos nuestro modelo en lugar del peso medio del corazón de un gato.

Referencias

Nube de datos