Você está na página 1de 9

RESUMEN R

1. Tipos de Diseo Experimental


2. Cargar datos
Datos <- read.table (nombre.txt, header=T, sep=el separador que sea).
Tambin se puede hacer con read.csv, o similares.
Datos$factor <- factor(Datos$factor, labels = c(nivel1,,nivelN)) Esto
nos permite seleccionar un elemento de la tabla como factor, y darle
nombre a sus niveles.
Tambin puede darse el caso en que tengamos que introducir los datos
manualmente y crear niveles de factor.
Datos <- c(valor1,valor2,,valorN).
Despus tendramos que crear los niveles de factor que deseemos, por
ejemplo si hay 4 niveles y 5 rplicas (observaciones) en cada nivel de factor:
Factor <- gl(4,5,labels = c(nivel1,,nivelN)).
Para asociar ambos conjuntos utilizamos la siguiente funcin:
Nombre <- data.frame(Datos,Factor)
*Ejercicio <- c(rep("A",6),rep("B",6),rep("C",6)) Esto puede ser til a la hora
de utilizar dos factores, y querer ordenar la informacin en una tabla. Te
dice bsicamente que te haga un vector tal que sea 6 veces A, seguido de 6
veces B, y de 6 veces C.
*str(datos): ver cmo estn estructurados los datos.
3. Anova: 1 Factor
options(show.signif.stars=TRUE, contrasts=c("contr.sum", "contr.poly"))
Nombre.aov <- aov(Datos~Factor, data=Nombre) As, obtenemos la tabla
ANOVA, y para visualizarla introducimos . Tambin Nombre.aov <-
aov(Datos$valor~Datos$Factor, data=Nombre)
Summary(Nombre.aov). Si p-valor < 0.05, rechazamos la H0 y asumimos
que hay diferencias entre los distintos niveles de factor.
*Tambin: anova(lm(datos~factor, data=Nombre).

4. ANOVA: 2 Factores
*Tan solo una rplica por condicin experimental ser un diseo por bloques
(no podemos comparar las medias, pues no hay varianza).
*Un modelo es cruzado cuando ambos factores interaccionan sobre las
mismas casillas (celdas). Cuando no est anidado; es decir, cuando todo se
cruza con todo.
Nombre.aov <- aov(Datos~Factor1*Factor2, data=Nombre) Modelo
completo con interaccin(*).
Nombre.aov <- aov(Datos~Factor1+Factor2, data=Nombre) Modelo
completo sin interaccin (+). Esto es obligatorio cuando tan solo hay una
rplica por condicin (el mismo R no te deja hacerlo).
Ahora tenemos que instalar la library(AnovaTools), y:
Anova2cross(Nombre.aov, random = Factor(es)Aleatorio(s),
restricted=T/F). **El modelo restringido es un concepto que solo se aplica a
diseos mixtos, y se basa en restringuir que el sumatorio de los efectos del
factor fijo sumen cero o no. El modelo restringido es problemtico cuando
no est balanceado, y solo se prefiere cuando observamos una correlacin
entre interacciones. En caso contrario, se utiliza el no restringido que es
ms abierto.
*Covarianza: encontrar correlacin: cmo se comporta una variable con
otra. Cuando es 1, es perfecta. Se mira entre dos replicas de la misma
condicin, o en diferentes condiciones. No lo usamos.

5. Comprobacin de la validez del modelo


Comprobacin grfica: plot(nombre.aov).
Residuals vS Fitted: sin tendencia alguna (mira homocedasticidad:
homogeneidad de varianza)
Normal QQ: lnea recta que implica que los residuos siguen una distribucin
normal.
Scale-Location: sin tendencia, homocedasticidad.
Constant Leverage: sin tendencia, homocedasticidad tambin.
Test estadsticos:
Homocedasticidad: Bartlett.test(datos~factor, data=nombre) si hay
normalidad.
Homocedasticidad: library(lawstat), y levene.test(Datos, factor) Mejor, sobre
todo si no hay normalidad de residuos
Homocedasticidad: library(car), y leveneTest(Datos~Factor1*Factor2).
2Factores.
Homocedasticidad: fligner.test(datos~factor, data=nombre) Est bien, un
poco ms restrictivo.
Normalidad de residuos: shapiro.test(nombre.aov$residuals)
Normalidad de residuos: library(nortest), ad.test(nombre.aov$residuals)
Anderson-Darling: muestras grandes.
hist(data.aov$residual): Ver si hay residuos outlier.

*Independencia de residuos: test de Burkin-Watson.

*Si se cumple todo, diremos que los errores cumplen las condiciones de
Gauss-Markov: ~N(0,sigma) i.i.d.

6. Comparaciones mltiples
Plot(datos~factor) De manera grfica algo se puede ver, y nos hace un
box-plot.
Se puede hacer por t.test:
Pairwise.t.test(Datos$valor, Datos$factor, p.adj =none).
Sino pasamos a diferentes test que hay que hacer para comparar todos los
pares. Lo primero es cargar el paquete agricolae.
Fisher LSD: LSD.test(nombre.aov, p.adj=c(Bonferroni/nada/holm),
console=T) Es el menos aconsejable.
Tukey HSD: HSD.test(nombre.aov, console=T)? Est bastante bien.
TukeyHSD(nombre.aov,Factor, console=T).
Ducan(rango mltiple): Duncan.test(nombre.aov, console=T) aumenta
mucho error I.
SNK: SNK.test (nombre.aov, console=T): Newman-Keules.
Scheffe: scheffe.test (nombre.aov, console=T) Bastante bien, junto con
HSD.
Comparacin con control: Dunnet. Primero cargamos librera multcomp. Y
hacemos:
Mc = glht(nombre.aov, mcp(grupo=Dunnett))
Summary(mc,test=adjusted(single-step))
Tambin: nombre.glht <- glht(nombre.aov,linfct=mcp(color=Dunnet));
summary(nombre.glht).
TUKEY factores aleatorios: TukeyHSD(nombre.aov, which = "Factor")
Importante en 2 factores especificar con which qu factor NO? queremos
analizar. *No tiene sentido hacer un estudio de comparacin mltiple,
puesto no hay efecto en funcin del nivel de factor.
Determinar mejor condicin experimental (grficamente):
interaction.plot(nombre$Factor1,nombre$Factor2, nombre$datos). Es
importante ver que el primer factor (Factor1) queda en el eje de las x, el
factor2 es el que ser representado con lneas diferentes, y por ltimo la
respuesta.* Si las lneas se cruzan, quiere decir que la interaccin es
significativa.
Sin interaccin: En el caso que no haya interaccion, no tiene mucho
sentido hacer comparaciones mltiples para cada factor. As haremos
comparaciones entre niveles de un factor por separado dentro de cada nivel
del otro factor (ejemplo del blat).
blatA.aov <- aov(Produccio ~ Fertilitzant, data = blat, subset = blat$Varietat
== "A")
comp.mult <- TukeyHSD(blatA.aov, which="Fertilitzant")
comp.mult
inter.aov = aov(Produccio ~ Fertilitzant:Varietat, data = blat)
model.tables(inter.aov, type="means", cterms = "Fertilitzant:Varietat",
se=TRUE)
comp.mult <- TukeyHSD(inter.aov)
comp.mult
7. Test no paramtrico
Kruskal.test(datos~factor, data=nombre). S o no. Tiene menos potencia
que ANOVA.
Kruskal(datos, factor, console=T).
*Otros expertos hablan de test de permutaciones (no pierden potencia, pero
son largos).

8. Estimacin de parmetros
Dummy.coef(nombre.aov) Nos da los valores de la media general y la media
de los efectos de cada uno de los niveles de cada factor (si hubiera
interaccin tambin de esta).
Model.tables(nombre.aov, type=effects/mean, se=T). Obtener valores
de los efectos/las medias de cada nivel de cada factor en el anlisis ANOVA
realizado. se nos pregunta si queremos que nos muestre los errores
estndar de los efectos.
Para poder estimar las varianzas, hay que utilizar los parmetros MS de la
tabla ANOVA, y seguir la siguiente tabla para calcular lo que necesitemos en
funcin del caso en el que estemos.

9. Clculo probabilidad
Si es una variable que sigue una distribucin normal (como casi siempre),
utilizaremos:
pnorm(q=X, \mu, \sigma), con esto calculamos la probabilidad de que
dentro de una distribucin N(\mu,\sigma) tengamos un valor menor o igual a
X. Si fuera mayor o igual, recordar que sera (1- pnorm(q=X, \mu,
\sigma))=1-P(X). Importante poner la desvest y no la varianza.
qnorm: mirar

10. Estadstica descriptiva


Mean(datos)
Median(datos)
Sd(datos)
Var(datos)
Min(datos)
Max(datos)
Boxplot(datos)
plotMeans(Nombre$Datos, Nombre$factor, error.bars=conf-int,
level=0.95). Tambin podemos aadir una lnea donde se encuentre la
media de los datos abline(h=mean(Datos)). Importante, hay que cargar la
librera library(Rcmdr).

10. Diseo en bloques


nombre.aov <- aov(datos~Factor1+Error(FactorBloque/Factor1),data =
nombre)
Si hay problemas mirad la hoja que hay en el campus.
res <- aov(distance ~ age*Sex + Error(Subject), data = Orthodont)
summary(res)
Pruebas de esfericidad: Prueba de esfericidad de Mauchley.
https://campusvirtual2.ub.edu/mod/resource/view.php?id=2231103
http://www.statmethods.net/stats/anova.html

11. ANOVA: Factores anidados


library(AnovaTools)
nombre.aov <- aov(datos ~ Factor1+FactorAanidado %in% Factor1, datos) *
%in% (indicar anidados)
nombre.aov <- aov(datos ~ Factor1/FactorAnidado, data=nombre)
*Tukey: TukeyHSD(prot.aov,"cultivo:medio")
*Ejemplo resumida 3F: bessons.aov <- aov(CAnaerobia ~
zigosi/parella/individu, data=bessons)
anova2nest(nombre.aov, random='FactorAnidado/2')
*anova3nest(bessons.aov, random = c("parella", "individu")) No importa el
orden.
*anova3nest(bessons.aov, random = "parella") Es lo mismo pues todos los
que estn por debajo se consideran aleatorios.
*r es el nmero de rplicas por condicin experimental.
11. Regresin lineal simple
lmod <- lm(datos$Y ~ datos$X, data = datos)
summary(lmod): Obtenemos la pendiente (estimate datos$X) y la ordenada
en el origen (estimate Intercept).
coef(lmod): tambin tenemos los coeficientes que buscamos.
*Es necesario hacer los anlisis de validez del modelo: normalidad de
residuos y homocedasticidad.
predict(lmod, newdata = data.frame(datos$X), interval = "confidence"):
tenemos la prediccin de cada valor con un intervalo de confianza para un
valor medio (ms estrecho). Mejor para predecir una poblacin.
predict(lmod, newdata = data.frame(datos$X), interval = "prediction"):
prediccin de cada valor. Da diferentes valores, esto es para un valor
concreto (siempre es ms ancho). Pone algo como tolerancia (mirar qu es).
Para valores concretos (individuos).
Podemos utilizar sencillamente: predict(lmod). El valor 59 corresoponde al
60,
confint(lmod, level=0.95)
plot(lmod): mismos grficos, mismas interpretaciones. Leverage: puntos
potencialmente influyentes (muy a la derecha, lejos de la media). La
distancia de Cook da una medida de cmo cambiara una recta si estuviera
o no ese punto. Si un punto atraviesa ests lneas rojas de Cook, se
considera influyente (problema).

12. Regresin lineal mltiple


pairs(datos): mirar interrelacin de las variables de dos en dos. Nos interesa
ver que la relacin se asemeja (en cierto modo) a una elipse; en este caso
habr mucha interrelacin entre variables.
cor(datos, use = "complete.obs"): aqu miramos tambin la correlacin
entre variables y obtenemos una matriz simtrica. El complete.obs nos
elimina de los clculos los casos NA, sino no es necesario. Si se aproxima a
1 en valor absoluto implica que estn muy correlacionadas.
scatterplotMatrix(datos, diagonal = "boxplot") Es un grfico muy til. La
lnea creo que ha de ser recta sin pendiente (aprox), que no muestre
tendencia. IMP: library(car)
lmod <- lm(Y ~ X1 + X2 + X3, data = datos) o lmod2 <- lm(Y ~ . , data =
datos): Solo hay que utilizar los que se obtengan significativos. El SE de
residuos es la sigma (psilon). Se mira el F-estadstico de la prueba en
general, y se intenta ver s es significativo. Mirar R2 ajustado.
Para comparar modelos y ver si son significativamente diferentes se hacen
los dos lm, y se hace anova(lm1,lm2). Si efectivamente son diferentes, el
mejor ser el que tenga un mayor R2 ajustado; y en caso de aceptar H0,
utilizamos el ms sencillo.
No solo nos quedamos con las variables que son significativos, puesto que
estamos rechazando el resto, puesto que aceptamos estas.
Para detectar multicolinealidad: library(car)
cor(datos), para mirar la correlacin, si es muy elevada (cercana a 1) hay
peligro de que una variable explique otra (multicolinealidad). Realicemos:
vif(lmod), que es el variance inflance factor que ha de estar por debajo de
4-5. Si esto es as, vamos eliminando variables (de mayor vif a menor) hasta
que perdamos el problema de multicolinealidad.
step(lmod). Se va cargando las variables que ponen de manifiesto la
multicolinealidad. Podra ser por ejemplo step(lmod, direction=backward),
creo que en este caso hacen lo mismo.
step(g, scope=gc.formula, direction="both", test="F")
confint(lmod): intervalo de confianza de los parmetros de un modelo.
La verificacin de las condiciones es como siempre: plot(lmod), pero
adems podemos hacer un test de outlier: outlierTest(lmod) que te dice
cules son los residuos que rompen la armona. Es interesante tambin ver
boxplot(residuals(lmod)).
*Un oulier es un dato cuya respuesta no sigue la tendencia del resto de los
datos.
*Un punto de alto leverage (influencia potencial) es as si tiene valores
predichos extremos. Son combinaciones inusuales de los valores
predictores.
*Se dice influyente si afecta a las predicciones, modelo, etc.
https://onlinecourses.science.psu.edu/stat501/node/337
influencePlot(lmod, id.method = "identify", main = "Influence Plot", sub =
"Circle Size"). Lo de los circulos, te informa de aquellos que pueden ser
influyentes o outlier.
datos.pred <- data.frame (X1= 71.2, X2 = 5.9, X3 = 10.8)
predict (lmod, newdata = datos.pred, interval ="confidence", level= 0.9)
http://www.statmethods.net/stats/rdiagnostics.html

13. Anlisis de componentes principales


http://www.statmethods.net/advstats/factor.html
Tiene sentido cuando las variables estn correlacionadas entre s: se puede
mirar con cor(datos), o cov(datos). Si no, no tiene sentido, y el anlisis ser
en vano. La matriz de covarianzas del nuevo conjunto de variables nos da
los valores para las varianzas.
*La matriz de correlaciones est tipificada, variabilidad mxima 1 por
variable. As, la diagonal est formada por unos. En cambio la matriz de
covarianzas no, y tiene en la diagonal la varianza de cada variable, y en el
resto las covarianzas respectivas. Tan solo tipificaremos (escalar) cuando las
unidades y las magnitudes sean muy distintas que cueste interpretarlo,
porque sino estamos perdiendo informacin intilmente.
*Clculo manual diagonalizacin, y componentes principales.
X <- scale(X, scale=F)
ev <- eigen(cov(X))
ev$values / sum(ev$values): calcular scores (porcentaje de varianza
explicada por componente).

*Clculo automtico de componentes principales:


pc <- princomp(X), siendo X el vector con los datos de las variables
cuantitativas.
summary(pc): desvest, proporcin de varianza (individual y acumulada).
plot(pc): diagrama en barra de la varianza de cada componente.
scores <- pc$scores# : las x son las scores para cada componente.
plot(scores[ ,1:2]) en este caso 1:2 son las dos componentes principales que
nos interesan.
pca$loadings: ver la influencia de cada componente sobre el signo.
*No escalar (tipificar), pues puede quitar importancia a las variables
importantes.
Una vez obtenemos los componentes principales podemos hacer una
estimacin de una variable en base a las componentes principales.

14. Cluster Analysis


Cluster jerrquico: tipo rbol genealgico
http://www.statmethods.net/advstats/cluster.html
dist.res <- dist(Datos.escalados, method = "euclidean")
hc <- hclust(dist.res, method = "complete"). Method puede ser
complete,single o average.
plot(hc, labels = FALSE, hang = -1)
plot(density(hc$height))
rect.hclust(hc, k = 3, border = 2:4) Esto ltimo lo deja separado en cajas.

d <- dist(pts, method="euclidian")


par(mfrow=c(1,2))
plot(hclust(d,method="single"), main="single linkage")
plot(hclust(d,method="complete"), main="complete linkage")
par(mfrow=c(1,1))

Cluster
datos.scaled <- scale(datos[, -5]). Escalar datos: si es necesario quitar
alguna columna.
km.res <- kmeans(datos.scaled, 3, nstart = 25). Nstart no es necesario, y 3
son las clases que queremos.
km.res$cluster : vemos en qu cluster est cada uno.
El mtodo kmeans utiliza un nmero al azar como centro.

Esto es para hacerlo con el mtodo Pam (utiliza un dato real como centro)
library(cluster)
pam.res <- pam(datos.scaled, 3)
pam.res$cluster
clusplot(pam.res)
ss <- silhoutte(pam.res)
plot(ss)
*Para ver cul es el ptimo mirar el plot(ss) y la amplitude media del sil, si
es mayor es major (siempre tiene un pico).
plot(ss, col=gcol)
Mtodo silhouette
k.max <- 15
data <- datos.scaled
sil <- rep(0, k.max)
for(i in 2:k.max){
km.res <- kmeans(data, centers = i, nstart = 25)
ss <- silhouette(km.res$cluster, dist(data))
sil[i] <- mean(ss[, 3])
}
plot(ss, col=gcol)
plot(1:k.max, sil, type = "b", pch = 19,
frame = FALSE, xlab = "Number of clusters k")
abline(v = which.max(sil), lty = 2)

Você também pode gostar