tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el...

32
Usando la regresión lineal para el modelado predictivo en R https://www.dataquest.io/blog/statistical-learning-for-predictive- modeling-r/ Flujo de trabajo típico de la ciencia de datos: 1. Recopile algunos datos relevantes para el problema (más es casi siempre mejor). 2. Si es necesario limpie, aumente y pre- procese los datos de una forma conveniente. 3. Realice un análisis exploratorio de los datos para tener una mejor idea de ellos. 4. Usando lo que encuentre como guía, construya un modelo de algún aspecto de los datos. 5. Utilice el modelo para responder la pregunta con la que comenzó y valide sus resultados. Realizar una regresión lineal para construir un modelo que prediga el volumen del cerezo: El conjunto de datos de los árboles se incluye en el paquete datasets de la base R Análisis preliminar exploratorio. ¿Cómo se ve el conjunto de datos?

Transcript of tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el...

Page 1: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Usando la regresión lineal para el modelado predictivo en Rhttps://www.dataquest.io/blog/statistical-learning-for-predictive-modeling-r/

Flujo de trabajo típico de la ciencia de datos:

1.Recopile algunos datos relevantes para el problema (más es casi siempre mejor).

2.Si es necesario limpie, aumente y pre-procese los datos de una forma conveniente.

3.Realice un análisis exploratorio de los datos para tener una mejor idea de ellos.

4.Usando lo que encuentre como guía, construya un modelo de algún aspecto de los datos.

5.Utilice el modelo para responder la pregunta con la que comenzó y valide sus resultados.

Realizar una regresión lineal para construir un modelo que prediga el volumen del cerezo:El conjunto de datos de los árboles se incluye en el paquete datasets de la base RAnálisis preliminar exploratorio. ¿Cómo se ve el conjunto de datos?data(trees) ## access the data from R’s datasets package

head(trees) ## look at the first several rows of the data

Page 2: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

str(trees) ## look at the structure of the variables

Este conjunto de datos consta de 31 observaciones de 3 variables numéricas que describen cerezos negros:

La circunferencia del tronco (en)

Page 3: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Altura en pies) volumen (ft 3)

Es bastante sencillo medir la altura del árbol y la circunferencia con herramientas forestales básicas, pero medir el volumen del árbol es mucho más difícil. Si no quiere realmente cortar y desmontar el árbol, tiene que recurrir a algunas actividades técnicamente difíciles y que requieren mucho tiempo, como trepar al árbol y realizar mediciones precisas. Sería útil poder predecir con precisión el volumen del árbol a partir de la altura y / o la circunferencia. 

Para decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables de respuesta (en este caso, circunferencia, altura y volumen). Hagamos

Page 4: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

alguna visualización exploratoria de datos. Usaremos la función ggpairs() del paquete GGally para crear una matriz gráfica para ver cómo las variables se relacionan entre sí.ggpairs(data=trees, columns=1:3, title="trees data")

La función ggpairs() proporciona gráficos de dispersión para cada combinación de variables, así como gráficos de densidad para cada variable y la fuerza de las correlaciones entre variables.¿Qué variables predictoras parecen estar relacionadas con la variable de respuesta?Al observar la salida de ggpairs(), que la circunferencia definitivamente parece estar relacionada con el volumen: el coeficiente de correlación es cercano a 1 y los puntos parecen tener un patrón lineal. Puede haber una relación entre la altura y el volumen, pero parece ser más débil: el coeficiente de correlación es más pequeño y los puntos en el diagrama de dispersión están más dispersos.¿Cuál es la forma de la relación entre las variables? La relación parece ser lineal; desde el diagrama de dispersión, podemos ver que el volumen del árbol aumenta constantemente a medida que aumenta la circunferencia del árbol.¿La relación es fuerte o el ruido en los datos está saturando la señal? La relación entre altura y volumen no es tan clara, pero la relación entre la circunferencia y el volumen parece ser fuerte.

Page 5: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Ahora que tenemos una comprensión general de los datos, podemos pasar al paso 4 y hacer un modelo predictivo.

Formando una hipótesisUna hipótesis es una conjetura sobre lo que creemos que está sucediendo con nuestros datos. En este caso, supongamos que la circunferencia y el volumen del cerezo están relacionados. Cada hipótesis que formamos tiene un opuesto: la "hipótesis nula" (H0). Aquí, nuestra hipótesis nula es que la circunferencia y el volumen no están relacionados.

En estadística, la hipótesis nula es la que utilizamos nuestros datos para respaldar o rechazar; nunca podemos decir que "probamos" una hipótesis. Llamamos a la hipótesis de que la circunferencia y el volumen están relacionados con nuestra hipótesis "alternativa" (Ha).Para resumir:H0: No hay relación entre la circunferencia y el volumen Ha: Hay alguna relación entre la circunferencia y el volumenEl modelo de regresión lineal es lo que usaremos para probar nuestra hipótesis. Si encontramos evidencia suficiente para rechazar H0, podemos usar el modelo para predecir el volumen del cerezo a partir de la circunferencia.Construcción de un modelo de regresión lineal

Page 6: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

La regresión lineal describe la relación entre una variable de respuesta (o variable dependiente) de interés y una o más variables predictoras (o independientes). Nos ayuda a separar la señal (lo que podemos aprender acerca de la variable de respuesta de la variable predictor) del ruido (lo que no podemos aprender acerca de la variable de respuesta a partir de la variable predictor). 

Construyamos un modelo lineal que relacione el volumen del árbol con la circunferencia.

fit_1 <- lm(Volume ~ Girth, data = trees)

La función lm() se ajusta a una línea de nuestros datos lo más cercana posible a todas nuestras 31 observaciones. Más específicamente, se ajusta a la

Page 7: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

línea de tal manera que la suma de la diferencia cuadrada entre los puntos y la línea se minimiza; este método se conoce como "minimizar los mínimos cuadrados".

Incluso cuando un modelo de regresión lineal se ajusta muy bien a los datos, el ajuste no es perfecto. Las distancias entre nuestras observaciones y su valor predicho por el modelo se denominan residuales.

Matemáticamente, podemos escribir la ecuación para la regresión lineal como:

Y ≈ β0 + β1 X + ε

Page 8: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Las variables Y y X son las variables de respuesta y predictor de nuestros datos que nos relacionamos entre sí.

β0 es el coeficiente del modelo que representa la intersección del modelo, o donde cruza el eje y

β1 es el coeficiente del modelo que representa la pendiente del modelo, el número que proporciona información sobre la inclinación de la línea y su dirección (positiva o negativa)

ε es el término de error que abarca la variabilidad que no podemos capturar en el modelo (lo que X no puede decirnos acerca de Y)

En el caso de nuestro ejemplo: Volumen del árbol ≈ Intercepto + Pendiente (circunferencia del árbol) + Error

Page 9: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

La función lm() calcula los coeficientes de intersección y pendiente para el modelo lineal que se ajusta a nuestros datos. Con un modelo en la mano, podemos continuar con el paso 5, teniendo en cuenta que todavía tenemos mucho trabajo por hacer para validar la idea de que este modelo es en realidad un ajuste apropiado para los datos.

¿Podemos usar este modelo para hacer predicciones?Si podemos usar nuestro modelo para hacer predicciones dependerá de:

1.Si podemos rechazar la hipótesis nula de que no hay relación entre nuestras variables.

2.Si el modelo es un buen ajuste para nuestros datos.

Page 10: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Llamemos a la salida de nuestro modelo usando summary(). El resultado del modelo nos proporcionará la información que necesitamos para probar nuestra hipótesis y evaluar qué tan bien el modelo se ajusta a nuestros datos.

summary(fit_1)

Vamos a caminar a través de la salida para responder a cada una de estas preguntas.

¿Se apoya la hipótesis?Coeficientes: estimación y error estándar:

La intersección en nuestro ejemplo es el volumen del árbol esperado si el valor de la circunferencia era

Page 11: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

cero. Por supuesto, no podemos tener un árbol con volumen negativo.

La pendiente en nuestro ejemplo es el efecto de la circunferencia del árbol en el volumen del árbol. Vemos que, por cada pulgada adicional de circunferencia, el volumen del árbol aumenta en 5.0659 pies 3.

Los errores estándar de los coeficientes nos dicen la variación promedio de los coeficientes estimados con respecto al promedio real de nuestra variable de respuesta.

Valor t: Este es un estadístico de prueba que mide

cuántas desviaciones estándar tiene el coeficiente estimado de cero.Pr (> | t |):

Este número es el valor p, definido como la probabilidad de observar cualquier valor igual o mayor que t si H0 es verdadero. Cuanto mayor sea el estadístico t, menor será el valor p. En general, usamos 0.05 como límite para el significado; cuando los valores de p son más pequeños que 0.05, rechazamos H0.Podemos rechazar la hipótesis nula a favor de creer que existe una relación entre el ancho y el volumen del árbol.

¿Qué tan bien se ajusta el modelo a los datos?Residuos:

Esta sección de la salida nos proporciona un resumen de los residuos (recuerde que estas son las distancias entre nuestra observación y el modelo), que nos dice algo sobre qué tan bien nuestro modelo se ajusta a nuestros datos. Los residuos deben tener una

Page 12: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

distribución bastante simétrica alrededor de cero. En general, buscamos que los residuos se distribuyan normalmente alrededor de cero (es decir, una distribución de curva de campana), pero lo importante es que no hay un patrón visible para ellos, lo que indicaría que un modelo lineal no es apropiado para los datos.Podemos hacer un histograma para visualizar esto utilizando ggplot2.

ggplot(data=trees, aes(fit_1$residuals)) + geom_histogram(binwidth = 1, color = "black", fill = "purple4") + theme(panel.background = element_rect(fill = "white"), axis.line.x=element_line(), axis.line.y=element_line()) + ggtitle("Histogram for Model Residuals")

Nuestros residuos parecen bastante simétricos en torno a cero, lo que sugiere que nuestro modelo se ajusta bien a los datos.

Page 13: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Error estándar residual: Este término representa la cantidad promedio que

nuestras mediciones de variable de respuesta se desvían del modelo lineal ajustado (el término de error del modelo).

Grados de libertad (DoF): Es el número de piezas de información independientes

que se utilizaron para calcular una estimación. Los DoF están relacionados con, pero no es lo mismo que, el número de mediciones.R cuadrado múltiple:

El valor R2 es una medida de qué tan cerca están nuestros datos del modelo de regresión lineal. Los valores de R2 están siempre entre 0 y 1; los números más cercanos a 1 representan modelos bien ajustados. R  2 siempre aumenta a medida que se incluyen más variables en el modelo, por lo que se incluye R2 ajustado para tener en cuenta el número de variables independientes utilizadas para hacer el modelo.Estadístico F:

Este estadístico de prueba nos dice si existe una relación entre las variables dependientes e independientes que estamos probando. Generalmente, una F grande indica una relación más fuerte.p-valor:

Este valor de p está asociado con el estadístico F, y se utiliza para interpretar el significado de todo el modelo ajustado a nuestros datos.Echemos un vistazo a nuestro modelo ajustado a nuestros datos de ancho y volumen. Podemos hacer

Page 14: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

esto utilizando ggplot() para ajustar un modelo lineal a un diagrama de dispersión de nuestros datos:

ggplot(data = trees, aes(x = Girth, y = Volume)) + geom_point() +

stat_smooth(method = "lm", col = "dodgerblue3") +

theme(panel.background = element_rect(fill = "white"),

axis.line.x=element_line(),

axis.line.y=element_line()) +

ggtitle("Linear Model Fitted to Data")

El sombreado gris alrededor de la línea representa un intervalo de confianza de 0.95, el valor predeterminado para la función stat_smooth(), que suaviza los datos para facilitar la visualización de los patrones. Este intervalo de confianza de 0.95 es la probabilidad de que el verdadero modelo lineal para la circunferencia y el volumen de todos los cerezos negros se encuentre dentro del intervalo de confianza del modelo de regresión ajustado a nuestros datos.

Page 15: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Aunque este modelo se ajusta bastante bien a nuestros datos, todavía hay variabilidad dentro de nuestras observaciones. Esto es porque el mundo es generalmente desordenado. En nuestro modelo, el volumen del árbol no es solo una función de la circunferencia del árbol, sino también de cosas que no necesariamente tenemos datos que cuantificar (diferencias individuales entre la forma del tronco del árbol, pequeñas diferencias en las técnicas de medición de la circunferencia del tronco de los forestales).

A veces, esta variabilidad oscurece cualquier relación que pueda existir entre la respuesta y las variables predictoras. Pero aquí, la señal en nuestros datos es lo suficientemente fuerte como para permitirnos desarrollar un modelo útil para hacer predicciones.

Usando nuestro modelo lineal simple para hacer predicciones.¿Es nuestro modelo es adecuado para hacer predicciones?  Digamos que tenemos datos de grosor, altura y volumen para un árbol que se dejó fuera del conjunto de datos. Podemos usar este árbol para probar nuestro modelo.

Page 16: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

¿Qué tan bien hará nuestro modelo la predicción del volumen de ese árbol a partir de su circunferencia?

Usaremos la función predict(), una función genérica de R para hacer predicciones a partir de modelos de ajuste. predict() toma como argumentos nuestro modelo de regresión lineal y los valores de la variable predictiva para los que queremos valores de la variable de respuesta.

predict(fit_1, data.frame(Girth = 18.2))

Nuestra predicción de volumen es de 55.2 ft 3.Esto está cerca de nuestro valor real, pero es posible que agregar altura, nuestra otra variable predictiva, a nuestro modelo nos permita hacer mejores predicciones.

Añadiendo más predictores: regresión lineal múltiple.Tal vez podamos mejorar la capacidad predictiva de nuestro modelo si usamos toda la información que tenemos disponible (ancho y alto) para hacer predicciones sobre el volumen del árbol. 

Podríamos construir dos modelos de regresión separados y evaluarlos, pero hay algunos problemas con este enfoque. En primer lugar, imagine cuán engorroso sería si tuviéramos 5, 10 o incluso 50 variables predictoras. Segundo, dos modelos

Page 17: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

predictivos nos darían dos predicciones separadas para el volumen en lugar de la única predicción que buscamos. Quizás lo más importante es que la construcción de dos modelos separados no nos permite tener en cuenta las relaciones entre los predictores al estimar los coeficientes del modelo.

En nuestro conjunto de datos, sospechamos que la altura y la circunferencia del árbol se correlacionan en función de nuestra exploración de datos inicial. 

Una mejor solución es construir un modelo lineal que incluya múltiples variables de predicción. Podemos hacer esto agregando un coeficiente de pendiente para cada variable independiente adicional de interés para nuestro modelo.

Volumen del árbol ≈ Interceptar + Pendiente1 (circunferencia del árbol) + Pendiente2 (Altura del árbol) + ErrorEsto es fácil de hacer con la función lm(): solo necesitamos agregar la otra variable predictiva.

fit_2 <- lm(Volume ~ Girth + Height, data = trees)

summary(fit_2)

Page 18: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Podemos ver en la salida del modelo que tanto la circunferencia como la altura están significativamente relacionadas con el volumen, y que el modelo se ajusta bien a nuestros datos. Nuestro valor de R2 ajustado también es un poco más alto que nuestro R2 ajustado para el modelo fit_1.Como tenemos dos variables predictoras en este modelo, necesitamos una tercera dimensión para visualizarlo. Podemos crear un buen diagrama de dispersión 3D usando el paquete scatterplot3d:Primero, hacemos una cuadrícula de valores para nuestras variables predictoras (dentro del rango de nuestros datos). La función expand.grid() crea un marco de datos de todas las combinaciones de las variables de factor.

Girth <- seq(9,21, by=0.5) ## make a girth vector

Height <- seq(60,90, by=0.5) ## make a height vector

pred_grid <- expand.grid(Girth = Girth, Height = Height) ## make a grid using the vectors

A continuación, hacemos predicciones para el volumen en función de la cuadrícula de variable de predictor:

Page 19: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

pred_grid$Volume2 <-predict(fit_2, new = pred_grid)Ahora podemos hacer un diagrama de dispersión 3D a partir de la cuadrícula de predicción y los volúmenes previstos:fit_2_sp <- scatterplot3d(pred_grid$Girth, pred_grid$Height, pred_grid$Volume2, angle = 60, color = "dodgerblue", pch = 1,

ylab = "Hight (ft)", xlab = "Girth (in)", zlab = "Volume (ft3)" )

Y finalmente superpone nuestras observaciones reales para ver qué tan bien encajan:

Page 20: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Veamos cómo funciona este modelo al predecir el volumen de nuestro árbol. Esta vez, incluimos la altura del árbol ya que nuestro modelo usa la Altura como una variable predictiva:predict(fit_2, data.frame(Girth = 18.2, Height = 72))

Esta vez, obtenemos un volumen predicho de 52.13 pies3. Esta predicción está más cerca de nuestro verdadero volumen de árbol que la que obtuvimos utilizando nuestro modelo simple con solo la circunferencia como predictor, pero, como estamos a punto de ver, podemos mejorar.Contabilidad de interaccionesSi bien hemos hecho mejoras, el modelo que acabamos de construir todavía no cuenta toda la historia. Se supone que el efecto de la circunferencia del árbol en el volumen es independiente del efecto de la altura del árbol en el volumen. Este claramente no es el caso, ya que la altura y la circunferencia del árbol están relacionadas; los árboles más altos tienden a ser más anchos, y nuestra visualización de datos exploratorios

Page 21: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

lo indica. Dicho de otra manera, la pendiente para la circunferencia debería aumentar a medida que aumenta la pendiente para la altura.

Para tener en cuenta esta no independencia de las variables predictoras en nuestro modelo, podemos especificar un término de interacción, que se calcula como el producto de las variables predictoras.

Volumen del árbol ≈ Interceptar + Pendiente1 (Circunferencia del árbol) + Pendiente2 (Altura del árbol) + Pendiente3 (Circunferencia del árbol x Altura del árbol) + ErrorUna vez más, es fácil construir este modelo usando lm():

fit_3 <- lm(Volume ~ Girth * Height, data = trees)

summary(fit_3)

Como sospechamos, la interacción de la circunferencia y la altura es significativa, lo que sugiere que debemos incluir el término de interacción en el modelo que utilizamos para predecir el volumen del árbol. Esta decisión también está respaldada por

Page 22: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

el valor R2 ajustado cercano a 1, el gran valor de F y el pequeño valor de p que sugieren que nuestro modelo es un muy buen ajuste para los datos.Echemos un vistazo a un diagrama de dispersión para visualizar los valores pronosticados para el volumen del árbol usando este modelo. Podemos usar la misma cuadrícula de valores de predictor que generamos para la visualización de fit_2:Girth <- seq(9,21, by=0.5)

Height <- seq(60,90, by=0.5)

pred_grid <- expand.grid(Girth = Girth, Height = Height)

De manera similar a cómo visualizamos el modelo fit_2, usaremos el modelo fit_3 con el término de interacción para predecir los valores para el volumen de la cuadrícula de variables predictoras:pred_grid$Volume3 <-predict(fit_3, new = pred_grid)

Ahora hacemos un diagrama de dispersión de la cuadrícula del predictor y los volúmenes previstos:fit_3_sp <- scatterplot3d(pred_grid$Girth, pred_grid$Height, pred_grid$Volume3, angle = 60, color = "dodgerblue", pch = 1, ylab = "Hight (ft)", xlab = "Girth (in)", zlab = "Volume (ft3)")

Page 23: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Finalmente, superponemos nuestros datos observados:

fit_3_sp$points3d(trees$Girth, trees$Height, trees$Volume, pch=16)

Page 24: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

Es un poco difícil de ver en esta imagen, pero esta vez nuestras predicciones se basan en una superficie curva en lugar de un plano. Ahora para el momento de la verdad: usemos este modelo para predecir el volumen de nuestro árbol.predict(fit_3, data.frame(Girth = 18.2, Height = 72))

Nuestro valor predicho que utiliza este tercer modelo es 45.89, el más cercano a nuestro verdadero valor de 46.2 pies3 .

Algunas notas de precaución sobre los modelos predictivos.Tenga en cuenta el alcance de sus datosCuando se usa un modelo para hacer predicciones, es una buena idea evitar tratar de extrapolar mucho más allá del rango de valores utilizados para construir el modelo. Para ilustrar este punto, tratemos de estimar el volumen de un árbol joven:

predict(fit_3, data.frame(Girth = 0.25, Height = 4))

Obtenemos un volumen predicho de 62.88 pies 3 , más masivo que los árboles altos en nuestro conjunto de datos. Por supuesto, esto no tiene sentido. Tenga en cuenta que nuestra capacidad para hacer predicciones precisas está limitada por el rango de datos que utilizamos para construir nuestros modelos.

Page 25: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

ANEXO: Codigo R#Usando la regresión lineal para el modelado predictivo en R

#https://www.dataquest.io/blog/statistical-learning-for-predictive-modeling-r/

data(trees) ## access the data from R’s datasets package

head(trees) ## look at the first several rows of the data

str(trees) ## look at the structure of the variables

##

install.packages("GGally")

library(GGally)

ggpairs(data=trees, columns=1:3, title="trees data")

fit_1 <- lm(Volume ~ Girth, data = trees)

##

install.packages("ggplot2")

library(ggplot2)

ggplot(data=trees, aes(fit_1$residuals)) +

geom_histogram(binwidth = 1, color = "black", fill = "purple4") +

theme(panel.background = element_rect(fill = "white"),

axis.line.x=element_line(),

axis.line.y=element_line()) +

ggtitle("Histogram for Model Residuals")

##

ggplot(data = trees, aes(x = Girth, y = Volume)) + geom_point() +

stat_smooth(method = "lm", col = "dodgerblue3") +

theme(panel.background = element_rect(fill = "white"),

axis.line.x=element_line(),

Page 26: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

axis.line.y=element_line()) +

ggtitle("Linear Model Fitted to Data")

##

predict(fit_1, data.frame(Girth = 18.2))

##

fit_2 <- lm(Volume ~ Girth + Height, data = trees)

summary(fit_2)

##

install.packages("scatterplot3d")

library(scatterplot3d)

Girth <- seq(9,21, by=0.5) ## make a girth vector

Height <- seq(60,90, by=0.5) ## make a height vector

pred_grid <- expand.grid(Girth = Girth, Height = Height) ## make a grid using the vectors

pred_grid$Volume2 <-predict(fit_2, new = pred_grid)

fit_2_sp <- scatterplot3d(pred_grid$Girth, pred_grid$Height, pred_grid$Volume2, angle = 60, color = "dodgerblue", pch = 1,

ylab = "Hight (ft)", xlab = "Girth (in)", zlab = "Volume (ft3)" )

fit_2_sp$points3d(trees$Girth, trees$Height, trees$Volume, pch=16)

##

fit_3 <- lm(Volume ~ Girth * Height, data = trees)

summary(fit_3)

##

Girth <- seq(9,21, by=0.5)

Height <- seq(60,90, by=0.5)

pred_grid <- expand.grid(Girth = Girth, Height = Height)

pred_grid$Volume3 <-predict(fit_3, new = pred_grid)

fit_3_sp <- scatterplot3d(pred_grid$Girth, pred_grid$Height,

Page 27: tallerdeinvestigacion.weebly.com · Web viewPara decidir si podemos hacer un modelo predictivo, el primer paso es ver si parece haber una relación entre nuestro predictor y las variables

pred_grid$Volume3, angle = 60, color = "dodgerblue",

pch = 1, ylab = "Hight (ft)", xlab = "Girth (in)",

zlab = "Volume (ft3)")

fit_3_sp$points3d(trees$Girth, trees$Height, trees$Volume, pch=16)

predict(fit_3, data.frame(Girth = 18.2, Height = 72))

##

predict(fit_3, data.frame(Girth = 0.25, Height = 4))