Está en la página 1de 12

1 | Práctica 6: Análisis de la va-

rianza. Regresión lineal y co-


rrelación.

Objetivos
Utilizar R para trabajar el análisis de la varianza

Utilizar R para trabajar la regresión lineal

1.1. Análisis de la varianza


Deseamos comprobar si tres profesores que imparten decencia en el mismo nivel
y asignatura califican por igual los ejercicios de sus alumnos. Se toma una muestra al
azar de 8 ejercicios de cada uno de los profesores, x, y, z. Los datos recogidos son los
siguientes:

> print(xtable(notas), include.rownames=FALSE,table.placement = "h!" )

X Y Z
4.00 4.00 3.00
3.00 4.00 4.00
4.00 5.00 2.00
5.00 5.00 4.00
2.00 4.00 5.00
3.00 5.00 5.00
4.00 4.00 4.00
5.00 4.00 4.00

Aunque la variable calificaciones no es continua, vamos a suponer que se distribuye


normalmente y asumimos la igualdad de varianzas en las tres muestras. Introducimos
los datos en RCommander.
Colocamos las calificaciones en la misma columna y en otra columna, asignamos a
cada calificación un número en función de la muestra (profesor) a la que pertenezca.

1
2 1.1 Análisis de la varianza

No hay que olvidar factorizar la variable tomada para asignar profesor a cada
calificación. Escogeremos Datos/Modificar variables del conjunto acti-
vo/Convertir variable numérica en factor, como aparece en la Figura 1.1.

Figura 1.1: Convertir una variable numérica en factor en RCommander.

Debemos marcar la casilla Asignar nombres a las variables, para poder asignar al
número identificativo de cada profesor, su nombre, en este caso, x, y, z, como se ve
en la Figura 1.2.

Figura 1.2: Asignar nombres a niveles de un factor en RCommander.

Si visualizamos los datos (Figura 1.3) veremos que en una columna aparecen las
calificaciones y en la de al lado el profesor al que pertenecen.
Práctica 6: Análisis de la varianza. Regresión lineal y correlación. 3

Figura 1.3: Banco de datos de calificaciones en RCommander.

Para aplicar el anova de un factor, escogemos Estadı́sticos/Medias/ANOVA


de un factor, como en la Figura 1.4.

Figura 1.4: Análisis de la varianza en RCommander.

Los resultados son los siguientes:

Df Sum Sq Mean Sq F value Pr(>F)


4 1.1 Análisis de la varianza

profesor 2 1.75 0.8750 1.131 0.342


Residuals 21 16.25 0.7738
Df equivale al número de tratamientos-1. En nuestro caso 3-1=2.
Sum Sq es el equivalente a nuestro suma de cuadrados.
Mean SQ es nuestra media de cuadrados.
F nuestro estadı́stico de contraste F.
Pr(>F) es el p-valor, que nos indica si debemos aceptar o no la igualdad de medias
de las calificaciones de los alumnos correspondientes a los tres profesores. En este caso
debemos aceptar, si estamos trabajando a un nivel de significación de α = 0,05.
Los grados de libertad de Residuals, equivale al número de datos menos el número
de grupos. En este caso 24-3=21
El valor que aparece al lado de Residuals (16.2500) es la suma de cuadrados
de la variabilidad dentro de los grupos y el último valor que aparece a continuación
(0.7738) es el cuadrado medio correspondiente.
Además, usando la función tapply() podemos calcular estadı́sticos resumen para
las notas de cada uno de los profesores:
> tapply(calificaciones$calificaciones, calificaciones$profesor,
+ mean, na.rm=TRUE) # means
x y z
3.750 4.375 3.875
> tapply(calificaciones$calificaciones, calificaciones$profesor,
+ sd, na.rm=TRUE) # std. deviations
x y z
1.0350983 0.5175492 0.9910312
> tapply(calificaciones$calificaciones, calificaciones$profesor,
+ function(x) sum(!is.na(x))) # counts
x y z
8 8 8
Cuando no podemos suponer la normalidad de las poblaciones, podemos utilizar
un test no paramétrico. R nos ofrece el de Kruskal-Wallis (ver Figura 1.5)
La instrucción que genera RCommander y los resultados obtenidos son los siguientes:
> kruskal.test(calificaciones ~ profesor, data=calificaciones)
Kruskal-Wallis rank sum test

data: calificaciones by profesor


Kruskal-Wallis chi-squared = 1.9387, df = 2, p-value = 0.3793
El p-valor en este caso nos vuelve a decir lo mismo y es que podemos aceptar la
hipótesis nula de igualdad entre los tres profesores.
Práctica 6: Análisis de la varianza. Regresión lineal y correlación. 5

Figura 1.5: Test de Kruskal-Wallis en RCommander.

1.1.1. Análisis por bloques completamente aleatorizados.


Consideremos el ejercicio siguiente:

Tenemos tres tipos de complejos vitamı́nicos I, II y III y se quiere


averiguar si producen los mismos efectos respecto al aumento de peso en
conejos. Con este propósito, se pensó en realizar un diseño completamente
aleatorizado. No obstante, el investigador cree que dicho estudio puede
verse alterado al ser los conejos de cuatro razas diferentes, por lo que
eligió tres conejos de cada una de las razas, asignando al azar los tres
complejos vitamı́nicos entre cada terna. Los resultados con respecto al
aumento de peso, en gramos, fueron:

I II III
A 94.00 92.00 90.00
B 89.00 86.00 86.00
C 87.00 86.00 84.00
D 98.00 92.00 82.00

En este caso introducimos los datos como antes, pero teniendo en cuenta que
tendremos que factorizar dos variables, la que contiene la agrupación por tratamientos
(complejos vitamı́nicos) y la que contiene la agrupación por bloques (razas) Después
de hecho, el conjunto de datos nos queda de la forma que aparece en la Figura 1.6.
Para aplicar el ANOVA por bloques completamente aleatorizados, utilizaremos
instrucciones, porque RCommander, por el momento, no nos ofrece la posibilidad de
hacerlo directamente:

> g<-lm(Peso~razas+complejos,data=conejos)
> anova(g)

Analysis of Variance Table


6 1.1.1 Análisis por bloques completamente aleatorizados.

Figura 1.6: Banco de datos de conejos en RCommander.

Response: Peso
Df Sum Sq Mean Sq F value Pr(>F)
razas 3 80.333 26.778 2.4845 0.1580
complejos 2 84.667 42.333 3.9278 0.0812 .
Residuals 6 64.667 10.778
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El p-valor, nos recomienda aceptar que no hay diferencias en el peso en función ni de


los tratamientos ni de los bloques, a un nivel de significación de α = 0,05.
Práctica 6: Análisis de la varianza. Regresión lineal y correlación. 7

1.2. Regresión
Se ha tomado una muestra de 15 personas de diversas edades y se ha
calculado su número máximo de pulsaciones, que aparecen recogidas en
la siguiente tabla. Analiza el tipo de relación que existe entre la edad y el
número máximo de pulsaciones.
> Edad_pulsaciones <- data.frame(Edad = c(18, 23, 25, 35, 65, 54,
+ 34, 56, 72, 19, 23, 42, 18, 39, 37), Pulsaciones = c(202,
+ 186, 187, 180, 156, 169, 174, 172, 153, 199, 193, 174, 198,
+ 183, 178))
Utilizando el paquete RCommander introduciremos los datos y los representaremos
gráficamente mediante un diagrama de dispersión o nube de puntos (Figura 1.7).
Especificamos la variable independiente x y la dependiente y, y asignamos etiquetas
a los ejes, si lo consideramos oportuno.
Obtendremos como resultado un gráfico (ver Figura 1.8) en el que aparece dibuja-
da la nube de puntos y la recta de regresión lineal. De esta forma nos podemos hacer
una idea gráfica de cómo se ajustan los puntos a la recta. En nuestro ejemplo podemos
ver que los puntos se ajustan bastante aceptablemente a la recta y que existe entre
ambas variables una relación de tipo negativo (a mayor valor para la variable edad
menor valor para la variable pulsaciones).
Nuestra apreciación visual la podemos confirmar con datos. Podemos calcular el
coeficiente de correlación lineal y la fórmula para la recta de regresión de Y sobre X.
Ello lo haremos también desde RCommander con la la opción Estadı́sticos/Ajuste
de modelos/Regresión lineal. En el menú que se despliega escogemos la variable
explicada (y) y la variable explicativa (x) y aceptamos. Todo este procedimiento lo
podemos ver en la Figura 1.9.
Call:
lm(formula = Pulsaciones ~ Edad, data = Edad_pulsaciones)

Residuals:
Min 1Q Median 3Q Max
-8.9258 -2.5383 0.3879 3.1867 6.6242

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 210.04846 2.86694 73.27 < 2e-16 ***
Edad -0.79773 0.06996 -11.40 3.85e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.578 on 13 degrees of freedom


Multiple R-squared: 0.9091, Adjusted R-squared: 0.9021
F-statistic: 130 on 1 and 13 DF, p-value: 3.848e-08
8 1.2 Regresión

Figura 1.7: Diagrama de dispersión en RCommander.

Intercept nos da la ordenada en el origen de la recta de regresión de y sobre x


(210.04846). La pendiente nos la da el valor edad (que es el nombre de la variable
X). En nuestro caso, es -0.79773. Como podemos observar, se trata de una recta con
pendiente negativa, con lo cual es decreciente y nos indica que existe una relación
negativa entre ambas variables.
El coeficiente de determinación lo encontramos en R-Squared. El valor absoluto
del coeficiente de correlación lineal es la raı́z cuadrada positiva de dicho valor, en
nuestra caso serı́a
Práctica 6: Análisis de la varianza. Regresión lineal y correlación. 9

Figura 1.8: Diagrama de dispersión en RCommander.

q
0,9091 = 0,9534,
lo que nos indica que el ajuste lineal es muy bueno y que hay una fuerte relación
entre ambas variables.
Todo esto lo podemos obtener también, directamente, utilizando las siguientes
instrucciones:

> x<-c(18,23,25,35,65,54,34,56,72,19,23,42,18,39,37)
> y<-c(202,186,187,180,156,169,174,172,153,199,193,174,198,183,178)
> plot(x,y)
> abline(lm(y~x))

Con plot(x,y) dibujamos los puntos. Con lm(y x) obtenemos la pendiente y la


ordenada en el origen de la recta de regresión de y sobre x Con abline(lm(y x))
dibujamos dicha recta. El resultado final puede verse en la Figura 1.10.

> summary(lm(y~x))
10 1.2 Regresión

Figura 1.9: Banco de datos de conejos en RCommander.

Figura 1.10: Regresión lineal sobre el banco de datos de pulsaciones.

Call:
lm(formula = y ~ x)
Práctica 6: Análisis de la varianza. Regresión lineal y correlación. 11

Residuals:
Min 1Q Median 3Q Max
-8.9258 -2.5383 0.3879 3.1867 6.6242

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 210.04846 2.86694 73.27 < 2e-16 ***
x -0.79773 0.06996 -11.40 3.85e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.578 on 13 degrees of freedom


Multiple R-squared: 0.9091, Adjusted R-squared: 0.9021
F-statistic: 130 on 1 and 13 DF, p-value: 3.848e-08
Si queremos obtener los valores teóricos de la y que se obtendrı́an sobre la recta
para los valores que tenemos de la x, utilizaremos:
> fitted ((lm(y~x)))
1 2 3 4 5 6 7 8
195.6894 191.7007 190.1053 182.1280 158.1962 166.9712 182.9258 165.3758
9 10 11 12 13 14 15
152.6121 194.8917 191.7007 176.5439 195.6894 178.9371 180.5326
Si queremos obtener los valores de y correspondientes a determinados valores de x,
por medio de la recta de regresión de y sobre x, por ejemplo de 50 y 60, procederemos:
> predict(lm(y~x),data.frame(x=c(50,60)))
1 2
170.1621 162.1849

1.2.1. Otros ajustes no lineales


Si, por ejemplo, queremos ajustar los datos a una parábola se introducen las
siguientes intrucciones:
> modelo<-lm(y~x+I(x^2))
> modelo
Los resultados son los siguientes:
Call:
lm(formula = y ~ x + I(x^2))

Coefficients:
(Intercept) x I(x^2)
217.027345 -1.193037 0.004633
12 1.3 Ejercicios

1.3. Ejercicios
Ejercicio 1

Ejercicio 2

Ejercicio 3

También podría gustarte