Se utilizara el dataset Advertising
data <- read.csv('Advertising.csv')
data <- data[,-1]
attach(data)
names(data)
[1] "TV" "radio" "newspaper" "sales"
summary(data)
TV radio newspaper sales
Min. : 0.70 Min. : 0.000 Min. : 0.30 Min. : 1.60
1st Qu.: 74.38 1st Qu.: 9.975 1st Qu.: 12.75 1st Qu.:10.38
Median :149.75 Median :22.900 Median : 25.75 Median :12.90
Mean :147.04 Mean :23.264 Mean : 30.55 Mean :14.02
3rd Qu.:218.82 3rd Qu.:36.525 3rd Qu.: 45.10 3rd Qu.:17.40
Max. :296.40 Max. :49.600 Max. :114.00 Max. :27.00
Es de la forma \[Y \approx \beta_0 + \beta_1X + \epsilon_i\]
\(Y\) es la respuesta, o variable dependiente, y \(X\) es el predictor. En el caso puntual de la base de publicidad sobre la que estamos trabajando el modelo de regresion sería de la forma \[ sales \approx \beta_0 + \beta_1TV \] Donde \(\beta_0\) (ordenada al origen) y \(\beta_1\) (pendiente) son los coeficientes de regresión.
A continuación, generamos un diagrama de dispersión con los datos de Sales e inversión en publicidad por TV.
data %>% select(sales, TV) %>%
ggplot(aes(x=TV, y=sales)) +
geom_point()
data %>% select(sales, TV) %>%
ggplot(aes(x=TV, y=sales)) +
geom_point() +
stat_quantile(quantiles = seq(0.05, 0.95, by=0.05))
A priori, podemos obervar que existen infinitas rectas, o modelos, que pueden representar la información de nuestro dataset. Con MCO (minimos cuadrados ordinarios) minimizamos el error cuadrático entre nuestra aproximación \(\hat{Y}\) y los datos de la muestra \(\hat{Y}\). De esta manera, se encuentra la recta con coeficientes \(\hat{\beta_0}\) y \(\hat{\beta_1}\) que minimizan el error.
\[ min{RSS} = \sum{e_i^2} = \sum{(Y_i - \hat{Y_i})^2} = \sum{(Y_i - \hat{\beta_0} - \hat{\beta_1}X_i)^2}\]
rss <- lm(sales~TV, data=data)
summary(rss)
Call:
lm(formula = sales ~ TV, data = data)
Residuals:
Min 1Q Median 3Q Max
-8.3860 -1.9545 -0.1913 2.0671 7.2124
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.032594 0.457843 15.36 <0.0000000000000002 ***
TV 0.047537 0.002691 17.67 <0.0000000000000002 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.259 on 198 degrees of freedom
Multiple R-squared: 0.6119, Adjusted R-squared: 0.6099
F-statistic: 312.1 on 1 and 198 DF, p-value: < 0.00000000000000022
En \(R\), utilizamos la funcion \(lm()\) para hallar los coeficientes de la recta de regresión.
fit <- lm(sales~TV, data=data)
summary(fit)
Call:
lm(formula = sales ~ TV, data = data)
Residuals:
Min 1Q Median 3Q Max
-8.3860 -1.9545 -0.1913 2.0671 7.2124
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.032594 0.457843 15.36 <0.0000000000000002 ***
TV 0.047537 0.002691 17.67 <0.0000000000000002 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.259 on 198 degrees of freedom
Multiple R-squared: 0.6119, Adjusted R-squared: 0.6099
F-statistic: 312.1 on 1 and 198 DF, p-value: < 0.00000000000000022
En \(fit\$residuals\) encontramos los residuos de cada observación \(e_i = Y_i-\hat{Y_i}\)
fit$residuals[1:10]
1 2 3 4 5 6 7
4.1292255 1.2520260 1.4497762 4.2656054 -2.7272181 -0.2461623 2.0340496
8 9 10
0.4535023 -2.6414087 -5.9304143
En este caso, podemos partir de un modelo establecido y, generando valores aleatorios con una determinada distribución de probabilida, sumar las variaciones al modelo para tener una diagrama de disperción y poder hacer el ejercicio inverso.
sim_data <- function(){
x <- runif(30, min=-3, max=3)
epsilon <- rnorm(n=length(x),m=0,sd=1)
y <- -2+3*x+epsilon
return(data.frame(x,y))
}
dataset1 <- sim_data()
dataset2 <- sim_data()
dataset3 <- sim_data()
dataset4 <- sim_data()
par(mfrow=c(2,2))
plot(dataset1$x, dataset1$y, main="dataset 1")
abline(lm(dataset1$y~dataset1$x, data=data), col="red")
plot(dataset1$x, dataset1$y, main="dataset 2")
abline(lm(dataset2$y~dataset2$x, data=data), col="red")
plot(dataset1$x, dataset1$y, main="dataset 3")
abline(lm(dataset3$y~dataset3$x, data=data), col="red")
plot(dataset1$x, dataset1$y, main="dataset 4")
abline(lm(dataset4$y~dataset4$x, data=data), col="red")
Calculamos coeficientes de regresión. Del modelo planteado, sabemos que deberian ser \(\beta_0 = -2\) y \(\beta_1 = 3\)
sim_regr_1 <- lm(dataset1$y~dataset1$x, data=data)
sim_regr_2 <- lm(dataset2$y~dataset2$x, data=data)
sim_regr_3 <- lm(dataset3$y~dataset3$x, data=data)
sim_regr_4 <- lm(dataset4$y~dataset4$x, data=data)
| Dataset | \(\beta_0\) | \(\beta_1\) |
|---|---|---|
| Dataset1 | -1.782959 | 2.951345 |
| Dataset2 | -1.9549081 | 2.7171619 |
| Dataset3 | -2.087374 | 2.9309085 |
| Dataset4 | -2.0500293 | 3.1399282 |
Vemos que, en todos los casos, tenemos un error asociado para los caluclos de los coeficientes de regresión.
Analizamos los errores estándar \(SE\) para el primer modelo.
Podemos establecer intervalos de congianza al \(95\%\) y \(99\%\) respectivamente para los coeficientes de regresión
\[ IC_{95\%} = [ \hat{\beta_i} - 2SE(\hat{\beta_i}), \hat{\beta_i} + 2SE(\hat{\beta_i}) ] \] \[ IC_{99\%} = [ \hat{\beta_i} - 3SE(\hat{\beta_i}), \hat{\beta_i} + 3SE(\hat{\beta_i}) ] \]
| Parametro | Intervalo |
|---|---|
| \(\beta_0\) | [-2.2503992,-1.3155189] |
| \(\beta_1\) | [2.6957479,3.206942] |
Se realiza un test de hipótesis nula para el coeficiente de regresión \(\beta_1\) que relaciona los dos parámetros del modelo. En este caso puntual serían \(sales\) y \(TV\). \(H_0\) es la hipótesis nula y \(H_a\) es la hipótesis alternativa.
Si \(\beta_1 = 0\) entonces no existe relacion entre ambos parámetros.
Si \(\beta_1\) es estadísticamente significativo entonces decimos que explica a la varianza de la viarable dependiente \(sales\).
| Parametro | P-valor |
|---|---|
| \(\beta_0\) | 0 |
| \(\beta_1\) | 0 |
Podemos analizar gráficamente la relación entre las distintas variables de la base.
plot(data)
rlm <- lm(sales ~ radio + TV + newspaper, data=data)
summary(rlm)
Call:
lm(formula = sales ~ radio + TV + newspaper, data = data)
Residuals:
Min 1Q Median 3Q Max
-8.8277 -0.8908 0.2418 1.1893 2.8292
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.938889 0.311908 9.422 <0.0000000000000002 ***
radio 0.188530 0.008611 21.893 <0.0000000000000002 ***
TV 0.045765 0.001395 32.809 <0.0000000000000002 ***
newspaper -0.001037 0.005871 -0.177 0.86
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.686 on 196 degrees of freedom
Multiple R-squared: 0.8972, Adjusted R-squared: 0.8956
F-statistic: 570.3 on 3 and 196 DF, p-value: < 0.00000000000000022
\(\textbf{Conclusiones}\): Los coeficientes tienen la misma unidad que la variable independiente, ya sea esta \(\%\), \(\$\), u otra. Segun la regresión realizada, una inversión de 1 unidad en radio, es lo que generará más aumento en \(sales\). Tambien podemos que \(newspaper\) no es significativo estadísticamente en términos de la variación de \(sales\).
Realizamos la regresion lineal quitando a la variable \(newspaper\) por ser estadísticamente poco significativa. Se observa que los coeficientes no sufren variaciones importantes.
rlm2 <- lm(sales ~ radio + TV , data=data)
summary(rlm2)
Call:
lm(formula = sales ~ radio + TV, data = data)
Residuals:
Min 1Q Median 3Q Max
-8.7977 -0.8752 0.2422 1.1708 2.8328
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.92110 0.29449 9.919 <0.0000000000000002 ***
radio 0.18799 0.00804 23.382 <0.0000000000000002 ***
TV 0.04575 0.00139 32.909 <0.0000000000000002 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.681 on 197 degrees of freedom
Multiple R-squared: 0.8972, Adjusted R-squared: 0.8962
F-statistic: 859.6 on 2 and 197 DF, p-value: < 0.00000000000000022
credit <- read.csv('Credit.csv')
names(credit) <- tolower(names(credit))
credit <- credit[,-1]
head(credit)
Se modela el balance respecto de la variable dicotomica \(\textbf{gender}\). La categoría base será \(\textbf{female}\).
fit4 <- lm(balance ~ gender, data=credit)
summary(fit4)$coefficients
Estimate Std. Error t value
(Intercept) 529.53623 31.98819 16.5541153
genderMale -19.73312 46.05121 -0.4285039
Pr(>|t|)
(Intercept) 0.00000000000000000000000000000000000000000000003312981
genderMale 0.66851610550271733934835083346115425229072570800781250
Podemos interpretar a \(\beta_0\) como el balance del submodelo que representa a las mujeres, y \(\beta_1\) como la varianza que tiene el balance de una persona por ser hombre.
\[ gender_i = \left\{\begin{matrix} 0 & Female\\ 1 & Male \end{matrix}\right.\] \[ balance = \beta_0 + \beta_1 \cdot gender = \left\{\begin{matrix} \beta_0 + \beta_1 & male\\ \beta_1 & female \end{matrix}\right. \]
Y si queremos cambiar la categoría base o los valores de las variables dicotómicas?
\[ gender_i = \left\{\begin{matrix} -1 & female\\ 1 & male \end{matrix}\right. \]
Esto deja una nueva expresión del modelo: \[ balance = \beta_0 + \beta_1 \cdot gender = \left\{\begin{matrix} \beta_0 + \beta_1 & male\\ \beta_0 - \beta_1 & female \end{matrix}\right. \]
credit$coded_gender <- ifelse(credit$gender == "Female",-1,1)
fit5 <- lm(balance~coded_gender, data=credit)
summary(fit5)$coefficients
Estimate Std. Error t value
(Intercept) 519.669670 23.02561 22.5692080
coded_gender -9.866562 23.02561 -0.4285039
Pr(>|t|)
(Intercept) 0.0000000000000000000000000000000000000000000000000000000000000000000000003191322
coded_gender 0.6685161055027173393483508334611542522907257080078125000000000000000000000000000
En este caso, los valores de los coeficientes no cambian, solo su interpretación. Ya que \(\beta_1\) en este caso será varianza positica para género mujer y varianza negativa para género hombre.
Este tipo de variables discretas, que pueden tomar finitos valores, se dicotomizan.
Ejemplo: Tenemos una variable llamada \(\textit{ethniticy}\) con 3 categorías.
#Obtenemos valores que puede tomar la variable
unique(credit$ethnicity)
[1] Caucasian Asian African American
Levels: African American Asian Caucasian
\[ \beta_1 = asian_i = \left\{\begin{matrix} 0 & no\\ 1 & yes \end{matrix}\right.\]
\[ \beta_2 = Caucasian_i = \left\{\begin{matrix} 0 & no\\ 1 & yes \end{matrix}\right. \]
credit$caucasian <- ifelse(credit$ethnicity == "Caucasian",1,0)
credit$asian <- ifelse(credit$ethnicity == "Asian",1,0)
\[ balance = \beta_0 + \beta_1 \cdot asian + \beta_2 \cdot caucasian = \left\{\begin{matrix} \beta_0 + \beta_1 & asian\\ \beta_0 + \beta_2 & caucasian\\ \beta_0 & african\_american \end{matrix}\right. \]
fit6 <- lm(balance ~ asian + caucasian, data=credit)
summary(fit6)
Call:
lm(formula = balance ~ asian + caucasian, data = credit)
Residuals:
Min 1Q Median 3Q Max
-531.00 -457.08 -63.25 339.25 1480.50
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 531.00 46.32 11.464 <0.0000000000000002 ***
asian -18.69 65.02 -0.287 0.774
caucasian -12.50 56.68 -0.221 0.826
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 460.9 on 397 degrees of freedom
Multiple R-squared: 0.0002188, Adjusted R-squared: -0.004818
F-statistic: 0.04344 on 2 and 397 DF, p-value: 0.9575