El intervalo de predicción para \(\sum_{j=1}^{m}a_{j}y_{hj}\) es
\[ \left[ \hat{\beta_{0}}\sum_{j=1}^{n}a_{j}+\hat{\beta_{1}}\sum_{j=1}^{n}a_{j}x_{hj}\pm t_{n-2,1-\alpha/2 }\sqrt{\hat{\sigma}^{2}\left[\sum_{j=1}^{m}a_{j}^{2}+\frac{\left(\sum_{j=1}^{m} a_{j}\right)^{2}}{n} +\frac{\left(\sum_{j=1}^{m}a_{j}x_{hj}-\bar{X}\sum_{j=1}^{m}a_{j}\right)}{Ssx}\right]} \right] \]
Continuaremos con los datos de la compañía Toluca. Además, calcularemos algunas estadísticas para el intervalo de predicción, donde recordemos que no está automatizado en R
para el caso de las combinaciones lineales de los \(y_{h_{j}}\)
library(ALSM)
library(latex2exp)
Datos=TolucaCompany
# Cálculos:
xbar=mean(Datos$x)
SSx=sum((Datos$x-xbar)^2)
ybar=mean(Datos$y)
SSy=sum((Datos$y-ybar)^2)
SSxy=sum((Datos$y-ybar)*(Datos$x-xbar))
beta1=SSxy/SSx
beta0=ybar-beta1*xbar
n=length(Datos$x)
Datos$yhat=beta0+beta1*Datos$x
Datos$error=Datos$y-Datos$yhat
MSE=sum((Datos$error)^2)/(n-2)
y ajustamos el modelo, el cual ya sabemos que todos los supuestos se cumplen
fit=lm(y~x, data=Datos)
Ahora bien:
Solución: Cuando sólo se realiza la predicción de una sóla observación se puede usar directamente la función predict
en R
con interval = "prediction"
. Para ello
# La observación a predecir la guardamos en un dataframe, donde x corresponde al nombre de la
# columna de las observaciones
newdata <- data.frame(x = c(100))
# Realizamos la predicción al 90% de predicción
Predx100 <- predict(fit, newdata, interval = "prediction", level = 0.90)
head(Predx100)
## fit lwr upr
## 1 419.3861 332.2072 506.5649
siendo fit
la estimación puntual de la predicción y lwr
y upr
los límites inferior y superior, respectivamente, del intervalo de predicción. De tal manera podemos responder a la pregunta diciendo que que las horas que se requieren para trabajar en este nuevo lote están entre las 332.2 y 506.56 horas con una confianza del 90%.
Podemos realizar los “cálculos a mano” siguiendo las fórmula de las notas
var.PredYh_x100=MSE*(1+1/n+(100-xbar)^2/SSx)
alpha=.1
tcuantil=qt(1-alpha/2, n-2,lower.tail = TRUE)
print(c(beta0+beta1*100-tcuantil*sqrt(var.PredYh_x100),
beta0+beta1*100+tcuantil*sqrt(var.PredYh_x100)))
## [1] 332.2072 506.5649
que nos arroja el mismo intervalo de predicción.
Observación: Notar que los intervalos de predicción son en general más amplios que los asociados a la \(\mathbb{E}[y|x]\):
predict(fit, newdata, interval = "confidence", level = 0.90)
## fit lwr upr
## 1 419.3861 394.9251 443.847
Solución: En este caso sólo se puede a mano, buscamos la estimación de \(\sum_{j=1}^3 \frac{y_{hj}}{3}\), con \(x_{h1}= x_{h2}=x_{h3}=100\). De donde \(a_j=1/3\) para \(j=1,2,3\). Realizamos a “mano” los cálculos
sumA_j=(1/3+1/3+1/3)
sumA_j_2=(1/3^2+1/3^2+1/3^2)
SumA_jXhj=((1/3)*100+(1/3)*100+(1/3)*100)
var.PredMeanYh_x100=MSE*(sumA_j_2+sumA_j^2/n+(SumA_jXhj-sumA_j*xbar)^2/SSx)
alpha=.1
tcuantil=qt(1-alpha/2, n-2,lower.tail = TRUE)
print(c(sumA_j*beta0+beta1*SumA_jXhj-tcuantil*sqrt(var.PredMeanYh_x100),
sumA_j*beta0+beta1*SumA_jXhj+tcuantil*sqrt(var.PredMeanYh_x100)))
## [1] 365.2356 473.5366
En promedio se van a requerir para estos tres lotes, por cada uno, entre 365.2 y 473.5 horas Notar que cuando se habla de predecir un promedio de \(m\) observaciones asociadas a un valor fijo de \(X_{h}\), entonces la fórmula se simplifica y sólo difiere de la de predicción de un valor por lo que en la varianza se cambia \(1\) por \(1/m\). Lo anterior se puede comprobar viendo que
m=3
var.PredMeanYh_x100v2=MSE*(1/m+1/n+(100-xbar)^2/SSx)
alpha=.1
tcuantil=qt(1-alpha/2, n-2,lower.tail = TRUE)
print(c(beta0+beta1*100-tcuantil*sqrt(var.PredMeanYh_x100v2),
beta0+beta1*100+tcuantil*sqrt(var.PredMeanYh_x100v2)))
## [1] 365.2356 473.5366
lo cual nos arroja el mismo intervalo de predicción.
Solución: Este intervalo se puede obtener multiplicando por tres el obtenido en \(b)\), pues en el inciso anterior trabajamos y hablamos de un promedio, y en este caso se está hablando de las horas totales. Luego
# Este intervalo se puede obtener multiplicando por tres el obtenido en b)
print(3* c(beta0+beta1*100-tcuantil*sqrt(var.PredMeanYh_x100v2),
beta0+beta1*100+tcuantil*sqrt(var.PredMeanYh_x100v2)) )
## [1] 1095.707 1420.610
o directamente usando la fórmula vista inicilamente. Buscamos pues la estimación de \(\sum_{j=1}^ m y_{hj}\) con \(m=3\) y con \(x_{h1}= x_{h2}=x_{h3}=100\). De donde \(a_j=1\) para \(j=1,2,3\).
sumA_j=(1+1+1)
sumA_j_2=(1^2+1^2+1^2)
SumA_jXhj=((1)*100+(1)*100+(1)*100)
var.PredSumYh_x100=MSE*(sumA_j_2+sumA_j^2/n+(SumA_jXhj-sumA_j*xbar)^2/SSx)
alpha=.1
tcuantil=qt(1-alpha/2, n-2,lower.tail = TRUE)
print(c(sumA_j*beta0+beta1*SumA_jXhj-tcuantil*sqrt(var.PredSumYh_x100),
sumA_j*beta0+beta1*SumA_jXhj+tcuantil*sqrt(var.PredSumYh_x100)))
## [1] 1095.707 1420.610
En conclusión se usarán entre 1095 y 1420 horas totales para cumplir con lo establecido en el contrato.