Está en la página 1de 22

Sesiones en R

INSTALACIÓN
R se puede acceder desde varios editores, uno de los más amigables es Rstudio. Este programa
también es de uso libre.

Abriendo R o Rstudio se accede a la consola. Lo primero es verificar que R está direccionado a


la carpeta en donde tendremos los archivos que vamos a cargar.

getwd()
[1] "C:/Liliana/R"
w<-1:25
w
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Crear objetos simples/introducir datos


z <- scan()#dos veces enter para terminar
x <- c(3,8,9,6,4,5)
w <- 1:10
w%in%x
ind=which(w%in%x)
wx<-w[ind]
y <- seq(1, 20, 2)
u<-rep(1,7)
u<-rep(c(1,2),c(3,4))
t<- rep(c(3,4),c(3,4))
ut1<-cbind(u,t) #combinar columnas
ut2<-rbind(u,t) #combinar filas
class(ut2)
x <- rnorm(1000, mean = 3, sd = 2)
x <- matrix(x, nrow = 10, ncol = 100)
class(x)
x2<-as.data.frame(x)
class(x2)
y <- x[3, ]
class(y)
length(y)
y <- x[, -1]
y <- x[x >= 4]

Consultar la ayuda
help.search("regression")#busca todo lo que contenga la palabra “regression”
?plot #cuando se conoce el nombre de la función
Lo que acabamos de instalar es la versión de base con las librerías de base.
library()
Para instalar una nueva librería (por ejemplo ade4), Bajar el archivo zip de la librería (CRAN-
>packages) al directorio personal R.
Escoger la opción Paquetes-> Instalar Paquetes a partir de archivos zip locales, escoger el
archivo (ejemplo ade4.zip).
library() #para ver si quedó en la lista
Para usarla hay que cargarla
library(ade4)

1
Sesiones en R

También se puede hacer a través del menú packages -> install packages en Rstudio (local si se
tiene el zip o accediendo al CRAN).

1. HISTORIA DE R
Todo comienza con la implementación del lenguaje de programación S en programas como S-
PLUS , R+ y Rpro.

S se inventó en los laboratorios AT&T Bell por John Chambers y sus colegas que trabajaban en
estadística en computadores.

Se trata de un lenguaje interactivo y flexible. Se dio a conocer en el medio académico en donde


se volvió muy popular. Permite implementar sus propias técnicas. Desde el comienzo las librerías
han sido creadas por los mismos utilizadores.

”You use S interactively, giving it tasks, looking at data, and creating objects that describe your
projects. S can, and is, used in a “non-programming” style, exploiting quick interaction and
graphics to look at data. This use often leads to a desire to customize your what you are doing,
and S encourages you to slide into programming, perhaps without noticing.”
John Chambers, Programming with Data (1998)

En 1998 John Chambers recibe el premio de la Association for Computing Machinery y es el único
programa estadístico que jamás ha recibido ese premio. Otros programas que han ganado ese
premio son UNIX, WWW, Java.
S ha sido comercializado desde 1993.

R comenzó a comienzos de los 90 como un proyecto iniciado por Robert Gentleman y Ross Ihaka
de la U de Auckland en Nueva Zelanda que no disponían de útiles ya que usaban Macintosh.
Como conocían S, lo comenzaron a escribir en ese lenguaje. Luego lo hicieron público y se
comenzó a utilizar en el medio académico. A partir de 1995 se comenzó a difundir como un
programa libre y todas las modificaciones y aportas deben ser de libre acceso.

licence()

This software is distributed under the terms of the GNU General


Public License Version 2, June 1991. The terms of this license
are in a file called COPYING which you should have received with
this software and which can be displayed by RShowDoc("COPYING").

If you have not received a copy of this file, you can obtain one
at http://www.R-project.org/licenses/.

A small number of files (the API header files listed in


R_DOC_DIR/COPYRIGHTS) are distributed under the
Lesser GNU General Public LIcense version 2.1.
This can be displayed by RShowDoc("COPYING.LIB"),
or obtained at the URI given.

'Share and Enjoy.'

2
Sesiones en R

Pronto fue demasiado trabajo para ser administrado por dos personas y en 1997 se creó un
grupo de 10 personas para la administración.

contributors()

2. COMANDOS BÁSICOS
Los comandos se pueden guardar en un archivo .txt. Este se puede abrir en R a partir de
Archivo-> Abrir script. Se pueden copiar y pegar cada línea con F5.
Igualmente se puede crear un script de comandos nuevo a partir de R y guardarlo como texto.
Si se guarda en R por defecto se crea un archivo .R, el cual es un archivo de texto y puede
abrirse con Bloc de notas.
Los comentarios (que no son reconocidos como comandos) deben llevar un signo # al principio
de la línea.

Para los datos:


Crear un archivo en formato texto
getwd()
[1] "C:/Liliana/R"
Crear la siguiente tabla en excel
sexo peso talla
h 60 170
f 57 169
f 51 172
f 55 174
f 50 168
f 50 161
f 48 162
h 72 189
f 52 160
h 64 175
f 53 165
h 72 164
h 61 175
h 78 184
h 68 178
f 51 158
f 53 164
h 79 179
h 74 182
h 62 174
f 49 158
f 50 163
h 74 172
h 60 185
f 53 170
h 73 178
h 70 180
h 72 189
f 70 172
f 62 174
h 77 200
h 70 178
h 76 178
f 51 169
f 52 170
f 57 160

3
Sesiones en R

f 53 163
f 55 168
f 66 172
h 65 175
h 75 180
f 50 162
f 53 177
h 55 169
h 55 173
h 72 182
h 75 183
h 73 184
h 71 181
h 66 180
h 71 178
h 79 178
h 62 168
f 47 161
h 73 171
h 72 180
h 60 174
h 67 175
h 85 182
h 73 181
h 82 188
h 86 182
h 85 189
h 65 178
f 47 150
h 74 186
Guardar como t3var.txt
Abrirlo como texto
Abrirlo en excel
Abrirlo en R
read.table("t3var.txt")
read.table("t3var.txt")[1:5, ]
Qué pasa?
Que no le avisamos que había una línea que contiene los títulos.
read.table("t3var.txt", header=TRUE)
t3var <- read.table("t3var.txt", header=TRUE)
t3var

Para consultar cómo funciona la función read.table:


?read.table

Para caracterizar los datos y realizar gráficas:


summary(t3var)
names(t3var)
plot(t3var$peso, t3var$talla)
attach(t3var)
plot(peso,talla)
x <- t3var$talla[t3var$sexo == "h"]
y <- t3var$peso[t3var$sexo == "h"]
plot(x, y)
hist(x)

4
Sesiones en R

hist(y)
barplot(summary(sexo))
pie(summary(t3var$sexo))

hist(y)->res
names(res)
res$breaks
res$counts
class(res)
cumsum(res$counts/sum(res$counts))

x <- t3var$talla[t3var$sexo == "h"]


y <- t3var$peso[t3var$sexo == "h"]
plot(x, y)
par(mfrow = c(2, 2))
hist(x)
hist(y)
qqnorm(x)
qqnorm(y)

Otros ejemplos: Peso de 10 corredores de maratón


poidsmar <- c(61, 62, 67, 67, 68, 69, 76, 77, 78, 79)
poidsmar

Para representar bien:


par(mfrow = c(1, 2))
hist(poidsmar, freq = F, col = grey(0.8), ylim = c(0, 0.06), breaks = seq(50,
80, by = 10))
hist(poidsmar, freq = F, col = grey(0.8), ylim = c(0, 0.06), breaks = seq(55,
85, by = 10))
par(mfrow = c(1, 1))

Exportar los datos


dput(t3var, "toto.txt")
provi <- dget("toto.txt")
ls()
[1] "provi" "t3var" "w" "x" "y"

write.table(t3var, "toto.csv")
read.table("toto.csv")

rm(provi)
ls()
[1] "t3var" "w" "x" "y"

Cuidado con las variables cualitativas

5
Sesiones en R

class(sexo)
class(peso)
sitio<-c(1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0)
summary(sitio)
summary(as.factor(sitio))
sitio<-c(1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,NA,NA,NA)
summary(as.factor(sitio))
summary(as.factor(na.omit(sitio)))
pie(summary(as.factor(na.omit(sitio))))
barplot(summary(as.factor(na.omit(sitio))))
barplot(summary(as.factor(na.omit(sitio))), horiz = TRUE, col="blue")

Verificar distribución normal gráficamente: comparación de los cuartiles observados con los
cuartiles teóricos bajo distribución normal. Si la relación es lineal hay indicios de normalidad.
t3var <- read.table("t3var.txt", header=TRUE)
y <- t3var$peso[t3var$sexo == "h"]
qqnorm(y)

Manejo de tablas de datos grandes


tom2<-read.table("base-filtro3-6sept.txt",h=T) #base de expresión de genes de tomate
names(tom2) #en genes.filter el ID de los genes
attach(tom2)
genesR<-read.table("genes-resist.txt",h=T) #lista de todos los genes antes del filtro
dim(genesR)
names(genesR) #en genes.ori está el ID de todos los genes y en la segunda columna se
#indica si son o no de resistencia
attach(genesR)
genes.resistance<-genes.ori[resistance==1] #solamente nombres los genes de
#resistencia
length(genes.resistance)
indres<-which(genes.filter%in%genes.resistance) # ind genes de resistencia base tomate
genesres<-genes.filter[indres] #los nombres de los genes de #resistencia en ambas
bases
length(genesres)
tomresist<-tom2[genes.filter[indres],c(15:22)] #datos de expresión #transformados
logaritmo de los genes de resistencia
dim(tomresist)
write.table(tomresist,"tomresist.csv")

3. Estadísticos de tendencia y posición


x<-c(1,2,3,4,5,6,6,7,8,10)
mean(x)
var(x)
sqrt(var(x))
sd(x)
median(1:4)
range(x)
quantile(x)

6
Sesiones en R

4. Coeficientes de correlación

?cor.test

MicroYprot<-read.table("MicroYProtprom.txt",h=T)
names(MicroYprot)
attach(MicroYprot)
x<-promMicro
y<-promProt
plot(x,y,xlab="cantidad de mRNA",ylab="cantidad de proteína", col="dark green")
cor.test(x, y, method = "pearson", alternative = "greater")
cor.test(x, y, method = "spearm", alternative = "g")
cor.test(x, y, method = "kendall", alternative = "g")
cor.test(x,y)$estimate

5. Matrices de covarianza y correlación


t3var2<-t3var[,-1]
dim(t3var2)
#[1] 66 2
C1<-cor(t3var2)
C1
C1<-cor(t3var2, method="spearman")#matriz de correlación
C2<-var(t3var2)#matriz de varianzas-covararianzas

# peso talla
#peso 1.0000000 0.7896996
#talla 0.7896996 1.0000000

6. Pruebas de hipótesis

?t.test
t.test(1 :10)#intervalo de confianza
t.test(1:10,mu=5)
t.test(1:10,mu=5,alternative = "greater")
t.test(1:10,y<-c(7:20)) # P = .00001855

Welch Two Sample t-test

data: 1:10 and c(7:20)


t = -5.435, df = 21.98, p-value = 1.855e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-11.053 -4.947
sample estimates:
mean of x mean of y
5.5 13.5

7
Sesiones en R

Para quitar la corrección de los grados de libertad de Welch (para el caso de varianzas
no iguales):
t.test(1:10,y<-c(7:20), var.equal=TRUE)
Two Sample t-test

data: 1:10 and y <- c(7:20)


t = -5.1473, df = 22, p-value = 3.691e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-11.223245 -4.776755
sample estimates:
mean of x mean of y
5.5 13.5

t.test(1:10,y<-c(7:20, 200)) # P = .1245 -- NOT significant anymore

combi<-c(1:10,y)
combi
[1] 1 2 3 4 5 6 7 8 9
[10] 10 7 8 9 10 11 12 13 14
[19] 15 16 17 18 19 20
cat<-rep(c(1,2),c(10,15))

cat
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2
[15] 2 2 2 2 2 2 2 2 2 2
length(combi)
[1] 24
length(cat)
[1] 24
bartlett.test(combi,as.factor(cat))
by(combi,cat,shapiro.test)

wilcox.test(1:10,y<-c(7:20, 200))

Welch Two Sample t-test

data: 1:10 and c(7:20, 200)


t = -1.633, df = 14.16, p-value = 0.1245
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-47.243 6.376
sample estimates:
mean of x mean of y
5.50 25.93

8
Sesiones en R

Una empresa envió a una parte de sus empleados a realizar un curso en Cali y a otros en
Bogotá. El curso en Bogotá cuesta más y los directivos quieren saber si este esfuerzo vale la
pena. Para comprobarlo realizaron un examen a los empleados. Las calificaciones fueron las
siguientes:

Cali Bogota
98 98
99 96
99 96
97 95
90 85
85 80
84 79
82 78
81 75
79 73
68 72
61 69
60 67
56 62
60
t<-read.table("testTnopareado.txt", h=T)
t.test(t$Cali,t$Bogota,paired=F,alternative="two.sided")

Prueba de chi2

Chi- cuadrado para probar independencia entre hombres (M) y mujeres (F) que pasan
(R) o no pasan (E) un examen.

sexe <- as.factor(rep(c("F", "M"), c(10, 10)))


examen <- as.factor(c("R", "R", "R", "R", "E", "E", "E","E", "E", "E", "R", "R", "R", "R",
"R", "R", "E", "E", "E", "E"))
table(sexe,examen)
# examen

9
Sesiones en R

#sexe E R
# F 6 4
# M 4 6

chisq.test(sexe, examen)
chisq.test(sexe, examen, correct = FALSE)

x <- c(A = 20, B = 15, C = 25)


chisq.test(x)
chisq.test(as.table(x)) # the same
x <- c(89,37,30,28,2)
p <- c(40,20,20,15,5)

Test exacto de Fisher (ejemplos de la ayuda de fisher.test)


## Agresti (1990, p. 61f; 2002, p. 91) Fisher's Tea Drinker
## A British woman claimed to be able to distinguish whether milk or
## tea was added to the cup first. To test, she was given 8 cups of
## tea, in four of which milk was added first. The null hypothesis
## is that there is no association between the true order of pouring
## and the woman's guess, the alternative that there is a positive
## association.
TeaTasting <-
matrix(c(3, 1, 1, 3),
nrow = 2,
dimnames = list(Guess = c("Milk", "Tea"),
Truth = c("Milk", "Tea")))
fisher.test(TeaTasting, alternative = "greater")
## => p=0.2429, association could not be established

Wilcoxon
?wilcox.test
x <- c(1.83, 0.50, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.30)
y <- c(0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29)
wilcox.test(x, y, paired = TRUE, alternative = "greater")

Determinación del tamaño de muestra con R


En esta librería se calcula el poder o el tamaño de muestra dependiendo de los parámetros que se
indiquen:
library(pwr)
pwr.t.test(d=0.2,n=60,sig.level=0.10,type="one.sample",alternative="two.sided")

One-sample t test power calculation


n = 60
d = 0.2
sig.level = 0.1
power = 0.4555818
alternative = two.sided

pwr.t.test(d=0.2,power=0.90,sig.level=0.10,type="one.sample",alternative="two.sided")

One-sample t test power calculation


n = 215.4542
d = 0.2

10
Sesiones en R

sig.level = 0.1
power = 0.9
alternative = two.sided

pwr.t.test(d=0.2,power=0.80,sig.level=0.010,type="one.sample",alternative="two.sided")

One-sample t test power calculation


n = 295.2973
d = 0.2
sig.level = 0.01
power = 0.8
alternative = two.sided

power.anova.test(groups = 3, n = NULL, between.var = 43715, within.var = 102030, sig.level = 0.05,


power = 0.8)

7. Distribuciones de probabilidad y aplicaciones


dnorm(x, mean = 0, sd = 1, log = FALSE)
pnorm(2)
[1] 0.9772499
en tabla z=2: 1-0.023
dpois(2,2.4)
[1] 0.2612677

generar datos de una distribución normal


x1 <- rnorm(n = 15, mean = 0, sd = 1)
x1 <- rnorm(n = 60, mean = 0, sd = 1)

Los valores de z dando probabilidades


qnorm(0.025)
pnorm(0.025)
qnorm(0.975)
qnorm(0.975)
qt(0.025, 9)
qt(0.975, 9)

Tamaño de futbolistas de un equipo 171 media = 177cm y varianza de s2 =


31.98.
qnorm(0.025, 70)
[1] -1.994437
qnorm(0.975, 70)
[1] 1.994437

Intervalo de confianza
177 + qnorm(0.025, 70) * sqrt(31.98/70)
[1] 175.6519
y para un límite superior
177 + qnorm(0.975, 70) * sqrt(31.98/70)

Graficar las distribuciones de probabilidad


x <- seq(-20,20,by=.5)
y <- dchisq(x,df=10)
plot(x,y)
yn <- dnorm(x,mean = 0, sd = 1, log = FALSE)

11
Sesiones en R

plot(x,yn)
yt <- dt(x,3)
plot(x,yt)

8. Regresión lineal
MicroYprot<-read.table("MicroYProtprom.txt",h=T)
summary(MicroYprot)#Hay valores faltantes?
attach(MicroYprot)
lmp<-lm(promProt[1:204]~promMicro[1:204])
summary(lmp)
lmp<-lm(promProt~promMicro)
summary(lmp)# Hay diferencia?

#Sirve para predecir los valores faltantes?

protpred<-2.2936*promMicro[205]-1.0195
#cantidad de proteína predicha por el modelo lineal
protpred

Verificación de supuestos y calidad de la regresión

#normalidad de los residuales


plot(lmp) #qqplot
shapiro.test(lmp$residuals)

#independencia
library(lmtest)
dwtest(promProt~promMicro)

#homoscedasticidad de y a lo largo de x
plot(lmp) #primer gráfico

Breusch-Pagan test
Prueba si la varianza estimada de los residuales es independiente de la variable dependiente
(X)
library(lmtest)
#?bptest
bptest(promProt~promMicro)

#Coeficiente de determinación y H0:b=0 lo reporta el summary

x<-c(36.92,38.82,40.73,38.82,37.87,33.11,35.02,36.92,35.97,36.92)
y<-c(41,40,38,38,32,33,38,30,34,37)
lmp<-lm(x~y)
cor.test(x,y)
plot(x,y)
abline(lmp)

12
Sesiones en R

plot(x,y,xlim=c(0,40),ylim=c(0,50))
abline(lmp)

## Annette Dobson (1990) "An Introduction to Generalized Linear Models".


## Page 9: Plant Weight Data.
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)

Regresion lineal múltiple usando el cálculo matricial de beta


RLM<-read.table("RegrLinealMultiple.txt",h=T)
RLM
X<-RLM[1:13,3:5]
X<-as.matrix(X)
y<-RLM[1:13,1]
t(X)
#Hay que instalar la librería car
library(car)
b<-solve((t(X))%*%X)%*%(t(X))%*%y

lmR<-lm(y~X)
lmR
summary(lmR)
durbinWatsonTest(lmR)

9. Análisis de Varianza
data("InsectSprays")
Tinsect<-InsectSprays[1:24,]
plot(count ~ spray, data = Tinsect)
bartlett.test(count ~ spray, data = Tinsect)
plot(count ~ spray, data = InsectSprays)
bartlett.test(count ~ spray, data = InsectSprays)

library(car)
leveneTest(count ~ spray, data=InsectSprays)
leveneTest(count ~ spray, data=InsectSprays,center=mean, trim=0.1)

Ej<-read.table("EjANOVA.txt",h=T)
EjB<-read.table("EjBloques.txt",h=T)

13
Sesiones en R

14
Sesiones en R

Genero Dosis Vigilancia


F a 30

15
Sesiones en R

F a 38
F a 35
M a 41
M a 27
M a 24
F b 32
F b 26
F b 31
F b 29
M b 27
M b 35
M b 21
M b 25
F c 17
F c 21
M c 20
M c 19

dosis<-read.table("dosis.txt",h=T)
attach(dosis)
Supuestos

bartlett.test(Vigilancia~Dosis)

shapiro.test(Vigilancia[1:6])
shapiro.test(Vigilancia[7:14])
shapiro.test(Vigilancia[15:18])
En un comando usando los índices
by(Vigilancia, Dosis, shapiro.test)

Para hacer la prueba de normalidad de Kolmogorov-Smirnov


ks.test(Vigilancia[1:6], "pnorm", mean(Vigilancia[1:6]),sd(Vigilancia[1:6]))

ANOVA
aov.dosis<- aov(Vigilancia~Dosis,data=dosis)
summary(aov.dosis)

Pruebas múltiples
pairwise.t.test(Vigilancia,Dosis)
pairwise.t.test(Vigilancia,Dosis,p.adjust="bonf")
aov.dosis<- aov(Vigilancia~Genero+Dosis,data=dosis)
aov.dosis<- aov(Vigilancia~Genero+Dosis+Genero*Dosis,data=dosis)
TukeyHSD(aov.dosis, "Dosis", ordered = TRUE)

summary(fm1 <- aov(breaks ~ wool + tension, data = warpbreaks))


TukeyHSD(fm1, "tension", ordered = TRUE)
plot(TukeyHSD(fm1, "tension"))
pwr.anova.test(f=0.8,k=3,n=4,sig.level=0.05)

Probar la interacción
interaction.plot(Genero,Dosis,Vigilancia)

16
Sesiones en R

aov.dosis<- aov(Vigilancia~Dosis*Genero,data=dosis)
summary(aov.dosis)

Otro ejemplo de ANOVA de dos factores:

crois<-read.table("crois2.txt",h=T)
attach(crois)
names(crois)
anov_crois2<-aov(DO.MCD ~souche,data=crois)
summary(anov_crois2)

Si se quiere saber si hay diferencias entre repeticiones :


anov_crois2c<-lm(DO.MCD~rep,data=crois)

Usar función Anova del paquete car para diseño no balanceados

Si no se cumplen los supuestos hay que hacer una prueba de Kruskal-Wallis, está diseñada
solamente para un factor:
kruskal.test(DOMCD~souche,data=crois)

Diseño de experimentos
# factorial 3 x 2 with 3 blocks
library(agricolae)
trt<-c(3,2) # factorial 3x2
outdesign <-design.ab(trt, r=3, serie=2)

# factorial 2 x 2 x 2 with 5 replications in completely randomized design.


trt<-c(2,2,2)
outdesign<-design.ab(trt, r=5, serie=2,design="crd") #complete randomized design

# factorial 3 x 3 in latin square design.


trt <-c(3,3)
outdesign<-design.ab(trt, serie=2, design="lsd") #latin square design

#bloques incompletos
# 4 treatments and k=3 size block
trt<-c("A","B","C","D")
k<-3
outdesign<-design.bib(trt,k,serie=2,seed =41) # seed = 41 print(outdesign$parameters)
#Marsaglia's famous Super-Duper method to generate random numbers as default
book<-outdesign$book
plots <-as.numeric(book[,1])
matrix(plots,byrow=TRUE,ncol=k)
print(outdesign$sketch)

10.Análisis de Covarianza. ANCOVA


Tomado de An R Companion for the Handbook of Biological Statistics
Salvatore S. Mangiafico

17
Sesiones en R

https://rcompanion.org/rcompanion/e_04.html

Input = ("
Species Temp Pulse
ex 20.8 67.9
ex 20.8 65.1
ex 24 77.3
ex 24 78.7
ex 24 79.4
ex 24 80.4
ex 26.2 85.8
ex 26.2 86.6
ex 26.2 87.5
ex 26.2 89.1
ex 28.4 98.6
ex 29 100.8
ex 30.4 99.3
ex 30.4 101.7
niv 17.2 44.3
niv 18.3 47.2
niv 18.3 47.6
niv 18.3 49.6
niv 18.9 50.3
niv 18.9 51.8
niv 20.4 60
niv 21 58.5
niv 21 58.9
niv 22.1 60.7
niv 23.5 69.8
niv 24.2 70.9
niv 25.9 76.2
niv 26.5 76.1
niv 26.5 77
niv 26.5 77.7
niv 28.6 84.7
")

Data = read.table(textConnection(Input),header=TRUE)
class(Data)
dim(Data)
plot(x = Data$Temp,
y = Data$Pulse,
col = Data$Species,
pch = 16,
xlab = "Temperature",
ylab = "Pulse")

legend('bottomright',
legend = levels(Data$Species),
col = 1:2,

18
Sesiones en R

cex = 1,
pch = 16)
library(car)
options(contrasts = c("contr.treatment", "contr.poly"))

### These are the default contrasts in R

model.1 = lm (Pulse ~ Temp + Species + Temp:Species,


data = Data)

library(car)

anova(model.1)
summary(aov(Pulse ~ Species, data = Data))

#sin la librería car


res<-aov(model.1)
summary(res)

model.2 = lm (Pulse ~ Temp + Species,data = Data)


summary(model.2)

I.nought = -7.21091
I1 = I.nought + 0
I2 = I.nought + -10.06529
B = 3.60275

plot(x = Data$Temp,
y = Data$Pulse,
col = Data$Species,
pch = 16,
xlab = "Temperature",
ylab = "Pulse")

legend('bottomright',
legend = levels(Data$Species),
col = 1:2,
cex = 1,
pch = 16)

abline(I1, B,
lty=1, lwd=2, col = 1)

abline(I2, B,
lty=1, lwd=2, col = 2)

#Ejemplo ANCOVA
Kgini<-rnorm(20,60,12)
Kgdisminuidos<-(Kgini/10)-abs(rnorm(20,1,2))
cor(Kgini,Kgdisminuidos)

19
Sesiones en R

ejercicio<-rep(c("A","B","C"),c(7,7,6))
results = lm(Kgdisminuidos ~ Kgini+ ejercicio)
anova(results)
results = lm(Kgdisminuidos ~ ejercicio)
anova(results)
results = lm(Kgdisminuidos ~ Kgini+ ejercicio+Kgini:ejercicio)

11.MANOVA

#MANOVA
my_data <- iris
sepl <- iris$Sepal.Length
petl <- iris$Petal.Length
sepw<-iris$Petal.Width
res.man <- manova(cbind(Sepal.Length, Petal.Length) ~ Species, data = iris)
summary(res.man)

#boxplot varios en uno con ggplot2


library(ggplot2)
library(gridExtra)
ggplot(iris) +
+ geom_boxplot(aes(x = Sepal.Length, y = Sepal.Width, fill = Species), alpha = 0.3) +
+

plot.x <- ggplot(iris) + geom_boxplot(aes(Species, Sepal.Length))


plot.y <- ggplot(iris) + geom_boxplot(aes(Species, Sepal.Width))
grid.arrange(plot.x, plot.y, ncol=2)

## Fake a 2nd response variable


npk2 <- within(npk, foo <- rnorm(24))
( npk2.aov <- manova(cbind(yield, foo) ~ block + N*P*K, npk2) )
summary(npk2.aov)
npk2.aov <- manova(cbind(yield, foo) ~ N*P*K, npk2)
summary(npk2.aov)

12. Datos atípicos

t3var<-read.table("t3var.txt",h=T)
attach(t3var)
boxplot(talla)
boxplot.stats(talla)
ind<-which(talla==200)
t3var[ind,]
ind<-which(talla>=189)
length(ind)
t3var[ind,]

#variar el rango intercuartílico


boxplot(talla,range=3)

20
Sesiones en R

plot(lm(talla ~ 1))

data("airquality")
ozone <- airquality$Ozone
temp <- airquality$Temp
# gererate normal distribution with same mean and sd
ozone_norm <- rnorm(200,mean=mean(ozone, na.rm=TRUE), sd=sd(ozone,
na.rm=TRUE))
temp_norm <- rnorm(200,mean=mean(temp, na.rm=TRUE), sd=sd(temp,
na.rm=TRUE))
boxplot(ozone, ozone_norm, temp, temp_norm,
main = "Multiple boxplots for comparision",
at = c(1,2,4,5),
names = c("ozone", "normal", "temp", "normal"),
las = 2,
col = c("orange","red"),
border = "brown",
horizontal = TRUE,
notch = TRUE )

13.Autocorrelación
?acf
acf(lh, type = "covariance")
acf(lh)

Otras pruebas en librerías:


dwtest {lmtest}
ACF {nlme}
x <- rep(c(1, -1), 50)
y1 <- 1 + x + rnorm(100)
library(lmtest)
dwtest(y1 ~ x)

14. INTRODUCCIÓN A LA PROGRAMACIÓN

Función : así se crean las funciones en R que hemos usado hasta a hora. Es posible
crear nuevas funciones
icmoyenne <- function(emoy, evar, eeff, nivconf) {
int <- (1 - nivconf)/2
binf <- emoy + qnorm(int, eeff) * sqrt(evar/eeff)
bsup <- emoy + qnorm(1 - int, eeff) * sqrt(evar/eeff)
bornes <- c(binf, bsup)

21
Sesiones en R

return(bornes)
}
icmoyenne(177, 31.98, 70, 0.95)

ex8 <- c(103,101,102)


order(ex8) #orden en que deben tomarse para organizarlas en orden
rank(ex8) #los rangos

BUCLES
x12<- c(5,4,3,2)
for(i in 1:3){x12[i] <- x12[i] + 1}
x12
#[1] 6 5 4 2
x12 <- x12 + 1
for(i in 1:length(x12)){x12[i] <- x12[i] + 1}
for(i in 1:length(x12)){if(x12[i] < 4){x12[i] <- x12[i] + 1}}

if ( x > 3) { resultado <- "x es mayor de 3"} # Efectúa la comparación.

FUNCIÓN SIMPLE
x<-5
f <- function(x) {
x^2 + x + 1
}
f(x)

LA FUNCIÓN APPLY
x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
dimnames(x)[[1]] <- letters[1:8]
?apply
col.sums <- apply(x, 2, sum)
col.sums <- apply(x, 1, sum)
lapply(x, mean)
sapply(x, mean)

22

También podría gustarte