Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sergio Diaz
2023-06-03
• Corte transversal
• Serie de tiempo
• Datos de panel
• Valores atipicos
• Valores faltantes
• Matriz de correlacion
El objeto df_corte es un data frame con informacion de la poblacion, pbipercapita y expectativa de vida
en diversos paises del mundo.
summary(df_corte)
1
## 1st Qu.:57.16
## Median :71.94
## Mean :67.01
## 3rd Qu.:76.41
## Max. :82.60
Aqui se aplico la funcion subset para seleccionar columnas, el criterio de seleccion se llevo a cabo por la
funcion apply bajo la respuesta de si la columna es o no de formato numerico.
Este resultado sugiere una relacion entre la expectativa de vida y el pbi percapita.
pairs.panels(df_corte_num, pch=21)
pop
8.0e+08
−0.06 0.05
0.0e+00
50000
gdpPercap
0.68
20000
0
40 50 60 70 80
lifeExp
2
1.2 Datos de Series de tiempo
El objeto df_series es un data frame con informacion de los componentes del PBI de Peru.
summary(df_series)
Aqui se aplico la funcion subset para seleccionar columnas, el criterio de seleccion se llevo a cabo por la
funcion apply bajo la respuesta de si la columna es o no de formato numerico.
3
1.2.3 Matriz de dispercion
pairs.panels(df_series_num, pch=21)
Consumo
0.90 0.91 0.92 0.96 0.99
40000
Gasto
0.83 0.88 0.87 0.93
5000
35000
Inversion
0.88 0.97 0.94
5000
Exportaciones
0.94 0.95
15000
Importaciones
0.97
10000
PBI
60000
4
150000
df_series_num$PBI
100000
50000
0
0 20 40 60 80
Index
El objeto df_series es un data frame con informacion de PBI percapita, poblacion y expectativa de vida
para varios años.
table(df_panel$country,df_panel$continent)
##
## Africa Americas Asia Europe Oceania
## Afghanistan 0 0 12 0 0
## Albania 0 0 0 12 0
## Algeria 12 0 0 0 0
## Angola 12 0 0 0 0
## Argentina 0 12 0 0 0
## Australia 0 0 0 0 12
## Austria 0 0 0 12 0
## Bahrain 0 0 12 0 0
## Bangladesh 0 0 12 0 0
## Belgium 0 0 0 12 0
## Benin 12 0 0 0 0
## Bolivia 0 12 0 0 0
5
## Bosnia and Herzegovina 0 0 0 12 0
## Botswana 12 0 0 0 0
## Brazil 0 12 0 0 0
## Bulgaria 0 0 0 12 0
## Burkina Faso 12 0 0 0 0
## Burundi 12 0 0 0 0
## Cambodia 0 0 12 0 0
## Cameroon 12 0 0 0 0
## Canada 0 12 0 0 0
## Central African Republic 12 0 0 0 0
## Chad 12 0 0 0 0
## Chile 0 12 0 0 0
## China 0 0 12 0 0
## Colombia 0 12 0 0 0
## Comoros 12 0 0 0 0
## Congo, Dem. Rep. 12 0 0 0 0
## Congo, Rep. 12 0 0 0 0
## Costa Rica 0 12 0 0 0
## Cote d’Ivoire 12 0 0 0 0
## Croatia 0 0 0 12 0
## Cuba 0 12 0 0 0
## Czech Republic 0 0 0 12 0
## Denmark 0 0 0 12 0
## Djibouti 12 0 0 0 0
## Dominican Republic 0 12 0 0 0
## Ecuador 0 12 0 0 0
## Egypt 12 0 0 0 0
## El Salvador 0 12 0 0 0
## Equatorial Guinea 12 0 0 0 0
## Eritrea 12 0 0 0 0
## Ethiopia 12 0 0 0 0
## Finland 0 0 0 12 0
## France 0 0 0 12 0
## Gabon 12 0 0 0 0
## Gambia 12 0 0 0 0
## Germany 0 0 0 12 0
## Ghana 12 0 0 0 0
## Greece 0 0 0 12 0
## Guatemala 0 12 0 0 0
## Guinea 12 0 0 0 0
## Guinea-Bissau 12 0 0 0 0
## Haiti 0 12 0 0 0
## Honduras 0 12 0 0 0
## Hong Kong, China 0 0 12 0 0
## Hungary 0 0 0 12 0
## Iceland 0 0 0 12 0
## India 0 0 12 0 0
## Indonesia 0 0 12 0 0
## Iran 0 0 12 0 0
## Iraq 0 0 12 0 0
## Ireland 0 0 0 12 0
## Israel 0 0 12 0 0
## Italy 0 0 0 12 0
## Jamaica 0 12 0 0 0
6
## Japan 0 0 12 0 0
## Jordan 0 0 12 0 0
## Kenya 12 0 0 0 0
## Korea, Dem. Rep. 0 0 12 0 0
## Korea, Rep. 0 0 12 0 0
## Kuwait 0 0 12 0 0
## Lebanon 0 0 12 0 0
## Lesotho 12 0 0 0 0
## Liberia 12 0 0 0 0
## Libya 12 0 0 0 0
## Madagascar 12 0 0 0 0
## Malawi 12 0 0 0 0
## Malaysia 0 0 12 0 0
## Mali 12 0 0 0 0
## Mauritania 12 0 0 0 0
## Mauritius 12 0 0 0 0
## Mexico 0 12 0 0 0
## Mongolia 0 0 12 0 0
## Montenegro 0 0 0 12 0
## Morocco 12 0 0 0 0
## Mozambique 12 0 0 0 0
## Myanmar 0 0 12 0 0
## Namibia 12 0 0 0 0
## Nepal 0 0 12 0 0
## Netherlands 0 0 0 12 0
## New Zealand 0 0 0 0 12
## Nicaragua 0 12 0 0 0
## Niger 12 0 0 0 0
## Nigeria 12 0 0 0 0
## Norway 0 0 0 12 0
## Oman 0 0 12 0 0
## Pakistan 0 0 12 0 0
## Panama 0 12 0 0 0
## Paraguay 0 12 0 0 0
## Peru 0 12 0 0 0
## Philippines 0 0 12 0 0
## Poland 0 0 0 12 0
## Portugal 0 0 0 12 0
## Puerto Rico 0 12 0 0 0
## Reunion 12 0 0 0 0
## Romania 0 0 0 12 0
## Rwanda 12 0 0 0 0
## Sao Tome and Principe 12 0 0 0 0
## Saudi Arabia 0 0 12 0 0
## Senegal 12 0 0 0 0
## Serbia 0 0 0 12 0
## Sierra Leone 12 0 0 0 0
## Singapore 0 0 12 0 0
## Slovak Republic 0 0 0 12 0
## Slovenia 0 0 0 12 0
## Somalia 12 0 0 0 0
## South Africa 12 0 0 0 0
## Spain 0 0 0 12 0
## Sri Lanka 0 0 12 0 0
7
## Sudan 12 0 0 0 0
## Swaziland 12 0 0 0 0
## Sweden 0 0 0 12 0
## Switzerland 0 0 0 12 0
## Syria 0 0 12 0 0
## Taiwan 0 0 12 0 0
## Tanzania 12 0 0 0 0
## Thailand 0 0 12 0 0
## Togo 12 0 0 0 0
## Trinidad and Tobago 0 12 0 0 0
## Tunisia 12 0 0 0 0
## Turkey 0 0 0 12 0
## Uganda 12 0 0 0 0
## United Kingdom 0 0 0 12 0
## United States 0 12 0 0 0
## Uruguay 0 12 0 0 0
## Venezuela 0 12 0 0 0
## Vietnam 0 0 12 0 0
## West Bank and Gaza 0 0 12 0 0
## Yemen, Rep. 0 0 12 0 0
## Zambia 12 0 0 0 0
## Zimbabwe 12 0 0 0 0
summary(df_panel)
Aqui se aplico la funcion subset para seleccionar columnas, el criterio de seleccion se llevo a cabo por la
funcion apply bajo la respuesta de si la columna es o no de formato numerico.
8
## year 1.00000000 0.08230808 0.22731807 0.43561122
## pop 0.08230808 1.00000000 -0.02559958 0.06495537
## gdpPercap 0.22731807 -0.02559958 1.00000000 0.58370622
## lifeExp 0.43561122 0.06495537 0.58370622 1.00000000
Este resultado sugiere una relacion entre el pbi percapita y la expectativa de vida.
pairs.panels(df_panel_num, pch=21)
year
1980
0.08 0.23 0.44
1950
0.0e+00 1.0e+09
pop
−0.03 0.06
gdpPercap
8e+04
0.58
0e+00
lifeExp
30 50 70
Las variables en los datos de panel se veen como un desarrollo de varias unidades en el tiempo.
## country 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 2002
## 1 Australia 69.12 70.33 70.93 71.10 71.93 73.49 74.74 76.32 77.56 78.83 80.37
## 2 New Zealand 69.39 70.26 71.24 71.52 71.89 72.22 73.84 74.32 76.33 77.55 79.11
## 2007
## 1 81.235
## 2 80.204
9
dcast(df_panel[df_panel$continent=="Oceania",],formula = "country ~ year",value.var = "gdpPercap")
2.1.1 Modelo
##
## Call:
## lm(formula = lifeExp ~ gdpPercap, data = df_corte)
##
## Residuals:
## Min 1Q Median 3Q Max
## -22.828 -6.316 1.922 6.898 13.128
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.957e+01 1.010e+00 58.95 <2e-16 ***
## gdpPercap 6.371e-04 5.827e-05 10.93 <2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 8.899 on 140 degrees of freedom
## Multiple R-squared: 0.4606, Adjusted R-squared: 0.4567
## F-statistic: 119.5 on 1 and 140 DF, p-value: < 2.2e-16
2.1.2 Linea
plot(df_corte$gdpPercap,df_corte$lifeExp)
abline(m_corte, col = "red")
10
80
70
df_corte$lifeExp
60
50
40
df_corte$gdpPercap
2.2.1 Modelo
Consumot = β0 + β1 P BIt
##
## Call:
## lm(formula = Consumo ~ PBI, data = df_series)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5380.3 -2155.3 330.8 1925.3 9203.9
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.684e+03 1.075e+03 -1.567 0.121
## PBI 6.505e-01 1.041e-02 62.468 <2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
11
## Residual standard error: 2947 on 90 degrees of freedom
## Multiple R-squared: 0.9775, Adjusted R-squared: 0.9772
## F-statistic: 3902 on 1 and 90 DF, p-value: < 2.2e-16
2.2.2 Linea
plot(df_series$PBI,df_series$Consumo)
abline(m_series, col = "red")
80000
df_series$Consumo
60000
40000
df_series$PBI
2.3.1 Modelo
##
## Call:
## lm(formula = lifeExp ~ gdpPercap, data = df_panel)
##
12
## Residuals:
## Min 1Q Median 3Q Max
## -82.754 -7.758 2.176 8.225 18.426
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.396e+01 3.150e-01 171.29 <2e-16 ***
## gdpPercap 7.649e-04 2.579e-05 29.66 <2e-16 ***
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 10.49 on 1702 degrees of freedom
## Multiple R-squared: 0.3407, Adjusted R-squared: 0.3403
## F-statistic: 879.6 on 1 and 1702 DF, p-value: < 2.2e-16
2.3.2 Linea
plot(df_panel$gdpPercap,df_panel$lifeExp)
abline(m_panel, col = "red")
80
70
df_panel$lifeExp
60
50
40
30
df_panel$gdpPercap
13
Sesion 2: Regresion lineal multiple
Sergio Diaz
2023-06-04
Regresion polinomial
En ocaciones la relacion entre una variable x e y no estan representados por una linea recta, es por ello que
podemos adaptar nuestro modelo incluyendo diversos grados de potencia de x.
Relaciones no lineales
df = read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSbq8l_iF6l6-GOPo_bjDtx10obLafWbvZ4RhV00u
plot(df$x,df$y)
14
12
df$y
10
8
6
4
5 10 15
df$x
1
En estos datos podemos ver como hay una evidente relacion entre las variables x e y, sin embargo si evaluamos
esto desde una perspectiva lineal encontraremos que no podra ser identificado por el coeficiente de correlacion
de pearson.
cor(df)
## x y
## x 1.00000000 0.07191547
## y 0.07191547 1.00000000
El resultado nos indica que hay una nula relacion entre ambas variables. Para mejorar esto vamos a darle a
la relacion de x e y el ser mas flexible por medio de sus potencias.
• Polinomio de grado 1:
yi = β 0 + β 1 xi
• Polinomio de grado 2:
yi = β0 + β1 xi + β2 x2i
• Polinomio de grado 3:
yi = β0 + β1 xi + β2 x2i + β3 x3i
• Polinomio de grado 4:
Actualmente solo existen en df dos columnas x e y. El siguien codigo crea nuevas columnas x_2, x_3 y x_4
como las verciones polinomiales de x.
Ahora nuestro data frame cuenta con nuevas columnas para ser empleadas en el modelo.
head(df)
2
## x y x_2 x_3 x_4 x_5 x_6
## 1 0.60 15.52 0.3600 0.216000 0.1296000 0.0777600 0.0466560
## 2 0.82 15.16 0.6724 0.551368 0.4521218 0.3707398 0.3040067
## 3 1.12 14.13 1.2544 1.404928 1.5735194 1.7623417 1.9738227
## 4 1.87 10.87 3.4969 6.539203 12.2283096 22.8669390 42.7611759
## 5 1.90 11.84 3.6100 6.859000 13.0321000 24.7609900 47.0458810
## 6 2.11 10.62 4.4521 9.393931 19.8211944 41.8227202 88.2459396
Los objetos pol1, pol2, pol3 y pol4 tienen informacion de los modelos estimados y podemos obtener
mucha informacion de ellos. Ahora extraeremos los valores ajustados de la recta. por medio del vector
fitted.values presente en estos modelos.
pol4$fitted.values
## 1 2 3 4 5 6 7 8
## 17.116614 15.631749 13.828994 10.330995 10.218324 9.483132 7.367465 7.281249
## 9 10 11 12 13 14 15 16
## 6.679821 6.468449 6.226064 6.194958 6.208712 6.312381 6.338508 6.689787
## 17 18 19 20 21 22 23 24
## 6.978384 7.173423 7.650578 7.799127 7.809075 8.619047 8.844917 8.972454
## 25 26 27 28 29 30 31 32
## 9.395788 9.606804 9.911891 10.081381 10.132175 10.352988 10.393876 10.402162
## 33 34 35 36 37 38 39 40
## 10.444605 10.423397 10.419203 10.276909 10.192949 10.169896 10.081261 9.944090
## 41 42 43 44 45
## 9.935574 9.929372 9.936867 9.942827 10.021776
Antes de graficar si queremos conocer los parametros del modelo solo debemos buscar en el objeto
coefficients.
pol4$coefficients
3
par(mfrow=c(1,2))
Grado 1 Grado 2
14
14
12
12
10
10
y
y
8
8
6
6
4
5 10 15 5 10 15
x x
par(mfrow=c(1,2))
4
Grado 3 Grado 4
14
14
12
12
10
10
y
y
8
8
6
6
4
5 10 15 4 5 10 15
x x
par(mfrow=c(1,2))
5
Grado 5 Grado 6
14
14
12
12
10
10
y
y
8
8
6
6
4
5 10 15 4 5 10 15
x x
R cuadrado
print(paste("Polinomio 1: Rcuadrado=",s_pol1$r.squared))
6
print(paste("Polinomio 2: Rcuadrado=",s_pol2$r.squared))
print(paste("Polinomio 3: Rcuadrado=",s_pol3$r.squared))
print(paste("Polinomio 4: Rcuadrado=",s_pol4$r.squared))
R cuadrado ajustado
Variables dummy
Otra manera de incluir una mas variables en un ecuacion que querramos ver en dos dimenciones es por
medio de variables dummy. La cual emplea variables categoricas para poder contribuir con brindarle mayor
informacion al modelo.
Caso de estudio
Una inmobiliaria acaba de finalizar la venta de un proyecto. Debido a las diversas promociones, campañas
y pagos anticipados de los clientes la venta de cada inmueble ha generado distintos ingresos por lo que se
requiere hacer un analisis que nos permita valorizar los atributos de los terrenos vendidos.
7
terrenos = read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQxw68TRzl9CD8xHb9T_EPC0rjCvT7cbBAO
head(terrenos)
## precio m2 tipo
## 1 40507 91.6 NORMAL
## 2 36811 92.9 CARRETERA
## 3 49010 93.0 PARQUE
## 4 50898 95.4 PARQUE
## 5 34838 87.6 CARRETERA
## 6 53411 95.9 PARQUE
Lo mas evidente en estos casos es observar la relacion entre el precio y el metro cuadrado.
plot(terrenos$m2,terrenos$precio)
50000
terrenos$precio
40000
30000
85 90 95 100 105
terrenos$m2
Efectos categoricos
La relacion es creciente sin embargo no parece haber un buen ajuste de los puntos. Continuamos analizando
los datos y observamos que cada lote es de un tipo distinto:
• Parque: Singnifica que el terreno esta frente a un parque por lo cual se pidio un precio mayor.
• Carretera: Esto singnifica que el lote esta cerca del ruido de una via principal por lo que al ser mas
dificil de vender perdio valor.
8
• Normal: Estos terrenos carecen de una ventaja o desventaja respecto de los otros grupos.
plot(terrenos$m2,terrenos$precio,col=factor(terrenos$tipo))
legend("topleft", legend = c("Parque", "Comun","Carretera"),
col=c("green", "red","black"),
lty = c("solid", "solid", "solid"))
Parque
Comun
Carretera
50000
terrenos$precio
40000
30000
85 90 95 100 105
terrenos$m2
Es evidente que el factor tipo influye en el precio del terreno vendido ya que los terrenos frente a parques
tienen una ventaja y los que estan cerca a la carretera una desventaja. Sin embargo el modelo de regresion
lineal simple se observa:
precioi = β0 + β1 m2i
Segun la grafica la pendiente beta parece ser la misma entre los grupos sin embargo es el intercepto el que
requiere una modificacion. Requeririamos lo siguiente:
precioi = β0 + β1 m2i
9
• Un modelo para los lotes frente a carreteras
Una posible salida seria estimar por separado las rectas de cada grupo, sin embargo correriamos el riesgo de
perjudicar la estimacion de β1 al reducir el tamaño de datos y realizar el proceso por separado.
Variable binaria
Para poder estimar los tres interceptos en un solo proceso de estimacion vamos a recurir ha representar la
columna tipo como 3 variables binarias, es decir que presenten valores de 0 y 1. De tal manera que se
creara una columna parque que tendra valor 1 tenga un parque en frente y 0 en caso contrario. El proceso
se repetira para las otras categorias y en estas nuevas columnas ninguna fila tendra mas de un 1 y tampoco
podra estar compuesta de puros 0.
La funcion ifelse() se emplea para evaluar un criterio logico y asignar un resultado especifico cuando
resulte ser verdadero o falso.
Habiamos indicado que requeriamos estimar βparque y βcarretera ya que para el grupo de lotes normales nos
servia β0 al no tener un atributo resaltante. Adicionalmente a esta condicion del caso de estudio resulta
inviable matematicamente incluir las tres variables binarias creadas reciente mente, es por ello que la variable
no incluida debe ser de preferencia un referente de las otras. El modelo final quedaria asi.
10
Grupo frente a un parque
De tal manera que cuando un terreno tenga un parque en frente βparque = 1 y βcarretera = 0, entonces:
De esta manera el nuevo intercepto para el grupo frente a un parque seria (β0 + βparque ) y βparque seria la
estimacion del valor adicional que gana un terreno al estar frente a un parque.
Grupo normal
En el caso de cuando un terreno tenga una carretera cerca βparque = 0 y βcarretera = 1, entonces:
De esta manera el nuevo intercepto para el grupo frente a un parque seria (β0 + βcarretera ) y βcarretera seria
la estimacion del valor adicional que gana un terreno al estar cerca de una carretera. Por la grafica observada
previamente podriamos intuir que este parametro es negativo.
Estimando el modelo
b1 <- m_terrenos$coefficients["m2"]
b0 <- m_terrenos$coefficients["(Intercept)"]
bparque <- m_terrenos$coefficients["parque"]
bcarretera <- m_terrenos$coefficients["carretera"]
Interpretando:
11
• βparque : El valor agregado por tener un parque al frente es 8240
• βcarretera : El valor perjuicio economico por el ruido de la carretera es 6007.
Visualizando modelo
plot(terrenos$m2,terrenos$precio,col=factor(terrenos$tipo))
abline(a= b0+bparque, b=b1, col="green")
abline(a= b0,b=b1, col="red")
abline(a= b0+bcarretera, b=b1, col="black")
legend("topleft", legend = c("Parque", "Comun","Carretera"),
col=c("green", "red","black"),
lty = c("solid", "solid", "solid"))
Parque
Comun
Carretera
50000
terrenos$precio
40000
30000
85 90 95 100 105
terrenos$m2
12
Sesion 2: Regresion lineal multiple II
Sergio Diaz
2023-06-04
Caso de estudio
Se busca medir el impacto del fertilizante en la produccion de papas, para ello se tomo registro de diversas
unidades agricolas y se registro la produccion de toneladas de papas por hectarea y la cantidad de fertilizante
empleada en dicha produccion medido en kilos por hectarea. Adicionalemente se registro el tipo de fertilizante
usado: tradicional, quimico y organico.
papas = read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQxw68TRzl9CD8xHb9T_EPC0rjCvT7cbBAOLev
head(papas)
Como podemos ver a medida que se incrementa el uso de fertilizante, se incrementa la produccion por
hectarea.
plot(papas$fertilizante,papas$produccion,
xlab = "Fertilizante (kg/ha)",
ylab = "Producción (th/ha)")
1
20
Producción (th/ha)
15
10
5
10 20 30 40
Fertilizante (kg/ha)
Se puede observar que a medida que se incrementa la cantidad de fertilizante la produccion se hace mas
variable. Tambien podemos intuir que provienen de un intercepto unico. Ahora visualicemos la nube de
puntos segun el tipo de fertilizante usado:
plot(papas$fertilizante,papas$produccion,col=factor(papas$tipo))
legend("topleft", legend = c("tradicional", "quimico","organico"),
col=c("green", "red","black"),
lty = c("solid", "solid", "solid"))
2
20
tradicional
quimico
organico
papas$produccion
15
10
5
10 20 30 40
papas$fertilizante
Es evidente que el factor tipo influye en la relacion entre x e y sin embargo en esta oportunidad se corrige
la pendiente, en nuestro modelo inicial tenemos:
produccioni = β0 + β1 f ertilizantei
produccioni = β0 + β1 f ertilizantei
3
βorganico > β1 > βtradicional
Una posible salida seria estimar por separado las rectas de cada grupo, sin embargo correriamos el riesgo de
perjudicar la estimacion de β0 al reducir el tamaño de datos y realizar el proceso por separado.
Variable interactuada
Para poder estimar las tres pendientes en un solo proceso de estimacion vamos a recurir ha representar la
columna tipo como 3 variables interactuadas, es decir que presenten valores de 0 y xi . De tal manera que
se creara una columna x_tradicional que tendra valor xi cuando el fertilizante usado sea tradicional y 0
en caso contrario. El proceso se repetira para las otras categorias y en estas nuevas columnas ninguna fila
tendra mas de un xi y tampoco podra estar compuesta de puros 0.
La funcion ifelse() se emplea para evaluar un criterio logico y asignar un resultado especifico cuando
resulte ser verdadero o falso.
Habiamos indicado que requeriamos estimar βorganico y βtradicional ya que para el grupo de fertilizante
quimico nos servia β1 al no tener un atributo resaltante. Adicionalmente a esta condicion del caso de estudio
resulta inviable matematicamente incluir las tres variables interactuadas creadas reciente mente, es por ello
que la variable no incluida debe ser de preferencia un referente de las otras. El modelo final quedaria asi.
De tal manera el fertilizante sea de tipo organico x_organico = f ertilizantei y x_tradicional = 0, entonces:
De esta manera la nueva pendiente para el grupo de fertilizante organico seria (βorganico + β1 ) y βorganico
seria la estimacion de la productividad adicional al emplear el fertilizante organico frente al quimico.
4
Grupo de fertilizante quimico
De esta manera que la pendiente para el grupo de fertilizante tradicional seria: (βtradicional +β1 ) y βtradicional
seria la estimacion de la produccion adicional que genera un fertilizante tradicional frente a un quimico. Por
la grafica observada previamente podriamos intuir que este parametro es negativo.
Estimando el modelo
Se estima el modelo:
b1 <- m_papas$coefficients["fertilizante"]
b0 <- m_papas$coefficients["(Intercept)"]
borganico <- m_papas$coefficients["x_organico"]
btradicional <- m_papas$coefficients["x_tradicional"]
Interpretando:
5
Ahora nuestra ecuacion resulta:
Visualizando modelo
plot(papas$fertilizante,papas$produccion,col=factor(papas$tipo))
abline(a= b0, b=b1 + borganico, col="black")
abline(a= b0,b=b1, col="red")
abline(a= b0, b=b1 + btradicional, col="green")
legend("topleft", legend = c("Organico", "Quimico","Tradicional"),
col=c("black", "red","green"),
lty = c("solid", "solid", "solid"))
20
Organico
Quimico
Tradicional
papas$produccion
15
10
5
10 20 30 40
papas$fertilizante
Transformaciones logaritmicas
Complementariamente a los polinomios hay otra familia de ecuaciones que presentan relaciones no lineales.
La mas empleada son los logaritmos. A continuacion desarrollamos un caso de modelo coob douglas.
6
Caso de estudio
Una constructura se encuentra desarrollando la construccion de una carretera y debido a problemas logisticos
y de planificacion ha contado con distinto numero de trabajadores y maquinaria para poder llevar a cabo
sus operaciones.
carreteras = read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQxw68TRzl9CD8xHb9T_EPC0rjCvT7cbB
head(carreteras)
## k l q
## 1 17 26 176
## 2 62 28 589
## 3 29 176 1322
## 4 201 115 3034
## 5 92 126 1459
## 6 46 131 243
plot(carreteras)
2000
k
1000
0
2500
l
1000
0
80000
q
40000
0
Por un lado podemos identificar valores atipicos y un comportamiento que no es lineal por lo que no seria
viable plantear la ecuacion:
7
qi = b0 + ki β2 + li β1
Matriz de correlacion
cor(carreteras)
## k l q
## k 1.000000000 0.004663293 0.5262688
## l 0.004663293 1.000000000 0.1571538
## q 0.526268845 0.157153847 1.0000000
la ultima linea nos indica que la variable que mas correlaciona con produccion es capital. Sin embargo aun
tenemos la alternativa que esto mejore repitiendo el mismo analisis con valores logaritmicos.
Transformacion logaritmica
Cuando un data frame esta conformado solo por variables numericas es factible usar de manera directa la
funcion log para cambiar los valores por logaritmos.
head(log(carreteras))
## k l q
## 1 2.833213 3.258097 5.170484
## 2 4.127134 3.332205 6.378426
## 3 3.367296 5.170484 7.186901
## 4 5.303305 4.744932 8.017637
## 5 4.521789 4.836282 7.285507
## 6 3.828641 4.875197 5.493061
Matriz de dispercion
plot(log(carreteras))
8
2 3 4 5 6 7 8
6
k
4
2
8
6
l
4
2
11
9
q
7
5
2 3 4 5 6 7 5 6 7 8 9 10 11
Matriz de dispercion
cor(log(carreteras))
## k l q
## k 1.00000000 0.06432006 0.6732867
## l 0.06432006 1.00000000 0.3197395
## q 0.67328673 0.31973946 1.0000000
Aunque ambas variables mejoran, es la correlacion con el trabajo la que presenta una mejoria singnificativa.
Implicancias en la ecuacion
Solamente cuando todas las variables sean transformadas a logaritmos aplica el siguiente desarrollo:
9
Pordriamos reemplazar β0 por log(A) siendo A = exp(β0 )
como ambos extremos tienen un logaritmo podemos anularlos con el antilogaritmo, resultando.
qi = A.kiβ1 .liβ2
La implicancia de esta forma ecuacion es que son los cambios relativos(%) en ki y li los que generan cambios
relativos(%) en q.
Para estimar el modelo no hay que generar campos nuevos, simplemente definimos estos valores en la funcion
que genera el modelo.
qi = (22.3).ki0.7 .li0.29
10
Sesion 2: Regresion lineal multiple II
Sergio Diaz
2023-06-04
Caso de estudio
Se busca medir el impacto del fertilizante en la produccion de papas, para ello se tomo registro de diversas
unidades agricolas y se registro la produccion de toneladas de papas por hectarea y la cantidad de fertilizante
empleada en dicha produccion medido en kilos por hectarea. Adicionalemente se registro el tipo de fertilizante
usado: tradicional, quimico y organico.
papas = read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQxw68TRzl9CD8xHb9T_EPC0rjCvT7cbBAOLev
head(papas)
Como podemos ver a medida que se incrementa el uso de fertilizante, se incrementa la produccion por
hectarea.
plot(papas$fertilizante,papas$produccion,
xlab = "Fertilizante (kg/ha)",
ylab = "Producción (th/ha)")
1
20
Producción (th/ha)
15
10
5
10 20 30 40
Fertilizante (kg/ha)
Se puede observar que a medida que se incrementa la cantidad de fertilizante la produccion se hace mas
variable. Tambien podemos intuir que provienen de un intercepto unico. Ahora visualicemos la nube de
puntos segun el tipo de fertilizante usado:
plot(papas$fertilizante,papas$produccion,col=factor(papas$tipo))
legend("topleft", legend = c("tradicional", "quimico","organico"),
col=c("green", "red","black"),
lty = c("solid", "solid", "solid"))
2
20
tradicional
quimico
organico
papas$produccion
15
10
5
10 20 30 40
papas$fertilizante
Es evidente que el factor tipo influye en la relacion entre x e y sin embargo en esta oportunidad se corrige
la pendiente, en nuestro modelo inicial tenemos:
produccioni = β0 + β1 f ertilizantei
produccioni = β0 + β1 f ertilizantei
3
βorganico > β1 > βtradicional
Una posible salida seria estimar por separado las rectas de cada grupo, sin embargo correriamos el riesgo de
perjudicar la estimacion de β0 al reducir el tamaño de datos y realizar el proceso por separado.
Variable interactuada
Para poder estimar las tres pendientes en un solo proceso de estimacion vamos a recurir ha representar la
columna tipo como 3 variables interactuadas, es decir que presenten valores de 0 y xi . De tal manera que
se creara una columna x_tradicional que tendra valor xi cuando el fertilizante usado sea tradicional y 0
en caso contrario. El proceso se repetira para las otras categorias y en estas nuevas columnas ninguna fila
tendra mas de un xi y tampoco podra estar compuesta de puros 0.
La funcion ifelse() se emplea para evaluar un criterio logico y asignar un resultado especifico cuando
resulte ser verdadero o falso.
Habiamos indicado que requeriamos estimar βorganico y βtradicional ya que para el grupo de fertilizante
quimico nos servia β1 al no tener un atributo resaltante. Adicionalmente a esta condicion del caso de estudio
resulta inviable matematicamente incluir las tres variables interactuadas creadas reciente mente, es por ello
que la variable no incluida debe ser de preferencia un referente de las otras. El modelo final quedaria asi.
De tal manera el fertilizante sea de tipo organico x_organico = f ertilizantei y x_tradicional = 0, entonces:
De esta manera la nueva pendiente para el grupo de fertilizante organico seria (βorganico + β1 ) y βorganico
seria la estimacion de la productividad adicional al emplear el fertilizante organico frente al quimico.
4
Grupo de fertilizante quimico
De esta manera que la pendiente para el grupo de fertilizante tradicional seria: (βtradicional +β1 ) y βtradicional
seria la estimacion de la produccion adicional que genera un fertilizante tradicional frente a un quimico. Por
la grafica observada previamente podriamos intuir que este parametro es negativo.
Estimando el modelo
Se estima el modelo:
b1 <- m_papas$coefficients["fertilizante"]
b0 <- m_papas$coefficients["(Intercept)"]
borganico <- m_papas$coefficients["x_organico"]
btradicional <- m_papas$coefficients["x_tradicional"]
Interpretando:
5
Ahora nuestra ecuacion resulta:
Visualizando modelo
plot(papas$fertilizante,papas$produccion,col=factor(papas$tipo))
abline(a= b0, b=b1 + borganico, col="black")
abline(a= b0,b=b1, col="red")
abline(a= b0, b=b1 + btradicional, col="green")
legend("topleft", legend = c("Organico", "Quimico","Tradicional"),
col=c("black", "red","green"),
lty = c("solid", "solid", "solid"))
20
Organico
Quimico
Tradicional
papas$produccion
15
10
5
10 20 30 40
papas$fertilizante
Transformaciones logaritmicas
Complementariamente a los polinomios hay otra familia de ecuaciones que presentan relaciones no lineales.
La mas empleada son los logaritmos. A continuacion desarrollamos un caso de modelo coob douglas.
6
Caso de estudio
Una constructura se encuentra desarrollando la construccion de una carretera y debido a problemas logisticos
y de planificacion ha contado con distinto numero de trabajadores y maquinaria para poder llevar a cabo
sus operaciones.
carreteras = read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQxw68TRzl9CD8xHb9T_EPC0rjCvT7cbB
head(carreteras)
## k l q
## 1 17 26 176
## 2 62 28 589
## 3 29 176 1322
## 4 201 115 3034
## 5 92 126 1459
## 6 46 131 243
plot(carreteras)
2000
k
1000
0
2500
l
1000
0
80000
q
40000
0
Por un lado podemos identificar valores atipicos y un comportamiento que no es lineal por lo que no seria
viable plantear la ecuacion:
7
qi = b0 + ki β2 + li β1
Matriz de correlacion
cor(carreteras)
## k l q
## k 1.000000000 0.004663293 0.5262688
## l 0.004663293 1.000000000 0.1571538
## q 0.526268845 0.157153847 1.0000000
la ultima linea nos indica que la variable que mas correlaciona con produccion es capital. Sin embargo aun
tenemos la alternativa que esto mejore repitiendo el mismo analisis con valores logaritmicos.
Transformacion logaritmica
Cuando un data frame esta conformado solo por variables numericas es factible usar de manera directa la
funcion log para cambiar los valores por logaritmos.
head(log(carreteras))
## k l q
## 1 2.833213 3.258097 5.170484
## 2 4.127134 3.332205 6.378426
## 3 3.367296 5.170484 7.186901
## 4 5.303305 4.744932 8.017637
## 5 4.521789 4.836282 7.285507
## 6 3.828641 4.875197 5.493061
Matriz de dispercion
plot(log(carreteras))
8
2 3 4 5 6 7 8
6
k
4
2
8
6
l
4
2
11
9
q
7
5
2 3 4 5 6 7 5 6 7 8 9 10 11
Matriz de correlacion
cor(log(carreteras))
## k l q
## k 1.00000000 0.06432006 0.6732867
## l 0.06432006 1.00000000 0.3197395
## q 0.67328673 0.31973946 1.0000000
Aunque ambas variables mejoran, es la correlacion con el trabajo la que presenta una mejoria singnificativa.
Implicancias en la ecuacion
Solamente cuando todas las variables sean transformadas a logaritmos aplica el siguiente desarrollo:
9
Pordriamos reemplazar β0 por log(A) siendo A = exp(β0 )
como ambos extremos tienen un logaritmo podemos anularlos con el antilogaritmo, resultando.
qi = A.kiβ1 .liβ2
La implicancia de esta forma ecuacion es que son los cambios relativos(%) en ki y li los que generan cambios
relativos(%) en q.
Para estimar el modelo no hay que generar campos nuevos, simplemente definimos estos valores en la funcion
que genera el modelo.
qi = (22.3).ki0.7 .li0.29
Interpretacion
10
Multicolinealidad
La multicolinealidad es una situación en la que existe una alta correlación o relación lineal entre las variables
predictoras en un modelo de regresión. Se presenta cuando dos o más variables independientes en el modelo
están fuertemente relacionadas entre sí, lo que dificulta distinguir el efecto individual de cada variable sobre
la variable de respuesta.
Cuando hay multicolinealidad, los coeficientes de regresión pueden volverse inestables y difíciles de interpre-
tar. Puede suceder que los coeficientes tengan signos opuestos a los esperados o que sean estadísticamente
no significativos, lo que puede llevar a conclusiones erróneas. Además, la multicolinealidad puede aumentar
la variabilidad de los coeficientes, lo que reduce la precisión y confianza de las estimaciones.
Matriz de correlacion
La presencia de multicolinealidad puede surgir debido a diversas razones, como la inclusión de variables
altamente correlacionadas, la sobre especificación del modelo o el uso de transformaciones lineales de las
variables. También puede ser resultado de la forma en que se recopilan los datos o de problemas inherentes
a la naturaleza de las variables.
## x1 x2 x3 x4
## x1 1.000000000 -0.008665736 0.01675143 0.01638841
## x2 -0.008665736 1.000000000 0.15011469 -0.04081026
## x3 0.016751426 0.150114688 1.00000000 -0.03349189
## x4 0.016388413 -0.040810262 -0.03349189 1.00000000
Para abordar la multicolinealidad, se pueden tomar varias medidas, como eliminar variables altamente
correlacionadas, combinar variables para crear nuevas variables independientes o recopilar datos adicionales.
También existen técnicas estadísticas más avanzadas, como la regresión ridge o la regresión de componentes
principales, que pueden ayudar a mitigar los efectos de la multicolinealidad.
## x1 x2 x3 x4
## x1 1.0000000 0.3972917 0.37145280 0.41128108
## x2 0.3972917 1.0000000 0.16113578 0.23803352
## x3 0.3714528 0.1611358 1.00000000 0.08398449
## x4 0.4112811 0.2380335 0.08398449 1.00000000
VIF
El VIF (Factor de Inflación de la Varianza, por sus siglas en inglés) es una medida utilizada para evaluar
la multicolinealidad en un modelo de regresión lineal. La multicolinealidad ocurre cuando existe una alta
correlación entre las variables predictoras en el modelo.
1
V IFi =
1 − Ri2
11
El VIF se calcula para cada variable en el modelo y proporciona una medida de cuánto se infla la varianza
del coeficiente de regresión de esa variable debido a la presencia de multicolinealidad con las demás variables
predictoras. En general, se considera que existe multicolinealidad significativa si el VIF es mayor que 5 o 10.
Caso de estudio
El data set auto tiene por objetivo la variable mpg, explica el rendimiento en millas por galon en base las
caracteristicas de los autos.
Se estima el modelo
##
## Call:
## lm(formula = mpg ~ disp + hp + drat + wt + qsec + carb, data = auto)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.5501 -1.6658 -0.4125 1.1273 5.4884
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.613010 11.575677 1.435 0.1636
## disp 0.008406 0.016458 0.511 0.6140
## hp -0.020247 0.020451 -0.990 0.3316
## drat 2.025858 1.388473 1.459 0.1570
## wt -4.351416 1.804705 -2.411 0.0236 *
## qsec 0.631754 0.565427 1.117 0.2745
## carb -0.019318 0.728589 -0.027 0.9791
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 2.609 on 25 degrees of freedom
## Multiple R-squared: 0.8489, Adjusted R-squared: 0.8127
## F-statistic: 23.41 on 6 and 25 DF, p-value: 3.981e-09
Revisamos el vif
12
library(car)
vif(modelo1)
##
## Call:
## lm(formula = mpg ~ disp + hp + drat + qsec + carb, data = auto)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.9747 -1.7805 -0.3483 1.2440 5.8604
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 25.529075 11.941471 2.138 0.0421 *
## disp -0.025463 0.009337 -2.727 0.0113 *
## hp -0.005127 0.021191 -0.242 0.8107
## drat 2.942687 1.453763 2.024 0.0533 .
## qsec -0.326363 0.437906 -0.745 0.4628
## carb -1.269334 0.557306 -2.278 0.0312 *
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 2.84 on 26 degrees of freedom
## Multiple R-squared: 0.8138, Adjusted R-squared: 0.778
## F-statistic: 22.72 on 5 and 26 DF, p-value: 9.85e-09
vif(modelo2)
Vemos que mas variables son singnificativas sin embargo aun hay presencia de multicolinealidad.
##
## Call:
## lm(formula = mpg ~ disp + drat + qsec + carb, data = auto)
13
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.0541 -1.8129 -0.4039 1.3503 5.7886
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 24.55521 11.04480 2.223 0.034761 *
## disp -0.02695 0.00689 -3.912 0.000559 ***
## drat 2.95544 1.42725 2.071 0.048070 *
## qsec -0.28359 0.39358 -0.721 0.477389
## carb -1.35588 0.41983 -3.230 0.003249 **
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## Residual standard error: 2.79 on 27 degrees of freedom
## Multiple R-squared: 0.8134, Adjusted R-squared: 0.7857
## F-statistic: 29.42 on 4 and 27 DF, p-value: 1.725e-09
vif(modelo3)
Package performance
library(performance)
p_modelo1 <- check_collinearity(modelo1)
p_modelo1
14
p_modelo2 <- check_collinearity(modelo2)
print(p_modelo2)
Package mctest
library(mctest)
omcdiag(mod=modelo1)
##
## Call:
## omcdiag(mod = modelo1)
##
##
## Overall Multicollinearity Diagnostics
##
## MC Results detection
## Determinant |X’X|: 0.0017 1
## Farrar Chi-Square: 179.8966 1
## Red Indicator: 0.5848 1
## Sum of Lambda Inverse: 55.5861 1
## Theil’s Method: 0.7488 1
## Condition Number: 84.4517 1
15
##
## 1 --> COLLINEARITY is detected by the test
## 0 --> COLLINEARITY is not detected by the test
omcdiag(mod=modelo2)
##
## Call:
## omcdiag(mod = modelo2)
##
##
## Overall Multicollinearity Diagnostics
##
## MC Results detection
## Determinant |X’X|: 0.0239 0
## Farrar Chi-Square: 106.3988 1
## Red Indicator: 0.5645 1
## Sum of Lambda Inverse: 21.0532 0
## Theil’s Method: 0.2509 0
## Condition Number: 66.7536 1
##
## 1 --> COLLINEARITY is detected by the test
## 0 --> COLLINEARITY is not detected by the test
omcdiag(mod=modelo3)
##
## Call:
## omcdiag(mod = modelo3)
##
##
## Overall Multicollinearity Diagnostics
##
## MC Results detection
## Determinant |X’X|: 0.1940 0
## Farrar Chi-Square: 47.2764 1
## Red Indicator: 0.4647 0
## Sum of Lambda Inverse: 9.0254 0
## Theil’s Method: -0.2692 0
## Condition Number: 57.1101 1
##
## 1 --> COLLINEARITY is detected by the test
## 0 --> COLLINEARITY is not detected by the test
16
Supuestos del MCO
Sergio Diaz
2023-06-21
hist(log(df$l))
1
Histogram of log(df$l)
150
Frequency
100
50
0
2 3 4 5 6 7 8
log(df$l)
muestra <- 70
n_muestra <- 50
cont <- c()
for(i in 1:muestra){
mean <- mean(sample(log(df$k),n_muestra))
cont <- c(cont,mean)
}
hist(cont)
2
Histogram of cont
20
15
Frequency
10
5
0
cont
hist(df$l)
3
Histogram of df$l
800
600
Frequency
400
200
0
df$l
muestra <- 70
n_muestra <- 50
cont <- c()
for(i in 1:muestra){
mean <- mean(sample(df$k,n_muestra))
cont <- c(cont,mean)
}
hist(cont)
4
Histogram of cont
15
Frequency
10
5
0
cont
Supuestos de GaussMarko
Linealidad
Modelo no lineal
plot(df$k,modelo1$residuals)
5
60000
modelo1$residuals
20000
−20000
df$k
plot(df$l,modelo1$residuals)
6
60000
modelo1$residuals
20000
−20000
df$l
Modelo lineal
plot(log(df$l),modelo2$residuals)
7
2
modelo2$residuals
1
0
−1
−2
2 3 4 5 6 7 8
log(df$l)
plot(log(df$k),modelo2$residuals)
8
2
modelo2$residuals
1
0
−1
−2
2 3 4 5 6 7
log(df$k)
Homocedasticidad
Breusch-Pagan
# Cargar librerías
library(lmtest)
##
## Attaching package: ’zoo’
9
##
## studentized Breusch-Pagan test
##
## data: modelo1
## BP = 53.778, df = 2, p-value = 2.101e-12
Caso no heterocedastico
##
## studentized Breusch-Pagan test
##
## data: modelo2
## BP = 1.572, df = 2, p-value = 0.4557
Independencia
## l k r1
## l 1.000000e+00 4.663293e-03 1.332444e-17
## k 4.663293e-03 1.000000e+00 -6.958644e-17
## r1 1.332444e-17 -6.958644e-17 1.000000e+00
Normalidad
Caso no normal
hist(df$r1)
10
Histogram of df$r1
500
Frequency
300
100
0
df$r1
Caso normal
hist(df$r2)
11
Histogram of df$r2
250
200
Frequency
150
100
50
0
−2 −1 0 1 2 3
df$r2
Test de Shapiro-Wilk
shapiro.test(modelo1$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo1$residuals
## W = 0.62605, p-value < 2.2e-16
shapiro.test(modelo2$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo2$residuals
## W = 0.99791, p-value = 0.2473
12
Test de Anderson-Darling
library(nortest)
ad.test(modelo1$residuals)
##
## Anderson-Darling normality test
##
## data: modelo1$residuals
## A = 90.606, p-value < 2.2e-16
ad.test(modelo2$residuals)
##
## Anderson-Darling normality test
##
## data: modelo2$residuals
## A = 0.45538, p-value = 0.2674
13
Unidad I: Modelos de clasificacion
Sergio Diaz
2023-06-24
Antecedentes
Variable binaria
Una variable binaria es un tipo de variable que solo puede tomar dos posibles valores o categorías distintas.
Estos valores suelen representarse como 1 y 0, donde 1 indica la presencia o éxito de un evento o condición,
y 0 indica la ausencia o fracaso del mismo.
Las variables binarias también se conocen como variables dicotómicas o variables dummy, y son ampliamente
utilizadas en diversos campos de la ciencia de datos, incluyendo la epidemiología, la investigación de mercado,
la clasificación de datos y el aprendizaje automático.
Algunos ejemplos a considerar son:
1. En términos de análisis estadístico, las variables binarias se pueden utilizar en modelos de regresión
logística para predecir la probabilidad de ocurrencia de un evento o para determinar la influencia de
otras variables en la probabilidad de que ocurra dicho evento.
2. Variable binaria de género: Se utiliza para representar la diferencia de género en una muestra. Por
ejemplo, se puede crear una variable binaria con el valor 1 para mujeres y 0 para hombres.
3. Variable binaria de región geográfica: Para analizar el impacto de la ubicación geográfica en un modelo,
se pueden crear variables binarias para diferentes regiones o áreas geográficas. Cada región tendría
una variable binaria asociada que toma el valor 1 si la observación pertenece a esa región y 0 en caso
contrario.
4. Variable binaria de educación: Para capturar diferentes niveles educativos, se pueden crear variables bi-
narias para categorías como “educación primaria”, “educación secundaria” y “educación universitaria”.
Cada categoría tendría una variable binaria correspondiente, tomando el valor 1 si la observación
pertenece a esa categoría y 0 en caso contrario.
5. Variable binaria de condición laboral: Para analizar el efecto de diferentes condiciones laborales en
un modelo, se pueden crear variables binarias para categorías como “trabajador a tiempo completo”,
“trabajador a tiempo parcial” o “desempleado”. Cada categoría tendría una variable binaria asociada
que toma el valor 1 si la observación pertenece a esa categoría y 0 en caso contrario.
yi = β0 + β1 X1 + β2 X2
1
Modelos de clasificacion
Los modelos de clasificación son una técnica fundamental en el campo del aprendizaje automático y la ciencia
de datos. Estos modelos se utilizan para asignar observaciones o instancias a diferentes categorías o clases,
en función de un conjunto de variables predictoras o características.
Modelo logit
El modelo logit es una técnica utilizada en estadística y aprendizaje automático para realizar análisis de
regresión logística. Es una extensión del modelo de regresión lineal, pero se aplica específicamente a prob-
lemas en los que la variable dependiente es binaria (solo puede tomar dos valores posibles, como “éxito” o
“fracaso”, “si” o “no”, etc.).
El modelo logit utiliza la función logística, también conocida como función sigmoide, para transformar una
combinación lineal de variables predictoras en una probabilidad. La función sigmoide toma valores en el
rango de 0 a 1, lo que permite interpretar el resultado como la probabilidad de que ocurra un evento.
En términos matemáticos, el modelo logit se representa mediante la ecuación:
1
yi =
1 + e−(β0 +β1 X1i +β2 X2i )
donde:
Modelo Probit
El modelo probit es una técnica utilizada en estadística y econometría para realizar análisis de regresión
cuando la variable dependiente es binaria. Al igual que el modelo logit, el modelo probit se utiliza para
modelar y predecir la probabilidad de ocurrencia de un evento.
En el modelo probit, la relación entre las variables predictoras y la probabilidad de éxito se establece a través
de la función de distribución acumulativa de una distribución normal estándar, conocida como la función
probit. La función probit transforma una combinación lineal de las variables predictoras en una probabilidad,
y su inversa se utiliza para estimar los coeficientes del modelo.
En términos matemáticos, el modelo probit se representa mediante la ecuación:
Donde P (yi = 1) es la probabilidad de éxito, Φ representa la función probit y (β0 , β1 , β2 ) son los coeficientes
del modelo asociados con las variables predictoras (X1i , X2i ).
Caso de estudio
Se probaron distintos modelos de telefonos para estudiar las preferencias del consumidor, el siguiente dataset
tiene datos de la bateria(mha), pantalla(pulgadas) y si finalmente fue comprado o no.
2
telefonos <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vR9GuZtAgItzWEjbPUAITgIjSSr7u4TmK
head(telefonos,5)
Como vemos en este caso son dos variables numericas la que explica una variable cualitativa.
summary(telefonos)
En un primera revicion podemos identificar los rangos y los valores promedios de la bateria y la pantalla.
Para la variable compra el promedio tambien representa la proporcion de modelos vendidos.
Aunque el modelo logit aceptaria datos numericos de 0 y 1, lo mas recomendable para el analisis exploratorio
y desarrollo de modelos es transformar este dato numerico en un factor, de esta manera R entendera que se
trata de una variable cualitativa.
Ahora R considero que compra al ser una variable cualitativa debe ser analisada por medio de sus frecuencias.
ggplot2 es un paquete de visualización de datos altamente utilizado en R. Fue desarrollado por Hadley
Wickham y está basado en la gramática de gráficos, lo que permite crear visualizaciones de datos de forma
concisa y flexible.
3
La principal filosofía detrás de ggplot2 es que los gráficos se construyen agregando capas (layers) a un lienzo
en blanco. Cada capa representa una parte de la visualización, como puntos, líneas, barras o etiquetas. Esto
permite crear gráficos complejos combinando diferentes capas para mostrar múltiples variables o patrones
en los datos.
Para inicial el analisis revisamos la relacion entre la compra y cada una de las variables exogenas.
library(ggplot2)
ggplot(telefonos,aes(x=compra,y=bateria)) + geom_boxplot()
5000
4000
bateria
3000
2000
0 1
compra
La caga de los datos donde se realiza la compra del telefono estan por encima de los que no compraron, se
puede intuir que la bateria es variable importante para la compra.
library(ggplot2)
ggplot(telefonos,aes(x=compra,y=pantalla)) + geom_boxplot()
4
7
pantalla
0 1
compra
El grafico indica que no hay diferencia relevante en el tamaño de pantalla para la decision de compra.
Modelo logit
##
## Call:
## glm(formula = compra ~ pantalla + bateria, family = binomial,
## data = telefonos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -739.4153 357.7691 -2.067 0.0388 *
## pantalla 0.3735 1.1776 0.317 0.7511
## bateria 0.2447 0.1188 2.060 0.0394 *
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
5
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1297.3519 on 999 degrees of freedom
## Residual deviance: 9.6707 on 997 degrees of freedom
## AIC: 15.671
##
## Number of Fisher Scoring iterations: 17
Interpretacion
coef(modelo_logit)
Esto no resulta muy practico al tratarce de logaritmos, sin embargo podemos retirar este efecto emplando
el exponencial
exp(coef(modelo_logit))
• Exponencial del intercepto: El valor extremadamente pequeño (7.509798e-322) indica que la proba-
bilidad de éxito de venta cuando todas las variables predictoras son cero es prácticamente cero. Es
importante tener en cuenta que este valor puede estar relacionado con la escala de las variables o
posibles problemas de ajuste del modelo.
• Exponencial de la variable “pantalla”: Un incremento de una unidad en el tamaño de pantalla se asocia
con un aumento de aproximadamente 1.45 veces en la razón de odds de éxito de venta. Esto sugiere
que un mayor tamaño de pantalla tiende a aumentar la probabilidad de éxito de venta.
6
• Exponencial de la variable “bateria”: Un incremento de una unidad en la duración de la batería se
asocia con un aumento de aproximadamente 1.28 veces en la razón de odds de éxito de venta. Esto
indica que una mayor duración de la batería tiene un impacto positivo en la probabilidad de éxito de
venta.
Recuerda que el exponencial de los coeficientes en un modelo logit nos proporciona la razón de odds, que es
una medida de la relación entre la probabilidad de éxito y la probabilidad de fracaso.
Modelo Probit
modelo_probit <- glm(compra ~ pantalla + bateria, data = telefonos, family = binomial(link = "probit"))
##
## Call:
## glm(formula = compra ~ pantalla + bateria, family = binomial(link = "probit"),
## data = telefonos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -421.69184 187.28622 -2.252 0.0243 *
## pantalla 0.25011 0.66680 0.375 0.7076
## bateria 0.13944 0.06222 2.241 0.0250 *
## ---
## Signif. codes: 0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1297.3519 on 999 degrees of freedom
## Residual deviance: 9.5602 on 997 degrees of freedom
## AIC: 15.56
##
## Number of Fisher Scoring iterations: 19
Interpretacion
coef(modelo_probit)
• Intercepto: El intercepto (-421.6918358) indica el valor de la función probit cuando todas las variables
predictoras son cero. Sin embargo, la interpretación directa del intercepto puede ser difícil en el
contexto del modelo probit.
7
• Variable “pantalla”: Cada incremento de una unidad en el tamaño de pantalla se asocia con un aumento
de 0.2501098 en la probabilidad de éxito de venta, considerando las demás variables constantes. Esto
sugiere que un mayor tamaño de pantalla está relacionado positivamente con la probabilidad de éxito
de venta.
• Variable “bateria”: Cada incremento de una unidad en la duración de la batería se asocia con un
aumento de 0.1394427 en la probabilidad de éxito de venta, manteniendo las demás variables constantes.
Esto implica que una mayor duración de la batería está positivamente relacionada con la probabilidad
de éxito de venta.
Es importante tener en cuenta que en un modelo probit, los coeficientes estimados no tienen una inter-
pretación directa en términos de razón de odds como en el modelo logit. En cambio, se interpretan como
los cambios marginales en la probabilidad de éxito de venta asociados con cada variable, manteniendo las
demás constantes.
Comparacion de modelo
Empleamos la funcion predict.glm() para obtener los valores estimados de cada modelo. La opcion
type="response" es para que los valores se exprecen en probabilidad.
plot(predict.glm(modelo_logit,type="response"),predict.glm(modelo_probit,type="response"))
abline(0,1)
predict.glm(modelo_probit, type = "response")
1.0
0.8
0.6
0.4
0.2
0.0
8
Precision del modelo
Modelo Logit
El paquete caret (Classification And REgression Training) es una herramienta muy útil en R para el en-
trenamiento y evaluación de modelos de clasificación y regresión. Proporciona una interfaz unificada y
fácil de usar para ajustar modelos de machine learning con múltiples algoritmos y facilita tareas comunes,
como la selección de características, preprocesamiento de datos, ajuste de hiperparámetros y evaluación del
rendimiento del modelo.
library(caret)
Una matriz de confusión obtenida utilizando el paquete caret en R es una tabla que muestra el rendimiento
de un modelo de clasificación al comparar las etiquetas verdaderas y las etiquetas predichas para un conjunto
de datos.
La matriz de confusión generada por caret tiene una estructura de 2x2 (para problemas de clasificación
binaria) y consta de cuatro celdas:
9
Verdaderos positivos (TP): Representa el número de casos correctamente clasificados como positivos por
el modelo. Verdaderos negativos (TN): Representa el número de casos correctamente clasificados como
negativos por el modelo. Falsos positivos (FP): Representa el número de casos incorrectamente clasificados
como positivos por el modelo (clasificados como positivos pero que en realidad son negativos). Falsos
negativos (FN): Representa el número de casos incorrectamente clasificados como negativos por el modelo
(clasificados como negativos pero que en realidad son positivos). La interpretación de la matriz de confusión
obtenida con caret permite evaluar el rendimiento general del modelo y calcular métricas de evaluación,
como la precisión, la sensibilidad, la especificidad y el valor predictivo positivo.
Modelo Probit
10