You are on page 1of 11

Prctica 4

Dades: exploraci
4.1 El workspace. Llegir i guardar.
Lentorn de treball (workspace) cont tots els objectes creats durant la sessi. Es pot guardar mitjanant Save en format .Rdata i carregar mitjanant el Load del men. Si no disposeu de men, podeu investigar la funci save.image. s recomanable tenir un espai de treball diferent per a cada tasca, per no barrejar objectes del mateix nom. No s necessari guardar lentorn de treball, se solen guardar noms el codi (scripts) i els resultats (taules, grques, models). s til guardar-lo quan es vol disposar de les llibreries (ja carregades) i els objectes que consumeixen temps de computaci. 15 Crear i llegir (source) un script Veurem ara com executar comandes des dun script, sense obrir-lo, noms cridant-lo. 1. Creem un script. Fem un exemple de funci senzilla que simula n tirades dun dau i en guarda alguns resultats
dau<-function(n){mostra.dau<-sample(1:6,size=n,replace=TRUE) list(mitjana= mean(mostra.dau), desvtip= sd(mostra.dau))}

Nota: La comanda sample genera mostres de poblacions nites (de 1 a 6, pel dau), amb o sense reposici i amb llei equiprobable (uniforme discreta). La funci dau que hem creat depn del parmetre n (nombre de tirades del dau) i com a resultat, en forma de llista, dona la mitjana i la desviaci tpica dels valors mostrals. El resultat duna funci s lltim objecte, que pot ser una llista de diversos elements. 2. Guardem el script com dau.R, al directori que volem C:\\Users\\farre\\Desktop\\R2012 3. El cridem, segons el directori on estigui i apliquem la funci, donant un valor al parmetre 17

4.2. CREAR, LLEGIR, IMPORTAR I EXPORTAR

PRCTICA 4. DADES: EXPLORACI

source("C:\\Users\\farre\\Desktop\\R2012\\dau.R") dau(100)

16 Guardar resultats en un txer de text ( sink i write ) Els resultats de les comandes entre "sink"no es veuen per pantalla, passen directament al txer
sink("C:\\Users\\farre\\Desktop\\R2012\\resultats1.txt") # Inicia el trasps v<-runif(100);v sink() # Acaba el trasps

Nota: Ho guarda al directori de treball, si no sespecica cap altra ruta. Tamb es pot fer amb la funci "write"
v<-runif(100) write(v, "resultats2.txt")

4.2 Crear, llegir, importar i exportar


17 Crear dades Recordem que es poden crear vectors, matrius, txers, etc. de dades directament en lnia de comanda, mitjanant vector, matrix, list, data.frame, etc., per exemple, amb la comanda data.frame
L3 <- LETTERS[1:3] (d<- data.frame(cbind(x=1, y=1:10), fac=sample(L3, 10, replace=TRUE)))

Nota: si escrivim una assignaci entre parntesi, la veiem per pantalla. Recordeu que cbind uneix matrius per les i que sadapta (si pot) quan tenen diferent longitud.

18 Dades de R Tamb recordem com carregar dades dels paquets de R data()


data() ?attitude data(attitude) attitude names(attitude) # # # # # llistat de fitxers de les llibreries carregades descripci del fitxer carrega el fitxer a lespai de treball mostra el fitxer carregat noms de les variables

Per carregar al workspace arxius de dades daltres paquets de R


data("geyser",package="MASS") # carrega "geyser" del paquet MASS data(package=.packages(all.available=TRUE)) # fitxers per paquets

18

PRCTICA 4. DADES: EXPLORACI

4.2. CREAR, LLEGIR, IMPORTAR I EXPORTAR

19 Importar i exportar txers .txt ( read.table i write.table) Amb un editor de text, creem els txersc dades2.txt i dades3.txt (els teniu a la carpeta) i, per importar-los, fem
read.table("dades2.txt") read.table("dades3.txt",header=T) # noms a la primera fila

Nota: recordeu que els noms es poden introduir a posteriori amb les comandes names o col.names. Demaneu ajuda de la comanda read.table per altres arguments de la funci i per analitzar comandes similars, com ara read.csv . Per exportar (primer creem lobjecte exportable) i desprs fem write.table, en veiem algunes opcions
v<- read.table("dades3.txt",header=T) write.table(v,"dades4.txt") write.table(v,"dades5.txt",quote=FALSE) write.table(v,"dades7.txt",quote=F,row.names=F)

20 Importar txers dExcel Obre el txer ExerPr1Enq.xlsx al full de dades de Id, Edat, Alt, Pes, Sexe, Tabac i Oci 1) Des de lExcel, guarda el full en format text separat per tabulacions i anomenal ExerPr1Enq.txt 2) Desal al directori de treball i fes
enq<-read.table("ExerPr1Enq.txt",header=T,dec=","); enq # al fitxer excel, susava la coma \RInput{,} decimal # per a ms seguretat, escriviu la ruta completa !

Si hi ha valors perduts, com al txer notes.xlsx , s millor fer 1) Des de lExcel, guarda el full com a text separat per comas i anomenal notes.csv 2) Desal al directori de treball i fes
not<-read.csv2("notes.csv",header=T,na.strings=c(NA,"nc","")); not # per a ms seguretat, escriviu la ruta completa ! pie(table(not$qualf))

21 Importar txers .sav de lSPSS LSPSS s un paquet estadstic comercial, molt utilitzat en cincies socials. Per llegir txers de lSPSS (.sav) podem fer
library(foreign) # llibreria necessria pesedat<-read.spss("pesedat.sav",to.data.frame=T) # o ruta completa summary(pesedat)

Nota: La mateixa llibreria foreign permet importar txers creats amb altres paquets comercials, SAS, etc. Tamb es poden exportar txers. 19

4.3. FER I GUARDAR GRFIQUES

PRCTICA 4. DADES: EXPLORACI

4.3 Fer i guardar grques


Sanomenen dalt nivell aquelles generen que creen una grca nova, com ara plot. Sn de baix nivell aquelles comandes que afegeixen elements a una grc, com ara lines. Podeu consultar la pag. 62 del manual An Introduction to R. 22 Comandes grques dalt nivell La comanda plot fa diferents grques, adaptant-se al tipus dobjectes al qual saplica, direm que s genrica: Plot dun vector
dades1<- c(1,2.4,5,2,3); dades1 # definim un vector names(dades1)<-letters[1:5] # plot dun vector numric: srie de valors plot(dades1) plot(dades1, type="b" ) # tipus de grfica: "p" punts, "l" lnies, # "b" punts i lnies, # "s" esglaonat, "h" barres verticals, etc # "n" no dibuixa els punts, prepara les dimensions dels eixos ## un exemple dus de "n" plot(dades1, type="n") text(dades1, labels=names(dades1))

Plot duna funci


plot(sin,-pi,pi) # plot duna funci (valors entre dos lmits)

Plot dun parell de vectors (diagrama de dispersi)


x<-1:10; y<-x^2 plot(x,y) # definim dos vectors digual longitud # plot fa el diagrama de dispersi (scatterplot)

Plot dun factor (barres)


f<-c(rep(c("a","b"),rep(5,2)), rep("c",2)) f<-factor(f);f # factor plot(f) # plot dun factor: diagrama de barres

Plot dun factor i un vector numric (boxplot)


x<-1:12 plot(f,x) # plot dun factor i un vector: boxplot comparatiu

Altres comandes grques dalt nivell sn barplot, boxplot, pie, etc,. ments de la funci plot (consulteu lajuda per a veuren ms) 20

Mostrem alguns argu-

PRCTICA 4. DADES: EXPLORACI

4.3. FER I GUARDAR GRFIQUES

plot(dades1,type="s",ylab="nom eix y",xlab="x",main="TTOL",sub= "sbtit") plot(dades1,xlim=c(0,20),ylim=c(0,10),pch=18) Hmisc::show.pch() # mostra de smbols

23 Afegeixen, a una grca oberta, punts, lnies, eixos, etiquetes, ombres, etc., i crear grques prpies, no estndard, que es van afegint als bsics. Ho veiem amb exemples
#primer el dibuix dalt nivell plot(0:10,0:10,axes=F,xlab="",ylab="") # punts sense eixos ni nom deix # afegim elements ... title(main="fals!!!", sub="Van Gogh") # ttol i subttol points(runif(7,0,10),runif(7,0,10),cex=3,col="red") # punts aleatoris, ## cex mida punt text(1,7, "qu bonic! ", col= rainbow(2)) # posici del text abline(h=2,lty=1) # h horitzontal, ## lty tipus de lnia abline(v=3,lty=2) # v vertical abline(a=2,b=1,col="red") # intercept i pendent lines(c(1,3,5),c(10,2,0)) # abscises, ordenades polygon(c(0,1,2),c(7,9,8), col="yellow") # polgon fix polygon(runif(4,1,7),runif(4,1,7), col="green") # polgon aleatori legend(8,8, lty=c(1,2), legend=c("a","b") ) # llegenda

24 Afegir frmules a una grca (expression)


x<-0:5 y<-choose(5,x)*0.3^x*0.7^(5-x); y plot(x,y) text(1,0.05,expression(paste(bgroup("(",atop(5, x),")"),.3^x,.7^{5-x}))) plot(x,y) # ara posarem lexpressi al ttol title(main=expression(paste(bgroup("(",atop(5, x),")"),.3^x,.7^{5-x})))

Consulteu ajudes de

help(plotmath)

example(plotmath)

demo(plotmath)

25 Ms duna grca en el dispositiu ( par)


par(mfrow=c(1,2)) plot(x,y) plot(x,y) par(mfrow=c(1,1)) # prepara el dispositiu grfic ## 1 fila i 2 cols

# torna als parmetres estndard

26 Guardar grques Cada grca es pot guardar en format pdf, entre altres (png, eps, etc.) 21

4.4. EXPLORACI INICIAL

PRCTICA 4. DADES: EXPLORACI

pdf("nomquejovull.pdf") # obre el buidat en pdf # ruta completa ? plot(runif(10,0,10),runif(10,0,10)); plot(c(0,1,2),c(1,1,1)) dev.off() # tanca el buidat en pdf

4.4 Exploraci inicial


Utilitzem el txer "C02". Fem-li una ullada
?CO2 CO2 is.data.frame(CO2) head(CO2); tail(CO2) names(CO2)

No adjuntem larxiu a lespai de treball, hi treballem remotament. Nota: adjuntant-lo simplicarem lescriptura per ho fem aix, per habituar-nos a ls del $ Explorem el tipus de variables i fem un primer resum
class(CO2$Treatment) class(CO2$Type) class(CO2$Plant) class(CO2$conc) class(CO2$uptake) # resum rpid summary(CO2)

Nota: Tracta diferent les variables, segons el tipus (taula de freqncies pels factors, estadstics de les variables quantitatives). 27 Descriptiva dun factor (v. categrica) Recomptes, pels factors (ho mostrem per a un dells)
fac<-CO2$Treatment fa<-table(fac); fa fr<- prop.table(fa); fr pc<- round(100*fr); pc pc.ac<-cumsum(pc); pc.ac # # # # # freq. absoluta freq. relativa percentatges percent. acumulats han de ser factors ordenats !

Fem sectors o barres dels factors, recordem que sapliquen a la taula de freqncies, que poden ser absolutes, relatives o percentatges
# sectors pie(table(CO2$Treatment)) pie(fa) # ms rpid ... etiq<-levels(CO2$Treatment) etiq<-paste(etiq,pc)

22

PRCTICA 4. DADES: EXPLORACI

4.4. EXPLORACI INICIAL

etiq<-paste(etiq,"%",sep="") pie(fa,labels=etiq) pie(fa,col=c("grey95","grey70")) # nivell de gris: de negre a blanc # barres barplot(pc,col=c("grey95","grey70"))

Consulteu Quick-R, per exemple, per veure grques ms lludes: http://www.statmethods.net/ 28 Encreuament de 2 factors
taula<-table(CO2$Treatment,CO2$Type) taula # taula de contingncia de freq. absolutes taula.r<-prop.table(taula) taula.r # freq. relatives al total = llei conjunta # recomptes marginals margin.table(taula,1) margin.table(taula,2)

# llei marg. de la variable fila # llei marg. de la variable columna

# lleis condicionades, per files i per columnes taula.f<-prop.table(taula,1); taula.f taula.c<-prop.table(taula,2); taula.c

En aquest exemple, tots els recomptes sn idntics. Es tracta dun disseny experimental completament equilibrat (balancejat), en el qual cada combinaci de nivells dels factors t el mateix nombre de casos. Totes les grques seran rectangulars. No existeix cap relaci entre les variables.
barplot(taula, beside=T) barplot(taula.f) barplot(taula.c) ?? barplot(t(taula.f)) # la funci "t" transposa

Dues (o ms grques juntes)


par(mfrow=c(2,1)) barplot(taula.f) barplot(t(taula.f)) par(mfrow=c(1,1))

Quan la mostra no ha estat dissenyada, s que t inters analitzar les relacions entre els factors. Ho vam veure amb les dades de lenquesta analitzades amb Excel. 29 Descriptiva duna variable numrica Alguns estadstics
x<-CO2$conc mean(x); median(x) # i altres

23

4.4. EXPLORACI INICIAL

PRCTICA 4. DADES: EXPLORACI

quantile(x) # 3 quartils, mxim i mnim quantile(x,0.975) # per un valor concret quantile(x,seq(0,1,0.1)) # els 9 "decils", el mxim i el mnim #### Compte amb els valors perduts: cal dir que no els utilitzi X<-c(x,NA) # nova variable igual a x ms un valor perdut mean(X) # NA ! mean(X,na.rm=T) # traiem els valors perduts: na.rm=T #### Resum dels descriptius ms importants: summary(X) # no considera els valors perduts, per defecte

Histograma, diagrama de caixa, etc.,


hist(x) hist(x,breaks=c(min(x),250,500,750,max(x))) boxplot(x) boxplot(exp(x)) # ?? hist(exp(x)) plot(x) # ??

Funci de distribuci emprica duna variable numrica


n<-length(x); y<-sort(x) frel<-(1:n)/n plot(y,frel,type="s") # compta les dades # ordena # funci de distribuci emprica

Canviem a la variable uptake


x<-CO2$uptake n<-length(x); y<-sort(x) frel<-(1:n)/n plot(y,frel,type="s") # compta les dades # ordena # funci de distribuci emprica de les dades

Comparem amb la llei normal


# Ajust grfic a la normal qqplot qqnorm(x); qqline(x) # Qu es veu quan les dades sn normals. x<-rnorm(100,100,10) qqnorm(x); qqline(x)

30 Relaci entre dues variables numriques Treballem amb un txer, UN de la llibreria car, amb 2 variables: relaci entre mortalitat infantil i PIB. Contingut del txer
require(car) ?UN head(UN); length(UN)

24

PRCTICA 4. DADES: EXPLORACI


Diagrama de dispersi. Funcions plot i scatterplot

4.4. EXPLORACI INICIAL

La funci scatterplot requereix installar i carregar la llibreria car


plot(UN$gdp,UN$infant.mortality) require(car) ?scatterplot scatterplot(infant.mortality ~ gdp, data=UN) # escala logartmica a leix x scatterplot(infant.mortality ~ gdp, log="x", data=UN) # escala logartmica als dos eixos scatterplot(infant.mortality ~ gdp, log="xy", data=UN) # equival a scatterplot(log(infant.mortality) ~ log(gdp), data=UN, id.n=5) # identifica alguns punts (5) scatterplot(infant.mortality ~ gdp, log="xy", data=UN, id.n=5) # grfica interactiva ... si funciona ... scatterplot(infant.mortality ~ gdp, id.method="identify", data=UN)

Nota: scatterplot afegeix, per defecte, la recta de regressi i la corba de regressi loess [corba de regressi localment ajustada, on a cada punt es deneix una ajust local, amb pesos inversament proporcionals a la distncia al punt]. Tamb mostra les bandes de conana de la corba loess. Observeu que la grca loglog indica encara una tendncia no lineal. Model lineal ( lm ) Comparem els dos models lineals: el model de y sobre x i el model de log y sobre log x. Quin esperem que sigui millor? Model 1
x<-UN$gdp y<-UN$infant.mortality # lm (linear model): crea un objecte, li diem "model1" model1<-lm(y~x) names(model1) # veiem els noms dels elements del model summary(model1) # \% de variabilitat explicada? coef1<-model1$coefficients # equivalent a cridar model1[1] coef1 res1<-model1$residuals plot(res1~x) ## error, perqu hi ha valors perduts, fem: plot(res1~x[!is.na(x)&!is.na(y)])

El model1 s molt dolent, lajust s baix i la pauta de residus clarament no lineal. Model 2
model2<-lm(log(y)~log(x)) summary(model2) # \% de variabilitat explicada? coef2<-model2$coefficients res2<-model2$residuals plot(res2~x) ## error, perqu hi ha valors perduts, fem: plot(res2~x[!is.na(x)&!is.na(y)])

25

4.4. EXPLORACI INICIAL

PRCTICA 4. DADES: EXPLORACI

El model2 s millor, lajust s ms elevat i la pauta de residus tamb ha millorat per mostra una pauta que indica varincia decreixent. Tot aix sanalitza Models Lineals. Prediccions Amb aquest segon model podria tenir sentit fer prediccions Ampliem el data frame amb 2 columnes noves: prediccions i residus Denim un nou data frame anomenat df.model
df.model<-data.frame(pib=x[!is.na(x)&!is.na(y)], mi=y[!is.na(x)&!is.na(y)], pred=model2$fitted.values,res=model2$residuals) df.model names(df.model) plot(df.model$pred,df.model$mi) # no sn unes bones prediccions !!

31 Relaci entre una variable numrica i un factor Tornem al txer CO2. Boxplots. Resums de descriptius ( tapply ) Boxplot bsic
f<-CO2$Treatment y<-CO2$uptake plot(f,y) boxplot(y~f) # idem

Taula resum de les mitjanes denides pels nivells del factor


tapply(y,f,mean)

Taula resum de diversos descriptius


n<-tapply(y,f,length) xbar<-tapply(y,f,mean) s<-tapply(y,f,sd) max<-tapply(y,f,max) min<-tapply(y,f,min) rang<-max-min cbind(n,xbar,s,max,min,rang) # require(xtable) xtable(cbind(n,xbar,s,max,min,rang))

Nota: recordeu que el paquet xtable ho prepara per al LaTeX. 32 Ms de dues variables ( coplot ) Intentem visualitzar els efectes dun o ms factors en la relaci entre dues variables numriques 26

PRCTICA 4. DADES: EXPLORACI

4.4. EXPLORACI INICIAL

x<-CO2$conc y<-CO2$uptake coplot(y ~ x | Type, data = CO2, show.given = T, type = "p") coplot(y ~ x | Treatment, data = CO2, show.given = T, type = "p") coplot(y ~ x | Treatment*Type, data = CO2, show.given = T, type = "p")

Nota: observeu que es barregen els efectes dels diferents factors. Relacions funcionals entre variables numriques, xat el nivell dun factor
library(car) scatterplot(uptake ~ conc |Treatment, data=CO2, labels=row.names(CO2)) scatterplot(uptake ~ conc | factor(Plant), data=CO2,span=1,reg.line=F)

Nota: massa nivells, no es veu lefecte del factor chilled-nonchilled. Millor aquesta grca (?). Recodiquem les dades.
CO2$fac<-rep(0,length(CO2$Type)) # inicialitzem dalguna manera # definim un nou factor amb 4 nivells (recodificaci) CO2$fac[CO2$Type=="Quebec" & CO2$Treatment=="chilled"]<-"Qc" CO2$fac[CO2$Type=="Quebec" & CO2$Treatment=="nonchilled"]<-"Qn" CO2$fac[CO2$Type=="Mississippi" & CO2$Treatment=="nonchilled"]<-"Mn" CO2$fac[CO2$Type=="Mississippi" & CO2$Treatment=="chilled"]<-"Mc" scatterplot(uptake ~ conc | factor(fac), data=CO2,span=1,reg.line=F)

Exercici 3: Aplica al txer de lenquesta ExerPr1Enq.xlsx els procediments daquesta prctica. 1. Llegeix el full de dades amb R i crea el data.frame enq. Fes que les variables qualitatives siguin factors. Posa "etiquetes"als valors numrics de Oci i Tabac. 2. Calcula amb R la variable transformada IMC ( Kg/m2 ) i afegeix-la a larxiu enq. 3. Crea la variable tipus factor gImc (grups de IMC), amb els intervals segents: infrap (IM C < 18.5), normal (18.5 IM C < 25), sobrep (25 IM C < 30) i obs (30 IM C). Fes un diagrama de sectors gImc - fes-lo en 3d. Afegeix gImc a larxiu. 4. Fes lencreuament dels factors Tabac i Oci. Amb les taules de contingncia de: freq. absolutes, percentatges del total i percentatges per les. Representa-ho amb barres agrupades i apilades. 5. Explora la normalitat de les variables Alt i Pes. Utilitza la comanda par per representar diverses grques en una mateixa imatge. 6. Calcula la recta de regressi del Pes sobre Alt i avalua el model lineal: R2 , residus, etc. Fes la predicci de pes duna persona amb 172cm. 7. Dibuixa la recta de regressi sobre el nvol de punts amb scatterplot. 8. Calcula la matriu de covarincies i la de correlacions de les variables Edat, Pes, Alt i IMC. 9. Analitza, mitjanant coplot, la relaci entre Alt i Pes amb lefecte del factor sexe. 27

You might also like