Informe de ventas de carros

Caratula

Caratula estadistica
Caratula estadistica

Índice

  1. Aspectos generales
    1.1 Nombre de la organización y/o empresa (real o propuesta)
    1.2 Descripción del caso (o los caso) que se va a analizar
  2. Fundamentos básicos de la Estadística
    2.1 Objetivo de estudio 2.2 Población de estudio
    2.3 Muestra 2.4 Unidad de análisis
  3. Variables y tipo de variables
  4. Manejo de base de datos
  5. Tablas de frecuencia (Para cada variable)
  6. Representación gráfica de datos.
  7. Medidas estadísticas de tendencia
  8. Medidas estadísticas de posición
  9. Manejo de datos Missing
  10. Manejo de valores outliers
  11. Transformación de variables
  12. Estandarización y normalización de variables
  13. Modelamiento predictivo

Resumen

Este es el conjunto de datos de ventas de automóviles que incluye información sobre diferentes automóviles.

I. Aspectos generales

1.1 Nombre de la organización y/o empresa (real o propuesta)

Carmot venta de coches S.A.C.

1.2 Descripción del caso (o los caso) que se va a analizar

Este es el conjunto de datos de ventas de automóviles que incluye información sobre diferentes automóviles. Este conjunto de datos se está tomando de Analytixlabs con fines de predicción. El conjunto de datos de ventas de automóviles ofrece una valiosa base para realizar análisis predictivos y comprender mejor el mercado automotriz. Al aplicar diferentes técnicas de análisis y considerar las variables relevantes, se pueden obtener insights valiosos para tomar decisiones estratégicas en el ámbito de la venta de vehículos.

II. Fundamentos básicos de la Estadística

2.1 Objetivo de estudio

El objetivo principal del estudio es realizar análisis predictivos del mercado automotriz utilizando el conjunto de datos de ventas de automóviles Específicamente, se busca: Predecir el precio de venta de un vehículo: Pronosticar el valor probable por el que se venderá un vehículo en función de sus características y las condiciones del mercado. Identificar patrones de compra: Analizar las tendencias del mercado automotriz para comprender mejor el comportamiento de los consumidores y las preferencias por diferentes tipos de vehículos. Segmentar el mercado: Dividir el mercado en grupos específicos (por marca, precio, tipo de combustible, etc.) para identificar oportunidades de negocio y estrategias de marketing más efectivas. Evaluar la competencia: Comparar el rendimiento de diferentes marcas y modelos de vehículos para comprender su posicionamiento en el mercado y desarrollar estrategias competitivas. Analizar la estacionalidad: Estudiar si las ventas de automóviles varían a lo largo del año, identificando picos y valles en la demanda para optimizar la gestión del inventario y las estrategias de promoción.

2.2 Población de estudio

La población de estudio está compuesta por todas las transacciones de ventas de automóviles registradas.

2.3 Muestra

La muestra es un subconjunto de la población de estudio que se utiliza para representar a la población. La muestra debe ser representativa de la población para que los resultados del estudio sean válidos.

2.4 Unidad de análisis

La unidad de análisis es cada transacción individual de venta de un automóvil. El conjunto de datos proporciona información específica para cada vehículo vendido, como marca, modelo, año, precio, kilometraje, tipo de combustible, transmisión, color, condición y fecha de venta.

III. Variables y tipo de variables

  • Manufacturer : Identificador único para cada fabricante de automóviles.
  • Model: Nombre específico del vehículo dentro de la marca del fabricante.
  • Sales_in_thousands : Cantidad de unidades del vehículo vendidas en miles.
  • X__year_resale_value : Valor de reventa estimado del vehículo después de X años.
  • Vehicle_type : Categoría del vehículo (automóvil, camión, SUV, etc.).
  • Price_in_thousands: Precio de venta del vehículo en miles.
  • Engine_size: Cilindrada del motor del vehículo en litros.
  • Horsepower: Potencia del motor del vehículo en caballos de fuerza.
  • Wheelbase: Distancia entre las ruedas delanteras y traseras del vehículo en pulgadas.
  • Width: Ancho del vehículo en pulgadas.
  • Length: Largo del vehículo en pulgadas.
  • Curb_weight: Peso del vehículo sin pasajeros ni carga en libras.
  • Fuel_capacity: Capacidad del tanque de combustible del vehículo en galones.
  • Fuel_efficiency: Rendimiento del vehículo en millas por galón.
  • Latest_Launch: Indica si el modelo del vehículo es de reciente lanzamiento (Sí/No).
  • Power_perf_factor: Medida del rendimiento del vehículo en función de la potencia y el peso.

IV. Manejo de base de datos

banco <- read.csv("Car_sales.csv", 
                    sep = ",", stringsAsFactors = TRUE) 
head(banco)

V. Tablas de frecuencia (Para cada variable)

library(agricolae)
tabla_frecuencia_Sales_in_thousands <- table.freq(hist(banco$Sales_in_thousands, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Sales_in_thousands
library(agricolae)
tabla_frecuencia_X__year_resale_value <- table.freq(hist(banco$X__year_resale_value, breaks = "sturges", plot = FALSE))
tabla_frecuencia_X__year_resale_value
library(agricolae)
tabla_frecuencia_Price_in_thousands <- table.freq(hist(banco$Price_in_thousands, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Price_in_thousands
library(agricolae)
tabla_frecuencia_Engine_size <- table.freq(hist(banco$Engine_size, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Engine_size
library(agricolae)
tabla_frecuencia_Horsepower <- table.freq(hist(banco$Horsepower, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Horsepower
library(agricolae)
tabla_frecuencia_Wheelbase <- table.freq(hist(banco$Wheelbase, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Wheelbase
library(agricolae)
tabla_frecuencia_Width <- table.freq(hist(banco$Width, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Width
library(agricolae)
tabla_frecuencia_Length <- table.freq(hist(banco$Length, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Length
library(agricolae)
tabla_frecuencia_Curb_weight <- table.freq(hist(banco$Curb_weight, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Curb_weight
library(agricolae)
tabla_frecuencia_Fuel_capacity <- table.freq(hist(banco$Fuel_capacity, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Fuel_capacity
library(agricolae)
tabla_frecuencia_Fuel_efficiency <- table.freq(hist(banco$Fuel_efficiency, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Fuel_efficiency
library(agricolae)
tabla_frecuencia_Power_perf_factor <- table.freq(hist(banco$Power_perf_factor, breaks = "sturges", plot = FALSE))
tabla_frecuencia_Power_perf_factor

VI. Representación gráfica de datos.

library(ggplot2)
ggplot(data=banco, aes(x=Manufacturer))+
  geom_bar()

library(ggplot2)
ggplot(data = banco, aes(x = Manufacturer, y = Sales_in_thousands)) +
  geom_point() +
  labs(x = "Nombre del producto", y = "Precio del producto")

ggplot(data=banco, aes(Vehicle_type, fill = Vehicle_type))+
  geom_bar()+
  coord_polar("x", start=0)

  ggplot(data=banco, aes(Price_in_thousands))+
  geom_bar()+
  theme_classic()

  ggplot(data=banco, aes(Engine_size))+
  geom_bar()+
  theme_classic()

  ggplot(data=banco, aes(Horsepower))+
  geom_bar()+
  theme_classic()

  ggplot(data=banco, aes(Wheelbase))+
  geom_bar()+
  theme_classic()

  ggplot(data=banco, aes(Fuel_capacity))+
  geom_bar()+
  theme_classic()

  ggplot(data=banco, aes(Fuel_efficiency))+
  geom_bar()+
  theme_classic()

  ggplot(data=banco, aes(Power_perf_factor))+
  geom_bar()+
  theme_classic()

head(banco)

VII. Medidas estadísticas de tendencia

#Sales_in_thousands

Media

Sales_in_thousands <- banco$Sales_in_thousands
promedio = sum(Sales_in_thousands)/length(Sales_in_thousands)
promedio
## [1] 77.51759

Mediana

median(Sales_in_thousands)
## [1] 46.9405

Moda

library(modeest)
## 
## Attaching package: 'modeest'
## The following object is masked from 'package:agricolae':
## 
##     skewness
mfv(Sales_in_thousands)
##  [1]   3.334   6.375   9.126  12.698  12.855  13.462  20.380  22.925  24.072
## [10]  24.155  25.106  27.308  27.609  28.976  39.572  42.574  42.643  51.238
## [19]  54.158  55.557  65.119  68.411  73.203  76.029  79.853  80.556  84.087
## [28]  88.094 125.338 155.787 157.040 220.650 276.747 540.561

#Price_in_thousands

Media

Price_in_thousands <- banco$Price_in_thousands
promedio = sum(Price_in_thousands)/length(Price_in_thousands)
promedio
## [1] 27.6905

Mediana

median(Price_in_thousands)
## [1] 26.324

Moda

library(modeest)
mfv(Price_in_thousands)
##  [1] 11.528 12.050 13.499 14.460 16.888 18.850 20.390 20.550 21.410 21.620
## [11] 22.288 22.368 22.510 22.799 25.635 26.000 26.249 26.399 26.600 26.895
## [21] 26.935 27.560 28.340 29.299 31.505 31.930 34.605 35.300 36.135 37.805
## [31] 42.660 46.305 54.005 60.105

#Horsepower

Media

Horsepower <- banco$Horsepower
promedio = sum(Horsepower)/length(Horsepower)
promedio
## [1] 191.4118

Mediana

median(Horsepower)
## [1] 197.5

Moda

library(modeest)
mfv(Horsepower)
## [1] 210

#Wheelbase

Media

Wheelbase <- banco$Wheelbase
promedio = sum(Wheelbase)/length(Wheelbase)
promedio
## [1] 919.9706

Mediana

median(Wheelbase)
## [1] 1061

Moda

library(modeest)
mfv(Wheelbase)
## [1] 1122

#Width

Media

Width <- banco$Width
promedio = sum(Width)/length(Width)
promedio
## [1] 71.98235

Mediana

median(Width)
## [1] 71.2

Moda

library(modeest)
mfv(Width)
## [1] 66.5 66.7 69.4 70.2 70.4 70.9 74.9

#Length

Media

Length <- banco$Length
promedio = sum(Length)/length(Length)
promedio
## [1] 188.5

Mediana

median(Length)
## [1] 189.65

Moda

library(modeest)
mfv(Length)
## [1] 189.2

#Curb_weight

Media

Curb_weight <- banco$Curb_weight
promedio = sum(Curb_weight)/length(Curb_weight)
promedio
## [1] 3.732029

Mediana

median(Curb_weight)
## [1] 3.791

Moda

library(modeest)
mfv(Curb_weight)
## [1] 3.876

#Fuel_capacity

Media

Fuel_capacity <- banco$Fuel_capacity
promedio = sum(Fuel_capacity)/length(Fuel_capacity)
promedio
## [1] 20.20588

Mediana

median(Fuel_capacity)
## [1] 20

Moda

library(modeest)
mfv(Fuel_capacity)
## [1] 20

#Fuel_efficiency

Media

Fuel_efficiency <- banco$Fuel_efficiency
promedio = sum(Fuel_efficiency)/length(Fuel_efficiency)
promedio
## [1] 21.20588

Mediana

median(Fuel_efficiency)
## [1] 21

Moda

library(modeest)
mfv(Fuel_efficiency)
## [1] 23

VIII. Medidas estadísticas de posición

(cuartiles)

quantile(banco$Price_in_thousands)
##       0%      25%      50%      75%     100% 
## 11.52800 21.46250 26.32400 31.82375 60.10500

Segun los resultados: El valor minimo de un auto es de: 11.52800

### Cuartil 1 \((Q_1)\) interpretación: es $ 21.46250; El 25% de los carros, su monto máximo es $ 21.46250

### Cuartil 2 \((Q_2)\) interpretación: es $ 26.32400; El 50% de los carros, su monto máximo es $ 26.32400

### Cuartil 3 \((Q_3)\) interpretación: es $ 31.82375; El 75% de los carros, su monto máximo es $ 31.82375

Dividir en 10 grupo (deciles)

quantile(banco$Price_in_thousands, probs = seq(0, 1, 0.1))
##      0%     10%     20%     30%     40%     50%     60%     70%     80%     90% 
## 11.5280 15.1884 20.4860 22.2212 23.3662 26.3240 26.9270 29.5196 34.8830 41.2035 
##    100% 
## 60.1050

Dividir en 100 grupo (percentiles)

quantile(banco$Price_in_thousands, probs = seq(0, 1, 0.01))
##       0%       1%       2%       3%       4%       5%       6%       7% 
## 11.52800 11.70026 11.87252 12.04478 12.51368 12.99185 13.47002 13.79691 
##       8%       9%      10%      11%      12%      13%      14%      15% 
## 14.11404 14.43117 15.18840 15.98964 16.79088 17.45698 18.10444 18.75190 
##      16%      17%      18%      19%      20%      21%      22%      23% 
## 19.28120 19.78940 20.29760 20.43320 20.48600 20.53880 20.77360 21.05740 
##      24%      25%      26%      27%      28%      29%      30%      31% 
## 21.34120 21.46250 21.53180 21.60110 21.78032 22.00076 22.22120 22.30640 
##      32%      33%      34%      35%      36%      37%      38%      39% 
## 22.33280 22.35920 22.39924 22.44610 22.49296 22.57069 22.66606 22.76143 
##      40%      41%      42%      43%      44%      45%      46%      47% 
## 23.36620 24.30208 25.23796 25.70435 25.82480 25.94525 26.04482 26.12699 
##      48%      49%      50%      51%      52%      53%      54%      55% 
## 26.20916 26.27450 26.32400 26.37350 26.43116 26.49749 26.56382 26.64425 
##      56%      57%      58%      59%      60%      61%      62%      63% 
## 26.74160 26.83895 26.90060 26.91380 26.92700 27.01625 27.22250 27.42875 
##      64%      65%      66%      67%      68%      69%      70%      71% 
## 27.65360 27.91100 28.16840 28.44549 28.76196 29.07843 29.51960 30.24758 
##      72%      73%      74%      75%      76%      77%      78%      79% 
## 30.97556 31.54325 31.68350 31.82375 32.14400 33.02675 33.90950 34.65365 
##      80%      81%      82%      83%      84%      85%      86%      87% 
## 34.88300 35.11235 35.35010 35.62565 35.90120 36.21850 36.76960 37.32070 
##      88%      89%      90%      91%      92%      93%      94%      95% 
## 37.99920 39.60135 41.20350 42.76935 43.97220 45.17505 46.45900 49.00000 
##      96%      97%      98%      99%     100% 
## 51.54100 54.06600 56.07900 58.09200 60.10500

Asimetría y curtosis

Asimetría

library(fBasics)
## 
## Attaching package: 'fBasics'
## The following objects are masked from 'package:modeest':
## 
##     ghMode, ghtMode, gldMode, hypMode, nigMode, skewness
## The following objects are masked from 'package:agricolae':
## 
##     kurtosis, skewness
skewness(banco$Price_in_thousands)
## [1] 1.046977
## attr(,"method")
## [1] "moment"

Resultado: [1] 1.046977

hist(banco$Price_in_thousands)

Curtosis

kurtosis(banco$Price_in_thousands)
## [1] 0.9996178
## attr(,"method")
## [1] "excess"

IX. Manejo de datos Missing

# Cargar conjunto de datos
bancoTwo<-read.csv("Car_sales.csv",
                    sep = "," , stringsAsFactors = TRUE)
# Mostrar
head(bancoTwo)
str(bancoTwo)
## 'data.frame':    34 obs. of  16 variables:
##  $ Manufacturer        : Factor w/ 12 levels "Chrysler","Ford",..: 1 2 2 2 2 2 3 3 3 4 ...
##  $ Model               : Factor w/ 34 levels "4Runner","Altima",..: 12 7 32 6 24 8 4 21 20 33 ...
##  $ Sales_in_thousands  : num  13.5 276.7 155.8 125.3 220.7 ...
##  $ X__year_resale_value: num  17.32 16.64 13.18 23.57 7.85 ...
##  $ Vehicle_type        : Factor w/ 2 levels "Car","Passenger": 2 1 1 1 1 1 1 1 1 1 ...
##  $ Price_in_thousands  : num  28.3 31.9 21.4 36.1 12.1 ...
##  $ Engine_size         : int  15 19 40 31 38 46 20 32 35 25 ...
##  $ Horsepower          : int  253 210 150 240 119 220 121 205 210 120 ...
##  $ Wheelbase           : int  113 1116 1207 119 1175 1385 1032 1094 1191 934 ...
##  $ Width               : num  74.4 70.2 76.6 78.7 69.4 79.1 68.9 70.4 75.6 66.7 ...
##  $ Length              : num  208 191 201 205 201 ...
##  $ Curb_weight         : num  3.56 3.88 3.76 4.81 3.09 ...
##  $ Fuel_capacity       : num  17 21 26 26 20 25.1 15.3 21.1 20 19 ...
##  $ Fuel_efficiency     : int  23 19 21 16 23 18 24 19 23 17 ...
##  $ Latest_Launch       : Factor w/ 31 levels "1/14/2012","1/24/2011",..: 23 20 13 30 1 27 15 7 14 17 ...
##  $ Power_perf_factor   : num  101.3 87.6 62.1 100 47.4 ...

Verificación de valores perdidos

# Verificar columnas con missing
which(colSums(is.na(bancoTwo))!= 0)
## X__year_resale_value 
##                    4

Realizar el análisis utilizando librerias

library(VIM)
library(mice)

resumen_missing <- aggr(bancoTwo, numbers=T)

summary(resumen_missing)
## 
##  Missings per variable: 
##              Variable Count
##          Manufacturer     0
##                 Model     0
##    Sales_in_thousands     0
##  X__year_resale_value     1
##          Vehicle_type     0
##    Price_in_thousands     0
##           Engine_size     0
##            Horsepower     0
##             Wheelbase     0
##                 Width     0
##                Length     0
##           Curb_weight     0
##         Fuel_capacity     0
##       Fuel_efficiency     0
##         Latest_Launch     0
##     Power_perf_factor     0
## 
##  Missings in combinations of variables: 
##                     Combinations Count   Percent
##  0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0    33 97.058824
##  0:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0     1  2.941176

Para determinar mejor lo patrones de comportamiento de missing se puede utilizar la siguiente función

library(VIM)
matrixplot(bancoTwo)

otra representación

#Con librería mice
library(mice)
md.pattern(bancoTwo, rotate.names = TRUE)

##    Manufacturer Model Sales_in_thousands Vehicle_type Price_in_thousands
## 33            1     1                  1            1                  1
## 1             1     1                  1            1                  1
##               0     0                  0            0                  0
##    Engine_size Horsepower Wheelbase Width Length Curb_weight Fuel_capacity
## 33           1          1         1     1      1           1             1
## 1            1          1         1     1      1           1             1
##              0          0         0     0      0           0             0
##    Fuel_efficiency Latest_Launch Power_perf_factor X__year_resale_value  
## 33               1             1                 1                    1 0
## 1                1             1                 1                    0 1
##                  0             0                 0                    1 1

La librería visdat permite visualizar missing pero los ordena por tipo de datos

library(visdat)
vis_dat(bancoTwo)

Para obtener columnas con porcentajes de missing

vis_miss(bancoTwo)

Corrección de missing

Eliminar filas o columnas con missin (es recomendable optar por eliminar columnas si el % de missing esta por arriba de 15% <para ralgunos expertos 30%>)

banco_corregido1 <- na.omit(bancoTwo)
str(banco_corregido1)
## 'data.frame':    33 obs. of  16 variables:
##  $ Manufacturer        : Factor w/ 12 levels "Chrysler","Ford",..: 1 2 2 2 2 2 3 3 3 4 ...
##  $ Model               : Factor w/ 34 levels "4Runner","Altima",..: 12 7 32 6 24 8 4 21 20 33 ...
##  $ Sales_in_thousands  : num  13.5 276.7 155.8 125.3 220.7 ...
##  $ X__year_resale_value: num  17.32 16.64 13.18 23.57 7.85 ...
##  $ Vehicle_type        : Factor w/ 2 levels "Car","Passenger": 2 1 1 1 1 1 1 1 1 1 ...
##  $ Price_in_thousands  : num  28.3 31.9 21.4 36.1 12.1 ...
##  $ Engine_size         : int  15 19 40 31 38 46 20 32 35 25 ...
##  $ Horsepower          : int  253 210 150 240 119 220 121 205 210 120 ...
##  $ Wheelbase           : int  113 1116 1207 119 1175 1385 1032 1094 1191 934 ...
##  $ Width               : num  74.4 70.2 76.6 78.7 69.4 79.1 68.9 70.4 75.6 66.7 ...
##  $ Length              : num  208 191 201 205 201 ...
##  $ Curb_weight         : num  3.56 3.88 3.76 4.81 3.09 ...
##  $ Fuel_capacity       : num  17 21 26 26 20 25.1 15.3 21.1 20 19 ...
##  $ Fuel_efficiency     : int  23 19 21 16 23 18 24 19 23 17 ...
##  $ Latest_Launch       : Factor w/ 31 levels "1/14/2012","1/24/2011",..: 23 20 13 30 1 27 15 7 14 17 ...
##  $ Power_perf_factor   : num  101.3 87.6 62.1 100 47.4 ...
##  - attr(*, "na.action")= 'omit' Named int 15
##   ..- attr(*, "names")= chr "15"
# Verificar columnas con missing
which(colSums(is.na(banco_corregido1))!= 0)
## named integer(0)

Aplicando técnicas de imputación Imputación por medidas de tendencia central

library(DMwR2)
banco_corregido2<-centralImputation(bancoTwo) #DMwR, mediana (númerico), moda(no númerico)
str(banco_corregido2)
## 'data.frame':    34 obs. of  16 variables:
##  $ Manufacturer        : Factor w/ 12 levels "Chrysler","Ford",..: 1 2 2 2 2 2 3 3 3 4 ...
##  $ Model               : Factor w/ 34 levels "4Runner","Altima",..: 12 7 32 6 24 8 4 21 20 33 ...
##  $ Sales_in_thousands  : num  13.5 276.7 155.8 125.3 220.7 ...
##  $ X__year_resale_value: num  17.32 16.64 13.18 23.57 7.85 ...
##  $ Vehicle_type        : Factor w/ 2 levels "Car","Passenger": 2 1 1 1 1 1 1 1 1 1 ...
##  $ Price_in_thousands  : num  28.3 31.9 21.4 36.1 12.1 ...
##  $ Engine_size         : int  15 19 40 31 38 46 20 32 35 25 ...
##  $ Horsepower          : int  253 210 150 240 119 220 121 205 210 120 ...
##  $ Wheelbase           : int  113 1116 1207 119 1175 1385 1032 1094 1191 934 ...
##  $ Width               : num  74.4 70.2 76.6 78.7 69.4 79.1 68.9 70.4 75.6 66.7 ...
##  $ Length              : num  208 191 201 205 201 ...
##  $ Curb_weight         : num  3.56 3.88 3.76 4.81 3.09 ...
##  $ Fuel_capacity       : num  17 21 26 26 20 25.1 15.3 21.1 20 19 ...
##  $ Fuel_efficiency     : int  23 19 21 16 23 18 24 19 23 17 ...
##  $ Latest_Launch       : Factor w/ 31 levels "1/14/2012","1/24/2011",..: 23 20 13 30 1 27 15 7 14 17 ...
##  $ Power_perf_factor   : num  101.3 87.6 62.1 100 47.4 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido2))!= 0)
## named integer(0)

Utilizando otra librería para imputar datos

library(VIM)
banco_corregido3 <- initialise(bancoTwo, method = "median") #media (continuos) mediana (discretos), moda(no númerico)
str(banco_corregido3)
## 'data.frame':    34 obs. of  16 variables:
##  $ Manufacturer        : Factor w/ 12 levels "Chrysler","Ford",..: 1 2 2 2 2 2 3 3 3 4 ...
##  $ Model               : Factor w/ 34 levels "4Runner","Altima",..: 12 7 32 6 24 8 4 21 20 33 ...
##  $ Sales_in_thousands  : num  13.5 276.7 155.8 125.3 220.7 ...
##  $ X__year_resale_value: num  17.32 16.64 13.18 23.57 7.85 ...
##  $ Vehicle_type        : Factor w/ 2 levels "Car","Passenger": 2 1 1 1 1 1 1 1 1 1 ...
##  $ Price_in_thousands  : num  28.3 31.9 21.4 36.1 12.1 ...
##  $ Engine_size         : num  15 19 40 31 38 46 20 32 35 25 ...
##  $ Horsepower          : num  253 210 150 240 119 220 121 205 210 120 ...
##  $ Wheelbase           : num  113 1116 1207 119 1175 ...
##  $ Width               : num  74.4 70.2 76.6 78.7 69.4 79.1 68.9 70.4 75.6 66.7 ...
##  $ Length              : num  208 191 201 205 201 ...
##  $ Curb_weight         : num  3.56 3.88 3.76 4.81 3.09 ...
##  $ Fuel_capacity       : num  17 21 26 26 20 25.1 15.3 21.1 20 19 ...
##  $ Fuel_efficiency     : num  23 19 21 16 23 18 24 19 23 17 ...
##  $ Latest_Launch       : Factor w/ 31 levels "1/14/2012","1/24/2011",..: 23 20 13 30 1 27 15 7 14 17 ...
##  $ Power_perf_factor   : num  101.3 87.6 62.1 100 47.4 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido3))!= 0)
## named integer(0)

Imputación utilizando neighboor más cercanos

library(DMwR2)
banco_corregido4<-knnImputation(bancoTwo, k=10)
str(banco_corregido4)
## 'data.frame':    34 obs. of  16 variables:
##  $ Manufacturer        : Factor w/ 12 levels "Chrysler","Ford",..: 1 2 2 2 2 2 3 3 3 4 ...
##  $ Model               : Factor w/ 34 levels "4Runner","Altima",..: 12 7 32 6 24 8 4 21 20 33 ...
##  $ Sales_in_thousands  : num  13.5 276.7 155.8 125.3 220.7 ...
##  $ X__year_resale_value: num  17.32 16.64 13.18 23.57 7.85 ...
##  $ Vehicle_type        : Factor w/ 2 levels "Car","Passenger": 2 1 1 1 1 1 1 1 1 1 ...
##  $ Price_in_thousands  : num  28.3 31.9 21.4 36.1 12.1 ...
##  $ Engine_size         : int  15 19 40 31 38 46 20 32 35 25 ...
##  $ Horsepower          : int  253 210 150 240 119 220 121 205 210 120 ...
##  $ Wheelbase           : int  113 1116 1207 119 1175 1385 1032 1094 1191 934 ...
##  $ Width               : num  74.4 70.2 76.6 78.7 69.4 79.1 68.9 70.4 75.6 66.7 ...
##  $ Length              : num  208 191 201 205 201 ...
##  $ Curb_weight         : num  3.56 3.88 3.76 4.81 3.09 ...
##  $ Fuel_capacity       : num  17 21 26 26 20 25.1 15.3 21.1 20 19 ...
##  $ Fuel_efficiency     : int  23 19 21 16 23 18 24 19 23 17 ...
##  $ Latest_Launch       : Factor w/ 31 levels "1/14/2012","1/24/2011",..: 23 20 13 30 1 27 15 7 14 17 ...
##  $ Power_perf_factor   : num  101.3 87.6 62.1 100 47.4 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido4))!= 0)
## named integer(0)

X. Manejo de valores outliers

banco <- read.csv("Car_sales.csv", 
                    sep = ",", stringsAsFactors = TRUE)
# Mostrar datos
head(banco)
# Resumen
summary(banco)
##   Manufacturer        Model    Sales_in_thousands X__year_resale_value
##  Lexus  :6     4Runner   : 1   Min.   :  3.334    Min.   : 7.85       
##  Nissan :6     Altima    : 1   1st Qu.: 24.093    1st Qu.:13.78       
##  Ford   :5     Cherokee  : 1   Median : 46.941    Median :17.71       
##  Toyota :4     CR-V      : 1   Mean   : 77.518    Mean   :19.11       
##  Honda  :3     ES300     : 1   3rd Qu.: 80.380    3rd Qu.:23.00       
##  Jeep   :3     Expedition: 1   Max.   :540.561    Max.   :40.38       
##  (Other):7     (Other)   :28                      NA's   :1           
##     Vehicle_type Price_in_thousands  Engine_size      Horsepower   
##  Car      :18    Min.   :11.53      Min.   :15.00   Min.   :110.0  
##  Passenger:16    1st Qu.:21.46      1st Qu.:21.00   1st Qu.:150.0  
##                  Median :26.32      Median :30.00   Median :197.5  
##                  Mean   :27.69      Mean   :29.32   Mean   :191.4  
##                  3rd Qu.:31.82      3rd Qu.:34.50   3rd Qu.:220.0  
##                  Max.   :60.10      Max.   :46.00   Max.   :300.0  
##                                                                    
##    Wheelbase        Width           Length       Curb_weight    Fuel_capacity  
##  Min.   : 103   Min.   :66.50   Min.   :152.0   Min.   :2.580   Min.   :13.20  
##  1st Qu.:1002   1st Qu.:69.60   1st Qu.:180.2   1st Qu.:3.314   1st Qu.:18.50  
##  Median :1061   Median :71.20   Median :189.7   Median :3.791   Median :20.00  
##  Mean   : 920   Mean   :71.98   Mean   :188.5   Mean   :3.732   Mean   :20.21  
##  3rd Qu.:1122   3rd Qu.:74.78   3rd Qu.:196.2   3rd Qu.:3.943   3rd Qu.:21.00  
##  Max.   :1385   Max.   :79.90   Max.   :224.5   Max.   :5.401   Max.   :30.00  
##                                                                                
##  Fuel_efficiency   Latest_Launch Power_perf_factor
##  Min.   :15.00   10/5/2012: 2    Min.   : 47.39   
##  1st Qu.:19.00   3/7/2011 : 2    1st Qu.: 62.60   
##  Median :21.00   5/6/2011 : 2    Median : 79.21   
##  Mean   :21.21   1/14/2012: 1    Mean   : 80.08   
##  3rd Qu.:23.00   1/24/2011: 1    3rd Qu.: 90.23   
##  Max.   :30.00   1/4/2012 : 1    Max.   :125.01   
##                  (Other)  :25

Para todas las columnas

boxplot(banco)

head(banco)

Para Sales_in_thousands

boxplot(banco$Sales_in_thousands)

Para X__year_resale_value

boxplot(banco$X__year_resale_value)

Para Price_in_thousands

#Gráfico de cajas y bigotes
boxplot(banco$Price_in_thousands)

Para Engine_size

boxplot(banco$Engine_size)

Para Horsepower

boxplot(banco$Horsepower)

Para Wheelbase

#Gráfico de cajas y bigotes
boxplot(banco$Wheelbase)

Para Width

boxplot(banco$Width)

Para Length

boxplot(banco$Length)

Para Curb_weight

#Gráfico de cajas y bigotes
boxplot(banco$Curb_weight)

Para Fuel_capacity

boxplot(banco$Fuel_capacity)

Para Fuel_efficiency

#Gráfico de cajas y bigotes
boxplot(banco$Fuel_efficiency)

Para Power_perf_factor

#Gráfico de cajas y bigotes
boxplot(banco$Power_perf_factor)

Según los resultados, se identifica valores atípicos. Vamos a identificarlo y plantear estrategia de corrección

# Calcular el RIC (RIC = Q3 - Q1)
q1 <- quantile(banco$Sales_in_thousands, 0.25)
q3 <- quantile(banco$Sales_in_thousands, 0.75)
RIC <- q3-q1
RIC
##     75% 
## 56.2875
# Limites o bigotes (Superior e inferior)
bigote_inferior <- q1-1.5*RIC
bigote_inferior
##      25% 
## -60.3385
bigote_superior <- q3+1.5*RIC
bigote_superior
##      75% 
## 164.8115
# Identificar lo valores atípicos
outliers_det <- banco$Sales_in_thousands[banco$Sales_in_thousands < bigote_inferior | banco$Sales_in_thousands > bigote_superior]
outliers_det
## [1] 276.747 220.650 540.561

Correción

Eliminar los atípicos

telco_sin_atipicos <- banco[!banco$Sales_in_thousands %in% outliers_det,]
telco_sin_atipicos

Para confirmar vamos a realizar un gráfico de cajas con la nueva data

boxplot(telco_sin_atipicos$Sales_in_thousands)

XI. Transformación de variables

La transformación y estandarización de variables son técnicas comunes utilizadas en el análisis de datos para mejorar la interpretación de los datos y garantizar que las variables sean comparables entre sí.

# 
banco<-read.csv("Car_sales.csv", sep = ",", encoding = "latin1", stringsAsFactors = T)

head(banco)

Transformación de raíz cuadrada:

Esta transformación se utiliza para reducir la dispersión de los datos cuando estos tienen una distribución con una varianza que aumenta con el nivel medio de la variable. También puede ayudar a reducir la asimetría.

# Original
hist(banco$Horsepower, 12)

Para sacar la raiz cuadrada, simplemente se puede utilizar la función sqrt

sqrt(banco$Horsepower)
##  [1] 15.90597 14.49138 12.24745 15.49193 10.90871 14.83240 11.00000 14.31782
##  [9] 14.49138 10.95445 13.78405 13.96424 14.49138 15.00000 17.32051 17.02939
## [17] 15.16575 14.83240 17.32051 14.49138 13.03840 14.66288 11.83216 12.44990
## [25] 14.89966 10.48809 14.14214 10.48809 12.24745 13.60147 11.91638 13.92839
## [33] 12.12436 12.24745

Graficamente

hist(sqrt(banco$Horsepower))

Transformación de variables

Se aplica cuando los datos tienen una distribución sesgada hacia la izquierda (asimetría negativa). La transformación exponencial puede ayudar a corregir la asimetría y hacer que los datos se aproximen más a una distribución simétrica.

en r para poder obtener esta transformación, se debe utilizar la función exp()

exp(banco$Horsepower)
##  [1] 7.524955e+109  1.591627e+91  1.393710e+65 1.700888e+104  4.797813e+51
##  [6]  3.505791e+95  3.545131e+52  1.072430e+89  1.591627e+91  1.304181e+52
## [11]  3.280587e+82  4.868823e+84  1.591627e+91  5.203055e+97 1.942426e+130
## [16] 8.818602e+125  7.722018e+99  3.505791e+95 1.942426e+130  1.591627e+91
## [21]  6.761794e+73  2.362183e+93  6.327432e+60  2.068448e+67  2.590449e+96
## [26]  5.920972e+47  7.225974e+86  5.920972e+47  1.393710e+65  2.210442e+80
## [31]  4.675375e+61  1.791140e+84  6.938871e+63  1.393710e+65

para poder observarlo graficamente se tiene:

hist(exp(banco$Horsepower))

Forma 2

Horsepower_exp<- exp(banco$Horsepower)
hist(Horsepower_exp)

Transformación logarítmica:

Esta transformación se utiliza cuando los datos presentan una distribución sesgada hacia la derecha (asimetría positiva). La transformación logarítmica reduce la asimetría y puede facilitar la interpretación de los datos.

Para la transformación logaritmica, utilizar log (dentro de los argumentos se puede cambiar la base)

log(banco$Horsepower)
##  [1] 5.533389 5.347108 5.010635 5.480639 4.779123 5.393628 4.795791 5.323010
##  [9] 5.347108 4.787492 5.247024 5.273000 5.347108 5.416100 5.703782 5.669881
## [17] 5.438079 5.393628 5.703782 5.347108 5.135798 5.370638 4.941642 5.043425
## [25] 5.402677 4.700480 5.298317 4.700480 5.010635 5.220356 4.955827 5.267858
## [33] 4.990433 5.010635

graficamente

hist(log(banco$Horsepower))

Cambiar la base 2

log(banco$Horsepower, base=2)
##  [1] 7.982994 7.714246 7.228819 7.906891 6.894818 7.781360 6.918863 7.679480
##  [9] 7.714246 6.906891 7.569856 7.607330 7.714246 7.813781 8.228819 8.179909
## [17] 7.845490 7.781360 8.228819 7.714246 7.409391 7.748193 7.129283 7.276124
## [25] 7.794416 6.781360 7.643856 6.781360 7.228819 7.531381 7.149747 7.599913
## [33] 7.199672 7.228819

graficamente

hist(log(banco$Horsepower, base=2))

Comparación de transformaciones

#Obtener solo tranaformaciones
Horsepower_sqrt <- sqrt(banco$Horsepower)
Horsepower_exp <- exp(banco$Horsepower)
Horsepower_ln <- log(banco$Horsepower)
Horsepower_log2 <- log(banco$Horsepower, base=2)
Horsepower_log5 <- log(banco$Horsepower, base=5)

Ver graficamente cada una:

par(mfrow=c(3,2))
hist(banco$Horsepower)
hist(Horsepower_sqrt)
hist(Horsepower_exp)
hist(Horsepower_ln)
hist(Horsepower_log2)
hist(Horsepower_log5)

par(mfrow=c(1,1))

Este tipo de transformaciones, busca que los datos sean simétricos (distribución forma de campana) o que se cumpla un supuesto estadístico La visualización de la distribución puede mejorarse con la gráfica de densidad

par(mfrow=c(3,2))
plot(density(banco$Horsepower), main = "Distribución de caballos de fuerza originales")
plot(density(Horsepower_sqrt), main = "Distribución de caballos de fuerza transformadas - sqrt")
plot(density(Horsepower_exp), main = "Distribución de caballos de fuerza transformadas - exp")
plot(density(Horsepower_ln), main = "Distribución de caballos de fuerza transformadas - ln")
plot(density(Horsepower_log2), main = "Distribución de caballos de fuerza transformadas - log2")
plot(density(Horsepower_log5), main = "Distribución de caballos de fuerza transformadas - log5")

par(mfrow=c(1,1))    

Se puede realizar un análisis general de las variables originales y verificar su comportmiento, a partir de allí se puede aplicar la transformación más adecuado según objetivo.

gráfica general

library(PerformanceAnalytics)
chart.Correlation(cor(banco[,7:9]), histogram = TRUE)

XII. Estandarización y normalización de variables

Estandarización de variables:

La estandarización de variables, también conocida como normalización, implica transformar los valores de una variable para que tengan una media de cero y una desviación estándar de uno. Esto se logra restando la media de la variable a cada valor y dividiendo por la desviación estándar.

La estandarización es útil cuando se desea comparar variables que están en diferentes escalas o unidades. Al estandarizar las variables, se eliminan las diferencias en las escalas y se asegura que todas las variables tengan la misma escala relativa.

Por ejemplo, si tienes un conjunto de variables con diferentes unidades de medida, como peso en kilogramos y altura en metros, puedes estandarizar ambas variables para que sean comparables y no se vean afectadas por las diferencias en las unidades.

Metodo 1: por partes

banco$Horsepower
##  [1] 253 210 150 240 119 220 121 205 210 120 190 195 210 225 300 290 230 220 300
## [20] 210 170 215 140 155 222 110 200 110 150 185 142 194 147 150
media_Horsepower <- mean(banco$Horsepower)
media_Horsepower                                         
## [1] 191.4118
desv_est <- sd(banco$Horsepower)
desv_est
## [1] 52.06239
Horsepower_estandar <- (banco$Horsepower-media_Horsepower) / desv_est
Horsepower_estandar
##  [1]  1.18296991  0.35703772 -0.79542580  0.93326948 -1.39086529  0.54911497
##  [7] -1.35244984  0.26099909  0.35703772 -1.37165756 -0.02711679  0.06892184
## [13]  0.35703772  0.64515360  2.08573300  1.89365574  0.74119222  0.54911497
## [19]  2.08573300  0.35703772 -0.41127130  0.45307634 -0.98750306 -0.69938718
## [25]  0.58753042 -1.56373482  0.16496046 -1.56373482 -0.79542580 -0.12315542
## [31] -0.94908760  0.04971411 -0.85304898 -0.79542580

Metodo 2: Directo

media_Horsepower_estandar2 <- (banco$Horsepower-mean(banco$Horsepower))/sd(banco$Horsepower)
media_Horsepower_estandar2
##  [1]  1.18296991  0.35703772 -0.79542580  0.93326948 -1.39086529  0.54911497
##  [7] -1.35244984  0.26099909  0.35703772 -1.37165756 -0.02711679  0.06892184
## [13]  0.35703772  0.64515360  2.08573300  1.89365574  0.74119222  0.54911497
## [19]  2.08573300  0.35703772 -0.41127130  0.45307634 -0.98750306 -0.69938718
## [25]  0.58753042 -1.56373482  0.16496046 -1.56373482 -0.79542580 -0.12315542
## [31] -0.94908760  0.04971411 -0.85304898 -0.79542580

Metodo 3: apoyarse en la funciones de R

R tiene multiple funciones para estandarizacion, la clasica es la funcion scale

Horsepower_estandar3 <- scale(banco$Horsepower)
Horsepower_estandar3
##              [,1]
##  [1,]  1.18296991
##  [2,]  0.35703772
##  [3,] -0.79542580
##  [4,]  0.93326948
##  [5,] -1.39086529
##  [6,]  0.54911497
##  [7,] -1.35244984
##  [8,]  0.26099909
##  [9,]  0.35703772
## [10,] -1.37165756
## [11,] -0.02711679
## [12,]  0.06892184
## [13,]  0.35703772
## [14,]  0.64515360
## [15,]  2.08573300
## [16,]  1.89365574
## [17,]  0.74119222
## [18,]  0.54911497
## [19,]  2.08573300
## [20,]  0.35703772
## [21,] -0.41127130
## [22,]  0.45307634
## [23,] -0.98750306
## [24,] -0.69938718
## [25,]  0.58753042
## [26,] -1.56373482
## [27,]  0.16496046
## [28,] -1.56373482
## [29,] -0.79542580
## [30,] -0.12315542
## [31,] -0.94908760
## [32,]  0.04971411
## [33,] -0.85304898
## [34,] -0.79542580
## attr(,"scaled:center")
## [1] 191.4118
## attr(,"scaled:scale")
## [1] 52.06239

La ventaja de la funcion de R, es que se puede enviar todo el caso

banco_cuanti_scale <- scale(banco[,7:9])
banco_cuanti_scale
##       Engine_size  Horsepower   Wheelbase
##  [1,] -1.75608734  1.18296991 -2.08683465
##  [2,] -1.26568102  0.35703772  0.50693418
##  [3,]  1.30895216 -0.79542580  0.74226116
##  [4,]  0.20553794  0.93326948 -2.07131859
##  [5,]  1.06374900 -1.39086529  0.65950881
##  [6,]  2.04456164  0.54911497  1.20257108
##  [7,] -1.14307944 -1.35244984  0.28970927
##  [8,]  0.32813952  0.26099909  0.45004194
##  [9,]  0.69594426  0.35703772  0.70088499
## [10,] -0.53007154 -1.37165756  0.03628021
## [11,]  1.30895216 -0.02711679  0.24316107
## [12,]  1.30895216  0.06892184  0.35953156
## [13,]  0.08293636  0.35703772  0.33884347
## [14,]  0.08293636  0.64515360  0.47073002
## [15,]  1.18635058  2.08573300  0.47073002
## [16,]  1.30895216  1.89365574  0.52245024
## [17,]  1.43155374  0.74119222  0.52245024
## [18,] -1.14307944  0.54911497 -2.11269476
## [19,]  0.08293636  2.08573300 -2.07131859
## [20,] -1.14307944  0.35703772  0.50693418
## [21,]  0.08293636 -0.41127130  0.52245024
## [22,] -0.28486838  0.45307634 -2.09200668
## [23,] -1.38828260 -0.98750306  0.20178490
## [24,] -1.14307944 -0.69938718  0.28712326
## [25,]  0.08293636  0.58753042  0.42159582
## [26,]  0.45074110 -1.56373482  0.52245024
## [27,]  0.45074110  0.16496046  0.36987560
## [28,]  0.45074110 -1.56373482  0.31815539
## [29,] -0.65267312 -0.79542580  0.55089636
## [30,] -0.65267312 -0.12315542 -2.06873258
## [31,] -0.65267312 -0.94908760  0.29229528
## [32,]  0.08293636  0.04971411  0.57417046
## [33,] -1.14307944 -0.85304898  0.07507037
## [34,] -1.14307944 -0.79542580  0.34401550
## attr(,"scaled:center")
## Engine_size  Horsepower   Wheelbase 
##    29.32353   191.41176   919.97059 
## attr(,"scaled:scale")
## Engine_size  Horsepower   Wheelbase 
##    8.156502   52.062385  386.695988
boxplot(banco_cuanti_scale)

\[ X_{norm}=\frac{\left(X_i-X_{\min }\right)}{X_{\max }-X_{\min }} \] Metodo 1:

Horsepower_normal <- (banco$Horsepower-min(banco$Horsepower))/(max(banco$Horsepower)-min(banco$Horsepower))
Horsepower_normal
##  [1] 0.75263158 0.52631579 0.21052632 0.68421053 0.04736842 0.57894737
##  [7] 0.05789474 0.50000000 0.52631579 0.05263158 0.42105263 0.44736842
## [13] 0.52631579 0.60526316 1.00000000 0.94736842 0.63157895 0.57894737
## [19] 1.00000000 0.52631579 0.31578947 0.55263158 0.15789474 0.23684211
## [25] 0.58947368 0.00000000 0.47368421 0.00000000 0.21052632 0.39473684
## [31] 0.16842105 0.44210526 0.19473684 0.21052632

Metodo 2:

library(scales)
rescale(banco$Horsepower)
##  [1] 0.75263158 0.52631579 0.21052632 0.68421053 0.04736842 0.57894737
##  [7] 0.05789474 0.50000000 0.52631579 0.05263158 0.42105263 0.44736842
## [13] 0.52631579 0.60526316 1.00000000 0.94736842 0.63157895 0.57894737
## [19] 1.00000000 0.52631579 0.31578947 0.55263158 0.15789474 0.23684211
## [25] 0.58947368 0.00000000 0.47368421 0.00000000 0.21052632 0.39473684
## [31] 0.16842105 0.44210526 0.19473684 0.21052632

Aplicando a todo el caso (var cuantitativas) la funcion rescale solo se permite aplicarse a vectores, no es posible directamente apicar al data frame.

library(caret)
## Loading required package: lattice
pre_procesamiento <- preProcess(banco[,4:9]) # Asi por defecto muestra la estandarizacion z
predict(pre_procesamiento, banco[,4:9])
library(caret)
pre_procesamiento <- preProcess(banco[,4:9], method = "range") # Asi por defecto muestra la estandarizacion z
predict(pre_procesamiento, banco[,4:9])

XIII. Modelamiento predictivo

a. Regresión lineal simple

Que es regresión lineal simple?

La regresión lineal simple (RLS) es un modelo estadístico que se utiliza para predecir una variable dependiente continua (Y) a partir de una única variable independiente (X). La RLS busca establecer una relación lineal entre las dos variables.

Ingresamos los datos

datos <- read.csv("Car_sales.csv")

# Seleccionar las columnas
dataPredic <- datos[, c("Wheelbase", "Engine_size")]

# Ver el data frame
str(datos)
## 'data.frame':    34 obs. of  16 variables:
##  $ Manufacturer        : chr  "Chrysler" "Ford" "Ford" "Ford" ...
##  $ Model               : chr  "LHS" "Explorer" "Windstar" "Expedition" ...
##  $ Sales_in_thousands  : num  13.5 276.7 155.8 125.3 220.7 ...
##  $ X__year_resale_value: num  17.32 16.64 13.18 23.57 7.85 ...
##  $ Vehicle_type        : chr  "Passenger" "Car" "Car" "Car" ...
##  $ Price_in_thousands  : num  28.3 31.9 21.4 36.1 12.1 ...
##  $ Engine_size         : int  15 19 40 31 38 46 20 32 35 25 ...
##  $ Horsepower          : int  253 210 150 240 119 220 121 205 210 120 ...
##  $ Wheelbase           : int  113 1116 1207 119 1175 1385 1032 1094 1191 934 ...
##  $ Width               : num  74.4 70.2 76.6 78.7 69.4 79.1 68.9 70.4 75.6 66.7 ...
##  $ Length              : num  208 191 201 205 201 ...
##  $ Curb_weight         : num  3.56 3.88 3.76 4.81 3.09 ...
##  $ Fuel_capacity       : num  17 21 26 26 20 25.1 15.3 21.1 20 19 ...
##  $ Fuel_efficiency     : int  23 19 21 16 23 18 24 19 23 17 ...
##  $ Latest_Launch       : chr  "5/8/2012" "4/25/2012" "2/25/2012" "9/14/2012" ...
##  $ Power_perf_factor   : num  101.3 87.6 62.1 100 47.4 ...
head(datos)

Pasos para construir un modelo de regresión:

Paso 1: Determinar las variables X,Y

* Variable independiente (X): Inversión * Variable dependiente (y): ganancia

Paso 2: Evaluar la relación entre variables (Correlación) graficamente

Diagrama de dispersión o puntos

plot(x=dataPredic$Wheelbase,y=dataPredic$Engine_size)

pairs(dataPredic)

Coeficiente de correlación

# Mediante la función cor
cor(dataPredic) # Matriz de correlaciones
##             Wheelbase Engine_size
## Wheelbase   1.0000000   0.3789151
## Engine_size 0.3789151   1.0000000

r = 0.3789151
Interpretación: Existe correlación positiva entre la Wheelbase y la Engine_size

Como en este caso el coeficiente de correlación es superior a 0.35, es viable la regresión.

Paso 3: Regresión

Regresión lineal simple

Para obtener el modelo, se va a utilizar una función de R > lm

# lm, notación: Y ~ X, data=
modelo1 <- lm(Wheelbase  ~ Engine_size , data=dataPredic)

# Resumen de resultados
summary(modelo1)
## 
## Call:
## lm(formula = Wheelbase ~ Engine_size, data = dataPredic)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -831.09   -3.75  122.41  205.63  381.48 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  393.197    235.817   1.667   0.1052  
## Engine_size   17.964      7.756   2.316   0.0271 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 363.4 on 32 degrees of freedom
## Multiple R-squared:  0.1436, Adjusted R-squared:  0.1168 
## F-statistic: 5.365 on 1 and 32 DF,  p-value: 0.02711
#Coefficients:
#            Estimate Std. Error t value Pr(>|t|)  
#(Intercept)  393.197    235.817   1.667   0.1052  
#Engine_size   17.964      7.756   2.316   0.0271 *
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 363.4 on 32 degrees of freedom
#Multiple R-squared:  0.1436,   Adjusted R-squared:  0.1168 
#F-statistic: 5.365 on 1 and 32 DF,  p-value: 0.02711

Modelo final con los resultados:

Modelo general

$ = 393.197 +17.964 X $

Modelo para el caso:

\(\hat{ganancia} = 393.197 + 17.964 Inversión\)

b. Regresión lineal múltiple

# lm, notación: Y ~ X, data=
modeloMulti <- lm(banco$Engine_size ~ banco$Wheelbase + banco$Horsepower)

# Resumen de resultados
summary(modeloMulti)
## 
## Call:
## lm(formula = banco$Engine_size ~ banco$Wheelbase + banco$Horsepower)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -13.6653  -4.5908   0.0269   6.3067  10.5936 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)   
## (Intercept)      6.884339   6.628314   1.039   0.3070   
## banco$Wheelbase  0.010897   0.003371   3.233   0.0029 **
## banco$Horsepower 0.064855   0.025036   2.590   0.0145 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.061 on 31 degrees of freedom
## Multiple R-squared:  0.296,  Adjusted R-squared:  0.2506 
## F-statistic: 6.516 on 2 and 31 DF,  p-value: 0.004341
#Coefficients:
#                  Estimate Std. Error t value Pr(>|t|)  
#(Intercept)      33.847570  15.846124   2.136   0.0407 *
#banco$Wheelbase  -0.013571   0.007661  -1.771   0.0863 .
#banco$Horsepower -0.003086   0.060851  -0.051   0.9599  
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 16.07 on 31 degrees of freedom
#Multiple R-squared:  0.1003,   Adjusted R-squared:  0.04227 
#F-statistic: 1.728 on 2 and 31 DF,  p-value: 0.1943

c. Regresión lineal logistica

#Coefficients:
#                  Estimate Std. Error t value Pr(>|t|)  
#(Intercept)      33.847570  15.846124   2.136   0.0407 *
#banco$Wheelbase  -0.013571   0.007661  -1.771   0.0863 .
#banco$Horsepower -0.003086   0.060851  -0.051   0.9599  
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 16.07 on 31 degrees of freedom
#Multiple R-squared:  0.1003,   Adjusted R-squared:  0.04227 
#F-statistic: 1.728 on 2 and 31 DF,  p-value: 0.1943