Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SesionesRNotasdeClase Abril2019
SesionesRNotasdeClase Abril2019
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.
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
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.
”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()
If you have not received a copy of this file, you can obtain one
at http://www.R-project.org/licenses/.
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.
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
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))
write.table(t3var, "toto.csv")
read.table("toto.csv")
rm(provi)
ls()
[1] "t3var" "w" "x" "y"
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)
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
# 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
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
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))
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.
9
Sesiones en R
#sexe E R
# F 6 4
# M 4 6
chisq.test(sexe, examen)
chisq.test(sexe, examen, correct = FALSE)
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")
pwr.t.test(d=0.2,power=0.90,sig.level=0.10,type="one.sample",alternative="two.sided")
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")
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)
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?
protpred<-2.2936*promMicro[205]-1.0195
#cantidad de proteína predicha por el modelo lineal
protpred
#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)
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)
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
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)
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)
Probar la interacción
interaction.plot(Genero,Dosis,Vigilancia)
16
Sesiones en R
aov.dosis<- aov(Vigilancia~Dosis*Genero,data=dosis)
summary(aov.dosis)
crois<-read.table("crois2.txt",h=T)
attach(crois)
names(crois)
anov_crois2<-aov(DO.MCD ~souche,data=crois)
summary(anov_crois2)
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)
#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)
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"))
library(car)
anova(model.1)
summary(aov(Pulse ~ Species, data = Data))
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)
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,]
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)
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)
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}}
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