La descripción gráfica de los datos nos permite inspeccionar los datos para:
Tienes varias bases de datos con las que practicar en la web de OpenMV.net. En particular, trabajamos a continuación con la BD blender-efficiency.csv:
library(ggplot2)
blender=read.csv("blender-efficiency.csv",header=TRUE, sep=",")
summary(blender)
## ParticleSize MixerDiameter MixerRotation BlendingTime
## Min. :2 Min. :4 Min. :175 Min. :45.00
## 1st Qu.:5 1st Qu.:6 1st Qu.:200 1st Qu.:48.75
## Median :5 Median :6 Median :200 Median :60.00
## Mean :5 Mean :6 Mean :200 Mean :58.33
## 3rd Qu.:5 3rd Qu.:6 3rd Qu.:200 3rd Qu.:60.00
## Max. :8 Max. :8 Max. :225 Max. :75.00
## BlendingEfficiency
## Min. :61.80
## 1st Qu.:70.75
## Median :74.70
## Mean :75.17
## 3rd Qu.:80.03
## Max. :92.20
Reconvertimos en factores las variables que han de actuar como tales
blender$ParticleSize=as.factor(blender$ParticleSize)
blender$MixerDiameter=as.factor(blender$MixerDiameter)
blender$MixerRotation=as.factor(blender$MixerRotation)
blender$BlendingTime=as.factor(blender$BlendingTime)
Con el fin de no repetir continuamente el nombre completo de las variables, simplificaremos a continuación con las siguientes siglas:
datos=blender
summary(datos)
## ParticleSize MixerDiameter MixerRotation BlendingTime BlendingEfficiency
## 2: 4 4: 4 175: 4 45: 5 Min. :61.80
## 5:10 6:10 200:10 60:10 1st Qu.:70.75
## 8: 4 8: 4 225: 4 75: 3 Median :74.70
## Mean :75.17
## 3rd Qu.:80.03
## Max. :92.20
ggplot(datos,aes(x=BlendingEfficiency))+geom_histogram(bins=6)
Investigamos a continuación la relación entre las variables potencialmente predictoras y la variable respuesta. ### BlendingTime
ggplot(datos,aes(BlendingTime,BlendingEfficiency))+geom_boxplot()
ggplot(datos,aes(MixerRotation,BlendingEfficiency))+geom_boxplot()
ggplot(datos,aes(MixerDiameter,BlendingEfficiency))+geom_boxplot()
ggplot(datos,aes(ParticleSize,BlendingEfficiency))+geom_boxplot()
El objetivo básico de estos gráficos es indagar si existen interacciones entre los factores explicativos, esto es, si el hecho de que un factor varíe en un sentido afecta a la relación entre otro factor y la variable respuesta. Recordar que tendencias similares en la relación entre un factor A y la respuesta R para los diferentes niveles de un factor B, implicará que NO hay interacción. En caso contrario tendremos indicios de interacción.
ggplot(datos,aes(BlendingTime,BlendingEfficiency))+geom_boxplot()+facet_grid(.~MixerRotation)
ggplot(datos,aes(BlendingTime,BlendingEfficiency))+geom_boxplot()+facet_grid(.~MixerDiameter)
ggplot(datos,aes(BlendingTime,BlendingEfficiency))+geom_boxplot()+facet_grid(.~ParticleSize)
Tú mismo/a puedes realizar el análisis gráfico pertinente y la interpretación para el resto de interacciones.
Una vez realizada la inspección gráfica, las conclusiones que derivamos y que nos orientan a la hora de plantear el análisis estadístico son las siguientes:
Planteamos pues una modelización lineal y procedemos con la selección de variables, que puede responder a dos criterios básicos:
Podríamos utilizar las conclusiones derivadas del análisis descriptivo para plantear un modelo base de partida en la búsqueda de una buena modelización de la respuesta. Sin embargo, para evitar sesgos en la modelización provocados por el modelizador, es habitual tomar como partida un modelo completo con todas las interacciones.
Recordar que el modelo sólo será capaz de estimar efectos (medias) en los niveles y combinaciones de niveles para los que existan datos. Muchas interacciones serán inestimables a priori por la ausencia de datos en esta base de datos.
fit.b=lm(BlendingEfficiency~(BlendingTime*MixerRotation*MixerDiameter*ParticleSize),data=blender)
anova(fit.b)
## Analysis of Variance Table
##
## Response: BlendingEfficiency
## Df Sum Sq Mean Sq F value Pr(>F)
## BlendingTime 2 135.17 67.59 2.3984 0.29425
## MixerRotation 2 3.37 1.68 0.0597 0.94364
## MixerDiameter 2 22.78 11.39 0.4043 0.71212
## ParticleSize 1 1026.05 1026.05 36.4104 0.02638 *
## BlendingTime:MixerRotation 3 14.30 4.77 0.1692 0.90893
## MixerRotation:MixerDiameter 2 0.28 0.14 0.0050 0.99503
## BlendingTime:ParticleSize 2 7.78 3.89 0.1381 0.87867
## MixerDiameter:ParticleSize 1 8.70 8.70 0.3088 0.63427
## Residuals 2 56.36 28.18
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Comprueba tú mismo qué efectos se han conseguido estimar (y cuáles no) ejecutando el código:
summary(fit.b)
Buscamos a continuación el mejor modelo por selección automática basado en el AIC
fit.aic=step(fit.b)
anova(fit.aic)
## Analysis of Variance Table
##
## Response: BlendingEfficiency
## Df Sum Sq Mean Sq F value Pr(>F)
## BlendingTime 2 135.17 67.59 8.2829 0.006392 **
## MixerDiameter 2 22.84 11.42 1.3994 0.287437
## ParticleSize 2 1027.03 513.51 62.9313 9.508e-07 ***
## Residuals 11 89.76 8.16
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El modelo ajustado por AIC es el que contiene como factores predictores: BT, MD y PS. MR ha sido descartado. Notar que sin embargo, MD no es significativo (p-valor=0.2874).
Dados los resultados del ANOVA en el modelo completo, reajustamos la modelización a un modelo base SIN interacciones. A partir de él vamos descartando variables no significativas.
fit=lm(BlendingEfficiency~(BlendingTime+MixerRotation+MixerDiameter+ParticleSize),data=blender)
anova(fit)
## Analysis of Variance Table
##
## Response: BlendingEfficiency
## Df Sum Sq Mean Sq F value Pr(>F)
## BlendingTime 2 135.17 67.59 7.7305 0.009346 **
## MixerRotation 2 3.37 1.68 0.1925 0.827869
## MixerDiameter 2 22.78 11.39 1.3030 0.314131
## ParticleSize 1 1026.05 1026.05 117.3569 7.598e-07 ***
## Residuals 10 87.43 8.74
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La primera candidata a salir del modelo es MR.
fit.s=update(fit,.~.-MixerRotation,data=blender)
anova(fit.s)
## Analysis of Variance Table
##
## Response: BlendingEfficiency
## Df Sum Sq Mean Sq F value Pr(>F)
## BlendingTime 2 135.17 67.59 8.2829 0.006392 **
## MixerDiameter 2 22.84 11.42 1.3994 0.287437
## ParticleSize 2 1027.03 513.51 62.9313 9.508e-07 ***
## Residuals 11 89.76 8.16
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La siguiente candidata a salir es MD.
fit.s=update(fit.s,.~.-MixerDiameter,data=blender)
anova(fit.s)
## Analysis of Variance Table
##
## Response: BlendingEfficiency
## Df Sum Sq Mean Sq F value Pr(>F)
## BlendingTime 2 135.17 67.59 7.7879 0.005979 **
## ParticleSize 2 1026.80 513.40 59.1579 2.962e-07 ***
## Residuals 13 112.82 8.68
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Este modelo ya es aceptable. Lo comparamos con el que obtuvimos con el criterio AIC:
AIC(fit.s)
## [1] 96.11948
summary(fit.s)
##
## Call:
## lm(formula = BlendingEfficiency ~ BlendingTime + ParticleSize,
## data = blender)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3312 -1.7039 -0.3219 0.5687 7.2688
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 84.278 1.885 44.713 1.27e-15 ***
## BlendingTime60 1.950 1.614 1.209 0.24837
## BlendingTime75 8.187 2.185 3.748 0.00244 **
## ParticleSize5 -11.747 1.766 -6.652 1.58e-05 ***
## ParticleSize8 -22.650 2.083 -10.873 6.75e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.946 on 13 degrees of freedom
## Multiple R-squared: 0.9115, Adjusted R-squared: 0.8843
## F-statistic: 33.47 on 4 and 13 DF, p-value: 9.898e-07
AIC(fit.aic)
## [1] 96.00342
summary(fit.aic)
##
## Call:
## lm(formula = BlendingEfficiency ~ BlendingTime + MixerDiameter +
## ParticleSize, data = blender)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2983 -1.0541 -0.2830 0.3391 7.3017
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 82.200 2.965 27.721 1.57e-11 ***
## BlendingTime60 2.302 2.460 0.936 0.36946
## BlendingTime75 8.166 2.122 3.848 0.00271 **
## MixerDiameter6 2.127 2.578 0.825 0.42688
## MixerDiameter8 3.375 2.020 1.671 0.12292
## ParticleSize5 -11.829 1.769 -6.686 3.44e-05 ***
## ParticleSize8 -22.650 2.020 -11.213 2.33e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.857 on 11 degrees of freedom
## Multiple R-squared: 0.9296, Adjusted R-squared: 0.8912
## F-statistic: 24.2 on 6 and 11 DF, p-value: 9.9e-06
Hacemos a continuación una revisión rápida sobre la validación del modelo elegido (AIC):
par(mfrow=c(2,2))
plot(fit.aic)
Se ratifican prácticamente todas las conclusiones del análisis descriptivo preliminar:
Predecimos a continuación la eficiencia BE para cada una de las combinaciones de los factores implicados en el ajuste:
newdata=expand.grid(BlendingTime=factor(levels(datos$BlendingTime)), MixerDiameter=factor(levels(datos$MixerDiameter)), ParticleSize=factor(levels(datos$ParticleSize)))
pred=predict(fit.aic,newdata=newdata,se.fit=T,interval="prediction")
pred.full=cbind(newdata,round(pred$fit,2),round(pred$se.fit,2))
library(DT)
datatable(pred.full,rownames=FALSE,colnames=c("BT","MD","PT", "pred","ic.lwr", "ic.upr", "se"), filter="top",options=list(searching=TRUE,paging=TRUE,info=FALSE,pageLength=9,autoWidth=TRUE),
caption="Tabla Predicción. Predicción de la eficiencia BE para los niveles y factores considerados como relevantes (junto con el error de la predicción -se- y un intervalo de confianza al 95%).")
A partir de los resultados en la predicción, concluye tú mismo/a sobre cuál sería la configuración óptima en los factores explicativos para provocar máxima eficiencia.