LAB 1

Interfície i R Markdown

setwd () per indicar el directori o CTRL + shift + H.

?print per veure informació sobre la funció

  • File: trobareu totes les opcions dels documents. Per exemple, crear, desar, canviar de nom, etc.
  • Edit: podreu editar el text, buscar i reemplaçar paraules, desfer accions de text, tallar, copiar i enganxar, etc.
  • View: trobareu totes les opcions de visualització que pugueu necessitar.
  • Code: trobareu les opcions més directes amb l’espai de treball. Per exemple, executar línies, trossos de codi, buscar funcions i objectes d’R de manera fàcil i ràpida.
  • Plot: s’usa per a tot allò que necessiteu fer relatiu als gràfics ja generats com, per exemple, desar-los en algun format, buscar algun gràfic específic, eliminar gràfics, copiar-los al tallapapers, etc.
  • Session: en aquest menú podreu configurar el directori, interrompre, netejar o acabar una sessió. • Tools: sobretot s’usa per a la instal·lació i manipulació de paquets d’R.
  • Help: es troben les ordres per cercar qualsevol tipus d’ajuda del programa, funcions, etc.
Títol 1 Títol 2 Títol 3 Títol 4
1 2 3 11
4 5 6 21
6 55 56 23

Generem enllaços així: Enllaç UOC

Incerció d’imatges amb un títol
Incerció d’imatges amb un títol

Important recordar utilitzar / enlloc de \ en els, sinó no funcionarà. Els espais els canvia R auromàticament a %20.

Podem escriure amb cursiva, negreta o tatxat. Podem intentar combinar-ho.

#Chunks: incorporar codi d'R als documents
#eval = TRUE #avalua el fragment de codi per a la seva execució
#error = TRUE #es mostren els missatges d'error
#echo = TRUE #es veurà el codi al document, en cas contrari, només el resultat
#include = FALSE #evitarem que el codi i els resultats apareguin a l'arxiu acabat. R Markdown encara executa el codi en el fragment i els resultats poden  ser utilitzats per altres fragments
#message = FALSE #evita que els missatges generats pel codi apareguin a l'arxiu acabat
#warning = FALSE #evita que els advertiments generats pel codi apareguin a l'arxiu acabat
#fig.cap = “…” agregarem un títol als resultats gràfics
#S'han de posar a l'encapçament del chunk

Per incertar equasions les necessitem en format LaTex: Codecogs o un NumberEmpire

\[ \left [ \overline{X}- z_{1-\frac{\alpha }{2}}\frac{\sigma }{\sqrt[]{n}},\overline{X}+z_{1-\frac{\alpha }{2}}\frac{\sigma }{\sqrt{n}} \right ] \]

\(\frac{\partial f}{\partial x} = 2\,\sqrt{a}\,x\)

Podem exportar el document en diferents formats (html, doc, pdf) i es marca en la primera part del RMarkdown (en aquest cas tenim html). Haurem de fer ‘knit’ del document per obtenir-ho.

Gestió packets i Rstudio

Algunes llibrerises importants:

#install.packages("Rtools", repos="https://cran.rstudio.com/bin/windows/Rtools/")
library(tools, lib.loc = "D:/R-4.4.1/library")
#install.packages("MASS", "viotop") #instal·lem els paquets
library(knitr)
library("datasets")

data("iris") #carreguem les dades a RStudio
kable(head(iris)) #mostrem la informació del conjunt de dades
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
packageDescription("stats") #accedir a la documentació d'un paquet (stats)
## Package: stats
## Version: 4.4.1
## Priority: base
## Title: The R Stats Package
## Author: R Core Team and contributors worldwide
## Maintainer: R Core Team <do-use-Contact-address@r-project.org>
## Contact: R-help mailing list <r-help@r-project.org>
## Description: R statistical functions.
## License: Part of R 4.4.1
## Imports: utils, grDevices, graphics
## Suggests: MASS, Matrix, SuppDists, methods, stats4
## NeedsCompilation: yes
## Encoding: UTF-8
## Enhances: Kendall, coin, multcomp, pcaPP, pspearman, robustbase
## Built: R 4.4.1; x86_64-w64-mingw32; 2024-06-14 08:21:06 UTC; windows
## 
## -- File: D:/R-4.4.1/library/stats/Meta/package.rds
#source("https://bioconductor.org/biocLite.R")
#biocLite(c("GenomicFeatures","AnnotationBi" ))
#consultar https://bioconductor.org/install/
if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install(version = "3.19")
## Bioconductor version 3.19 (BiocManager 1.30.25), R 4.4.1 (2024-06-14 ucrt)
## Old packages: 'doBy', 'xfun'
BiocManager::install(c("GenomicFeatures", "AnnotationDbi"))
## Bioconductor version 3.19 (BiocManager 1.30.25), R 4.4.1 (2024-06-14 ucrt)
## Old packages: 'doBy', 'xfun'
BiocManager::install() #update
## Bioconductor version 3.19 (BiocManager 1.30.25), R 4.4.1 (2024-06-14 ucrt)
## Old packages: 'doBy', 'xfun'

Importar i exportar dades

Dades Ordre Extensió
Text read.txt .txt
CSV read.csv .csv
Excel read_excel .xls
SAS read.Sas .sa7bdata

Exemples: library(readr) datasets <- read_*csv(“C:/Users/mcasal8/Desktop/LAB1/CovidDeaths/CovidDeaths.csv”) View(CovidDeaths)

install.packages(readxl) library(readxl) dataset <- read_excel(“C:/Users/mcasal8/Desktop/LAB1/CovidDeaths.xls”) View(dataset)

Per exportar simplement podem fer anar les següents funcions: -

#Exemple:
flors = c(15,16,18,18,12,12,25,10,15,22,14,14,16,4,8,5,7,3,9,12) #flors nascudes per m²
tractament = c("s","s","s","s","s","s","s","s","s","s","n","n","n","n","n","n","n","n","n"
,"n")
dataflores =data.frame(tractament, flors)
write.csv(dataflores, file="Prueb1.csv") #exporto a un arxiu .csv
write.csv(dataflores, file="Prueb2.csv", row.names = F) #elimino els números de fila
write.table(dataflores, file="Prueb3.txt") #exporto a un arxiu de text

#O exportar un resultat/output
dataflores
##    tractament flors
## 1           s    15
## 2           s    16
## 3           s    18
## 4           s    18
## 5           s    12
## 6           s    12
## 7           s    25
## 8           s    10
## 9           s    15
## 10          s    22
## 11          n    14
## 12          n    14
## 13          n    16
## 14          n     4
## 15          n     8
## 16          n     5
## 17          n     7
## 18          n     3
## 19          n     9
## 20          n    12
resum = summary(dataflores)
capture.output(resum, file="resum.doc")

Estructures de dades

num1<-10#assignem valor a variable num1
num2<-20#assignem valor a variable num2
num1+num2 #suma
## [1] 30
num2/num1 #divisió
## [1] 2
pes<-50 #assignem el valor del pes en kg
altura<-1.60 #assignem el valor de l'alçada en metres
IMC<-pes/((altura)^2) #valor de l'índex de massa corporal IMC

num1==num2 #comprovem si les variables són iguals
## [1] FALSE
num1<num2 #comparem num1 i num2
## [1] TRUE
num1!=num2 #comprovem si les variables són diferents
## [1] TRUE
bool1<-TRUE
bool2<-FALSE
bool1&bool2 # i
## [1] FALSE
bool1|bool2 # o
## [1] TRUE
vect <- c(1.5, 2, 3.5, 4) #crear un vector
vect #mostrar el vector
## [1] 1.5 2.0 3.5 4.0
is.vector(vect) #determinar si l'objecte és un vector
## [1] TRUE
1:22 #generem una seqüència de nombres ordenats de l'1 al 22
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22
seq1<- seq(0,20, by=0.5) #generem una seqüència que va del 0 al 20 de 0.5 en 0.5
seq1
##  [1]  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0
## [16]  7.5  8.0  8.5  9.0  9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5
## [31] 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0
data1 <- c(1:20) #creem un vector a partir d'una seqüència numèrica
class(data1)
## [1] "integer"
data2 <- c(4,5) #creem un vector amb la dimensió de la matriu (nre. de files x nre. de columnes)
matriu <- matrix (data1, data2) #creem la matriu
matriu #visualitzem la matriu
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20
vecta <- c(1, 2, 3, 4) #generem un vector numèric
vectb <- c("a", "b", "c") #generem un vector de text
x <- matrix(1:12, ncol = 4) #generem una matriu
llista <- list (vecta, vectb, x) #creem una llista a partir dels elements anteriors que són de diferent tipologia
llista #visualitzem la llista
## [[1]]
## [1] 1 2 3 4
## 
## [[2]]
## [1] "a" "b" "c"
## 
## [[3]]
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
llista[1] #primer element de la llista
## [[1]]
## [1] 1 2 3 4
llista [[1]] #primer element de la llista
## [1] 1 2 3 4
llista [[3]][,1] #primera columna
## [1] 1 2 3
length(llista) #elements de la llista
## [1] 3
length(llista[2])#elements del segon objecte de la llista
## [1] 1
llista
## [[1]]
## [1] 1 2 3 4
## 
## [[2]]
## [1] "a" "b" "c"
## 
## [[3]]
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
llista[[3]] <- NULL #eliminar el tercer element
llista[-3] #equivalent a l'anterior
## [[1]]
## [1] 1 2 3 4
## 
## [[2]]
## [1] "a" "b" "c"
#Eliminant el primer i segon elements alhora
llista[-c(1, 2)]
## list()

Conjunts de dades:

library (MASS) #carreguem el paquet MASS que tenim prèviament instal·lat
data("birthwt")#activem les dades
View(birthwt) #mostra el conjunt de dades en format taula
dim (birthwt) #mostra el nombre d'observacions i el nombre de variables
## [1] 189  10
length(birthwt) #mostra el nombre de variables del conjunt
## [1] 10
head(birthwt, n=5) #mostra els primers cinc registres
##    low age lwt race smoke ptl ht ui ftv  bwt
## 85   0  19 182    2     0   0  0  1   0 2523
## 86   0  33 155    3     0   0  0  0   3 2551
## 87   0  20 105    1     1   0  0  0   1 2557
## 88   0  21 108    1     1   0  0  1   2 2594
## 89   0  18 107    1     1   0  0  1   0 2600
names(birthwt) #mostra el nom de les variables
##  [1] "low"   "age"   "lwt"   "race"  "smoke" "ptl"   "ht"    "ui"    "ftv"  
## [10] "bwt"
genere <- c(1, 2, 1, 1, 1, 2, 2, 2, 1, 2)
edat <- c(24, 25, 26, 24, 25, 27, 21, 22, 25, 26)
fuma <- c("no", "sí", "no", "sí", "no", "no", "sí", "no", "no", "sí")
MiDataf <- data.frame(genere, edat, fuma)
MiDataf
##    genere edat fuma
## 1       1   24   no
## 2       2   25   sí
## 3       1   26   no
## 4       1   24   sí
## 5       1   25   no
## 6       2   27   no
## 7       2   21   sí
## 8       2   22   no
## 9       1   25   no
## 10      2   26   sí
MiDataf[3:5, ] #dades dels elements de les files de la 3 a la 5
##   genere edat fuma
## 3      1   26   no
## 4      1   24   sí
## 5      1   25   no
MiDataf[,1] #dades de tots els elements de la primera columna
##  [1] 1 2 1 1 1 2 2 2 1 2
MiDataf$genere #variable gènere
##  [1] 1 2 1 1 1 2 2 2 1 2
MiDataf$fuma #variable fuma
##  [1] "no" "sí" "no" "sí" "no" "no" "sí" "no" "no" "sí"
mean(MiDataf$edat[MiDataf$fuma=="no"]) #mitjana de l'edat dels pacients que no fumen
## [1] 24.83333
attach(MiDataf) #enganxem el data frame
## .GlobalEnv emmascara els següents objectes:
## 
##     edat, fuma, genere
table(fuma, genere) #generem una taula creuada amb la variable fuma i la variable gènere
##     genere
## fuma 1 2
##   no 4 2
##   sí 1 3
detach(MiDataf) #desenganxem el data frame
with(MiDataf, {
  edat_dia = edat*365
  edat_dia}) #usem l'ordre with per calcular l'edat en dies i no en anys
##  [1] 8760 9125 9490 8760 9125 9855 7665 8030 9125 9490
#creem un primer data frame sobre malalties
Dataf_Enf1 = data.frame (malaltia = c("diabetis", "colesterol", "hipertensió", "hipotensió"), individus= c("ind1", "ind2", "ind3", "ind4"))
Dataf_Enf1 #observem els elements d'Enf1
##      malaltia individus
## 1    diabetis      ind1
## 2  colesterol      ind2
## 3 hipertensió      ind3
## 4  hipotensió      ind4
#creem un segon data frame idèntic en variables
Dataf_Enf2 = data.frame (malaltia = c("diabetis", "colesterol", "hipertensió", "hipotensió"), individus= c("ind21", "ind22", "ind23", "ind24"))
Dataf_Enf2 #observem els elements d'Enf2
##      malaltia individus
## 1    diabetis     ind21
## 2  colesterol     ind22
## 3 hipertensió     ind23
## 4  hipotensió     ind24
#combinem els 2 data frames en 1
Dataf_Enf = rbind(Dataf_Enf1, Dataf_Enf2)
Dataf_Enf
##      malaltia individus
## 1    diabetis      ind1
## 2  colesterol      ind2
## 3 hipertensió      ind3
## 4  hipotensió      ind4
## 5    diabetis     ind21
## 6  colesterol     ind22
## 7 hipertensió     ind23
## 8  hipotensió     ind24
Indiv1 <- c("I213", "I214", "I215", "I216", "I217")
Medic1 <- c("Paracetamol", "Ibuprofèn", "Aspirina", "Ibuprofèn", "Paracetamol")
Past_dia <- c(2, 3, 2, 2, 2)
df_medica1 <- data.frame (Indiv1, Medic1, Past_dia)
df_medica1
##   Indiv1      Medic1 Past_dia
## 1   I213 Paracetamol        2
## 2   I214   Ibuprofèn        3
## 3   I215    Aspirina        2
## 4   I216   Ibuprofèn        2
## 5   I217 Paracetamol        2
Indiv2 <- c("I213", "I214", "I215", "I216", "I217")
Medic2 <- c("Paracetamol", "Ibuprofèn", "Aspirina", "Ibuprofèn", "Paracetamol")
Past_dia <- c(2, 3, 2, 2, 2)
df_medica2 <- data.frame (Indiv1, Medic1, Past_dia)
df_medica2
##   Indiv1      Medic1 Past_dia
## 1   I213 Paracetamol        2
## 2   I214   Ibuprofèn        3
## 3   I215    Aspirina        2
## 4   I216   Ibuprofèn        2
## 5   I217 Paracetamol        2
merge(df_medica1, df_medica2)
##   Indiv1      Medic1 Past_dia
## 1   I213 Paracetamol        2
## 2   I214   Ibuprofèn        3
## 3   I215    Aspirina        2
## 4   I216   Ibuprofèn        2
## 5   I217 Paracetamol        2
set.seed(999) #llavor aleatòria
metge_id <- 1:10 #generem una variable amb una llista ordenada per a l'id de cada metge
metge_nom <- c("Ona", "Jordi", "Oriol", "Pau", "Esther", "Xavi", "Jan", "Marta", "Anna", "Abril") #variables amb el nom de cada professional
metge_sal <- round(rnorm(10, mean = 1500, sd = 200)) #salari estimat aleatori que cobra cada professional
metge_edat <- round(rnorm(10, mean = 50, sd = 8)) #variable aleatòria sobre l'edat
metge_espec <- c("Neuro", "Orto", "Gine", "Trauma",rep("General",6))#especialitat de cada professional
df_Med_1 <- data.frame(id = metge_id[1:8], nom = metge_nom[1:8], salari_mensual = metge_sal[1:8])
df_Med_2 <- data.frame(id = metge_id[-5], nom = metge_nom[-5], edat = metge_edat[-5], position = metge_espec[-5])
df_Med_1
##   id    nom salari_mensual
## 1  1    Ona           1444
## 2  2  Jordi           1237
## 3  3  Oriol           1659
## 4  4    Pau           1554
## 5  5 Esther           1445
## 6  6   Xavi           1387
## 7  7    Jan           1124
## 8  8  Marta           1247
df_Med_2
##   id   nom edat position
## 1  1   Ona   61    Neuro
## 2  2 Jordi   51     Orto
## 3  3 Oriol   58     Gine
## 4  4   Pau   51   Trauma
## 5  6  Xavi   39  General
## 6  7   Jan   51  General
## 7  8 Marta   51  General
## 8  9  Anna   57  General
## 9 10 Abril   33  General
merge(x=df_Med_1, y=df_Med_2) #escriure x o i és opcional en aquesta ordre. Unió interna
##   id   nom salari_mensual edat position
## 1  1   Ona           1444   61    Neuro
## 2  2 Jordi           1237   51     Orto
## 3  3 Oriol           1659   58     Gine
## 4  4   Pau           1554   51   Trauma
## 5  6  Xavi           1387   39  General
## 6  7   Jan           1124   51  General
## 7  8 Marta           1247   51  General
merge (x=df_Med_1, y=df_Med_2, all = TRUE) #combinació completa
##    id    nom salari_mensual edat position
## 1   1    Ona           1444   61    Neuro
## 2   2  Jordi           1237   51     Orto
## 3   3  Oriol           1659   58     Gine
## 4   4    Pau           1554   51   Trauma
## 5   5 Esther           1445   NA     <NA>
## 6   6   Xavi           1387   39  General
## 7   7    Jan           1124   51  General
## 8   8  Marta           1247   51  General
## 9   9   Anna             NA   57  General
## 10 10  Abril             NA   33  General
Df_UniIzq <- merge(x=df_Med_1, y=df_Med_2, all.x= TRUE) #unió esquerra
Df_UniIzq
##   id    nom salari_mensual edat position
## 1  1    Ona           1444   61    Neuro
## 2  2  Jordi           1237   51     Orto
## 3  3  Oriol           1659   58     Gine
## 4  4    Pau           1554   51   Trauma
## 5  5 Esther           1445   NA     <NA>
## 6  6   Xavi           1387   39  General
## 7  7    Jan           1124   51  General
## 8  8  Marta           1247   51  General
Df_UniDer <- merge(x=df_Med_1, y=df_Med_2, all.i= TRUE) #unió dreta
Df_UniDer
##   id   nom salari_mensual edat position
## 1  1   Ona           1444   61    Neuro
## 2  2 Jordi           1237   51     Orto
## 3  3 Oriol           1659   58     Gine
## 4  4   Pau           1554   51   Trauma
## 5  6  Xavi           1387   39  General
## 6  7   Jan           1124   51  General
## 7  8 Marta           1247   51  General
Df_Creuat <- merge (x=df_Med_1, y=df_Med_2, by=NULL) #unió creuada
head(Df_Creuat) #posem només les primeres files de la combinació
##   id.x  nom.x salari_mensual id.y nom.y edat position
## 1    1    Ona           1444    1   Ona   61    Neuro
## 2    2  Jordi           1237    1   Ona   61    Neuro
## 3    3  Oriol           1659    1   Ona   61    Neuro
## 4    4    Pau           1554    1   Ona   61    Neuro
## 5    5 Esther           1445    1   Ona   61    Neuro
## 6    6   Xavi           1387    1   Ona   61    Neuro
Id<- c("I1","I2","I3","I4","I5","I6","I7","I8","I9","I10","I11","I12","I13","I14","I15","I16","I17","I18","I19","I20","I21","I22")
Edat <- c(23,24,21,22,23,25,26,24,21,22,23,25,26,24,22,21,25,26,24,21,25,27)
Sexe <- c(1,2,1,1,1,2,2,2,1,2,1,2,2,2,1,1,1,2,2,2,1,2)
Pes <- c(76.5, 81.2, 79.3, 59.5, 67.3, 78.6, 67.9, 100.2, 97.8, 56.4, 65.4, 67.5, 87.4, 99.7, 87.6, 93.4, 65.4, 73.7, 85.1, 61.2, 54.8, 103.4)
Altura <- c(165,154,178,165,164,175,182,165,178,165,158,183,184,164,189,167,182,179,165,158,183,184)
Pacients <- data.frame (Id, Edat, Sexe, Pes, Altura)
#Seleccionar amb només les variables Id, Edat i Sexe.
Prova1<- subset(Pacients, select = c(Id,Edat,Sexe))
Prova1
##     Id Edat Sexe
## 1   I1   23    1
## 2   I2   24    2
## 3   I3   21    1
## 4   I4   22    1
## 5   I5   23    1
## 6   I6   25    2
## 7   I7   26    2
## 8   I8   24    2
## 9   I9   21    1
## 10 I10   22    2
## 11 I11   23    1
## 12 I12   25    2
## 13 I13   26    2
## 14 I14   24    2
## 15 I15   22    1
## 16 I16   21    1
## 17 I17   25    1
## 18 I18   26    2
## 19 I19   24    2
## 20 I20   21    2
## 21 I21   25    1
## 22 I22   27    2
#Seleccionar totes les files que tenen una edat més gran o igual que 24 anys
Prova2<- subset(Pacients, Edat >= 24)
Prova2
##     Id Edat Sexe   Pes Altura
## 2   I2   24    2  81.2    154
## 6   I6   25    2  78.6    175
## 7   I7   26    2  67.9    182
## 8   I8   24    2 100.2    165
## 12 I12   25    2  67.5    183
## 13 I13   26    2  87.4    184
## 14 I14   24    2  99.7    164
## 17 I17   25    1  65.4    182
## 18 I18   26    2  73.7    179
## 19 I19   24    2  85.1    165
## 21 I21   25    1  54.8    183
## 22 I22   27    2 103.4    184
#Seleccionar totes les files que tenen una edat més petita que 25 anys i no incloure a la columna Sexe
Prova3<- subset(Pacients, Edat > 25, select = -c(Sexe))
Prova3
##     Id Edat   Pes Altura
## 7   I7   26  67.9    182
## 13 I13   26  87.4    184
## 18 I18   26  73.7    179
## 22 I22   27 103.4    184
#Seleccionar només els registres que tenen una alçada més petita o igual que 165 cm o més gran que 175 cm
Prova4<- subset(Pacients, Altura <= 165 | Altura > 175)
Prova4
##     Id Edat Sexe   Pes Altura
## 1   I1   23    1  76.5    165
## 2   I2   24    2  81.2    154
## 3   I3   21    1  79.3    178
## 4   I4   22    1  59.5    165
## 5   I5   23    1  67.3    164
## 7   I7   26    2  67.9    182
## 8   I8   24    2 100.2    165
## 9   I9   21    1  97.8    178
## 10 I10   22    2  56.4    165
## 11 I11   23    1  65.4    158
## 12 I12   25    2  67.5    183
## 13 I13   26    2  87.4    184
## 14 I14   24    2  99.7    164
## 15 I15   22    1  87.6    189
## 17 I17   25    1  65.4    182
## 18 I18   26    2  73.7    179
## 19 I19   24    2  85.1    165
## 20 I20   21    2  61.2    158
## 21 I21   25    1  54.8    183
## 22 I22   27    2 103.4    184
set.seed(999)
f <- nrow(Pacients) #f és la mida del data frame a partir del nombre de files.
n <- 3 #n és la mida de la nova mostra aleatòria.
i <- sample(1:f, n, replace=FALSE) #i seran les posicions de les observacions aleatòries.
Prova5 <- Pacients[i,] #La nova mostra aleatòria
Prova5
##   Id Edat Sexe  Pes Altura
## 4 I4   22    1 59.5    165
## 7 I7   26    2 67.9    182
## 9 I9   21    1 97.8    178
data(women)
Prova6 <- filter(women, "height" > 58) #filtrar files segons una condició
Prova6
## Time Series:
## Start = 1 
## End = 15 
## Frequency = 1 
##    [,1] [,2]
##  1   58  115
##  2   59  117
##  3   60  120
##  4   61  123
##  5   62  126
##  6   63  129
##  7   64  132
##  8   65  135
##  9   66  139
## 10   67  142
## 11   68  146
## 12   69  150
## 13   70  154
## 14   71  159
## 15   72  164

“data.frame” %>% filter(“condicions”) -> “Nom_nou” #Primera opció “Nom_nou” <- “data.frame” %>% filter(“condicions”) #Segona opció

Visualització

plot(iris) #generar gràfics

hist(iris$Sepal.Length) #histogrames

hist(iris$Sepal.Length, breaks=c(4,5,6,7,8),
main="Histograma de longitud del sèpal",
xlab="cm", ylab="Freqüència",
xlim=c(2, 10), ylim=c(0, 60),
col="blue") #creem un histograma amb títols, intervals, eixos i especifiquem el color blau

Opcions Significat
main Títol de la taula
xlab Eix de les x
ylab Eix de les y
breaks Intervals de l’histograma
col Color del gràfic
abline Línia superposada
boxplot(iris) #genero el boxplot amb totes les variables

boxplot(iris[ ,-5], main="Diagrames de caixa",
xlab="Dimensions", ylab="cm",
col=c("red", "blue", "orange", "yellow"))

Exercicis

Exercici 1:

Utilitzant les funcions citades en aquest Laboratori, comproveu quins paquets teniu instal·lats a la vostra versió d’RStudio i instal·leu el paquet MASS i el paquet Survival i comproveu la informació que contenen.

library()
sessionInfo()
## R version 4.4.1 (2024-06-14 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 10 x64 (build 19045)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=Catalan_Spain.utf8  LC_CTYPE=Catalan_Spain.utf8   
## [3] LC_MONETARY=Catalan_Spain.utf8 LC_NUMERIC=C                  
## [5] LC_TIME=Catalan_Spain.utf8    
## 
## time zone: Europe/Madrid
## tzcode source: internal
## 
## attached base packages:
## [1] tools     stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
## [1] MASS_7.3-61         BiocManager_1.30.25 knitr_1.48         
## 
## loaded via a namespace (and not attached):
##  [1] digest_0.6.37     R6_2.5.1          fastmap_1.2.0     xfun_0.47        
##  [5] cachem_1.1.0      htmltools_0.5.8.1 rmarkdown_2.28    lifecycle_1.0.4  
##  [9] cli_3.6.3         sass_0.4.9        jquerylib_0.1.4   compiler_4.4.1   
## [13] highr_0.11        rstudioapi_0.16.0 evaluate_1.0.0    bslib_0.8.0      
## [17] yaml_2.3.10       rlang_1.1.4       jsonlite_1.8.9
#installed.packages()
#install.packages("MASS")
#install.packages("survival")
library (MASS)
library (survival)
packageDescription("stats")
## Package: stats
## Version: 4.4.1
## Priority: base
## Title: The R Stats Package
## Author: R Core Team and contributors worldwide
## Maintainer: R Core Team <do-use-Contact-address@r-project.org>
## Contact: R-help mailing list <r-help@r-project.org>
## Description: R statistical functions.
## License: Part of R 4.4.1
## Imports: utils, grDevices, graphics
## Suggests: MASS, Matrix, SuppDists, methods, stats4
## NeedsCompilation: yes
## Encoding: UTF-8
## Enhances: Kendall, coin, multcomp, pcaPP, pspearman, robustbase
## Built: R 4.4.1; x86_64-w64-mingw32; 2024-06-14 08:21:06 UTC; windows
## 
## -- File: D:/R-4.4.1/library/stats/Meta/package.rds
??MASS
## starting httpd help server ... fet
??Survival

Busqueu informació sobre el paquet Rcmdr (R Commander) des de la consola.

#install.packages("Rcmdr") #No tinc el paquet, per tant, l'he d'instal·lar 1r
library(Rcmdr)
## S'està carregant el paquet requerit: splines
## S'està carregant el paquet requerit: RcmdrMisc
## S'està carregant el paquet requerit: car
## S'està carregant el paquet requerit: carData
## S'està carregant el paquet requerit: sandwich
## S'està carregant el paquet requerit: effects
## lattice theme set by effectsTheme()
## See ?effectsTheme for details.
## El GUI del Commander només s'inicia a les sessions interactives
## 
## S'està adjuntant el paquet: 'Rcmdr'
## L'objecte següent està emmascarat per 'package:base':
## 
##     errorCondition
??Rcmdr

Exercici 2:

  1. Importeu un arxiu de text i busqueu un summary() de tres variables que trieu.

    Triem el següent: Janosi, A., Steinbrunn, W., Pfisterer, M., & Detrano, R. (1989). Heart Disease [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C52P4X.

    heart_data <- read.table("D:\\Bioinformàtica i Bioestadística\\Programari per a l'anàlisi de dades\\heart+disease\\processed.switzerland.data", header = FALSE, sep = ",")
    View(heart_data) #per saber què són cada columna, hi ha documentació que ens diu què és cada una
    #Consultant-la veiem que, per exemple, l'edat, el sexe i thalach (maximum heart rate achieved) poden ser interessants de mirar en un dataset d'aquest tipus. Corresponen a la columna 1 (age), columna 2 (sex) i columna 8 (thalach) 
    summary(heart_data[, c(1, 2,8)])
    ##        V1              V2              V8           
    ##  Min.   :32.00   Min.   :0.0000   Length:123        
    ##  1st Qu.:51.00   1st Qu.:1.0000   Class :character  
    ##  Median :56.00   Median :1.0000   Mode  :character  
    ##  Mean   :55.32   Mean   :0.9187                     
    ##  3rd Qu.:61.50   3rd Qu.:1.0000                     
    ##  Max.   :74.00   Max.   :1.0000
  2. Importeu un arxiu «.csv» i busqueu un fivenum() de dues variables que us semblin rellevants per a l’estudi.

    Triem aquest dataset: Cortez, P., Cerdeira, A., Almeida, F., Matos, T., & Reis, J. (2009). Wine Quality [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C56S3T.

    wine_data <- read.csv("D:\\Bioinformàtica i Bioestadística\\Programari per a l'anàlisi de dades\\wine+quality\\winequality-red.csv", header = TRUE, sep = ";")
    View(wine_data) #Consultant-la veiem que, poden ser rellevants el pH del vi o el % d'alcohol. Aquestes columnes les tenim amb els noms
    fivenum(wine_data$pH)
    ## [1] 2.74 3.21 3.31 3.40 4.01
    fivenum(wine_data$alcohol)
    ## [1]  8.4  9.5 10.2 11.1 14.9

Exercici 3:

A partir del conjunt de dades anorexia del paquet MASS, que corresponen a les dades de canvi de pes de pacients joves amb anorèxia, mostreu els tipus de dades que conté i comproveu si hi ha valors NA i NULL. Per a la variable Treat, transformeu els valors «CBT», «Cont» i FT en «Cogn Beh Tr», «Contr» i «Fam Tr», respectivament.

library(MASS)
data("anorexia")
summary(anorexia)
##   Treat        Prewt           Postwt      
##  CBT :29   Min.   :70.00   Min.   : 71.30  
##  Cont:26   1st Qu.:79.60   1st Qu.: 79.33  
##  FT  :17   Median :82.30   Median : 84.05  
##            Mean   :82.41   Mean   : 85.17  
##            3rd Qu.:86.00   3rd Qu.: 91.55  
##            Max.   :94.90   Max.   :103.60
head(anorexia)
##   Treat Prewt Postwt
## 1  Cont  80.7   80.2
## 2  Cont  89.4   80.1
## 3  Cont  91.8   86.4
## 4  Cont  74.0   86.3
## 5  Cont  78.1   76.1
## 6  Cont  88.3   78.1
#Per veure els tipus de dades 
dim(anorexia) #nº obs i nº var, respectivament
## [1] 72  3
names(anorexia) #nom var
## [1] "Treat"  "Prewt"  "Postwt"
anyNA(anorexia) #mirem si hi ha NA
## [1] FALSE
is.null(anorexia) #mirem si hi ha NULLs
## [1] FALSE
#la llibreria dplyr podria ajudar-nos a ger els canvis mencionats
library(dplyr)
## 
## S'està adjuntant el paquet: 'dplyr'
## L'objecte següent està emmascarat per 'package:car':
## 
##     recode
## L'objecte següent està emmascarat per 'package:MASS':
## 
##     select
## Els següents objectes estan emmascarats des de 'package:stats':
## 
##     filter, lag
## Els següents objectes estan emmascarats des de 'package:base':
## 
##     intersect, setdiff, setequal, union
anorexia$Treat <- recode(anorexia$Treat,CBT = "Cogn Beh Tr",Cont = "Contr",FT = "Fam Tr")
# si volguessim veure si s'ha canviat mirem el dataset: View(anorexia)

Exercici 4:

  1. Exporteu les dades biopsy del paquet MASS a un arxiu «.csv.»

    library(MASS)
    data("biopsy")
    head(biopsy)
    ##        ID V1 V2 V3 V4 V5 V6 V7 V8 V9     class
    ## 1 1000025  5  1  1  1  2  1  3  1  1    benign
    ## 2 1002945  5  4  4  5  7 10  3  2  1    benign
    ## 3 1015425  3  1  1  1  2  2  3  1  1    benign
    ## 4 1016277  6  8  8  1  3  4  3  7  1    benign
    ## 5 1017023  4  1  1  3  2  1  3  1  1    benign
    ## 6 1017122  8 10 10  8  7 10  9  7  1 malignant
    write.csv("biopsy", file="D:\\Bioinformàtica i Bioestadística\\Programari per a l'anàlisi de dades\\biopsy.csv")
  2. Exporteu les dades melanoma del paquet MASS a arxius de tres diferents formats i comproveu que s’han creat els diferents arxius en els formats i les rutes especificats. Podeu generar una captura de pantalla de la seva ubicació a la carpeta.

library(MASS)
data("Melanoma")
head(Melanoma)
##   time status sex age year thickness ulcer
## 1   10      3   1  76 1972      6.76     1
## 2   30      3   1  56 1968      0.65     0
## 3   35      2   1  41 1977      1.34     0
## 4   99      3   0  71 1968      2.90     0
## 5  185      1   1  52 1965     12.08     1
## 6  204      1   1  28 1971      4.84     1
#install.packages("openxlsx")
library(openxlsx)
write.xlsx("Melanoma", file="D:\\Bioinformàtica i Bioestadística\\Programari per a l'anàlisi de dades\\melanoma_xlsx.xlsx")
#install.packages("foreign")
library(foreign)
write.foreign(Melanoma, "D:\\Bioinformàtica i Bioestadística\\Programari per a l'anàlisi de dades\\melanoma_spss.spss", codefile = "code_mela_spss", package="SPSS")
write.foreign(Melanoma, "D:\\Bioinformàtica i Bioestadística\\Programari per a l'anàlisi de dades\\melanoma_sas.sas", codefile = "code_mela_sas", package="SAS")
captura carpeta
captura carpeta
  1. Genereu un resum (summary) de la variable age de melanoma i deseu la sortida que us apareix en un document .doc

    sum_melanoma <- summary(Melanoma)
    head(sum_melanoma)
    ##       time          status          sex              age             year     
    ##  Min.   :  10   Min.   :1.00   Min.   :0.0000   Min.   : 4.00   Min.   :1962  
    ##  1st Qu.:1525   1st Qu.:1.00   1st Qu.:0.0000   1st Qu.:42.00   1st Qu.:1968  
    ##  Median :2005   Median :2.00   Median :0.0000   Median :54.00   Median :1970  
    ##  Mean   :2153   Mean   :1.79   Mean   :0.3854   Mean   :52.46   Mean   :1970  
    ##  3rd Qu.:3042   3rd Qu.:2.00   3rd Qu.:1.0000   3rd Qu.:65.00   3rd Qu.:1972  
    ##  Max.   :5565   Max.   :3.00   Max.   :1.0000   Max.   :95.00   Max.   :1977  
    ##    thickness         ulcer      
    ##  Min.   : 0.10   Min.   :0.000  
    ##  1st Qu.: 0.97   1st Qu.:0.000  
    ##  Median : 1.94   Median :0.000  
    ##  Mean   : 2.92   Mean   :0.439  
    ##  3rd Qu.: 3.56   3rd Qu.:1.000  
    ##  Max.   :17.42   Max.   :1.000
  2. Busqueu un data frame en algun repositori de dades de Biomedicina, descarregueu un conjunt de dades en «.csv» i importeu aquest fitxer a un document R Markdown usant el codi o el menú d’importació d’RStudio.

    #> Suicide.Rates.Overview.1985.to.2016 <- read.csv("D:/Bioinformàtica i Bioestadística/Programari per a l'anàlisi de dades/Suicide Rates Overview 1985 to 2016.csv", header=FALSE)
    #>   View(Suicide.Rates.Overview.1985.to.2016)

Aquesta és una llista d’alguns repositoris de dades que podem usar: https://ouhsc.edu/bserdac/dthompso/web/statres.htm https://guides.lib.berkeley.edu/publichealth/healthstatistics/rawdata https://archive.ics.uci.edu/datasets

Exercici 5:

A l’exemple següent veurem com utilitzar diferents operadors sobre el conjunt de dades birthwt, així com també algunes funcions que ens permeten obtenir més informació de les variables:

  1. Quina és l’edat màxima de les mares del conjunt de dades?

    library (MASS)
    data("birthwt")
    summary(birthwt$age) #podem veure-ho mirant en la columna age o utilitzant la funció max
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##   14.00   19.00   23.00   23.24   26.00   45.00
    max(birthwt$age)
    ## [1] 45
  2. Quina és l’edat mínima de les mares del conjunt de dades?

    summary(birthwt$age)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##   14.00   19.00   23.00   23.24   26.00   45.00
    min(birthwt$age)
    ## [1] 14
  3. Quin és el rang d’edat de les mares?

    summary(birthwt$age)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##   14.00   19.00   23.00   23.24   26.00   45.00

    Serà entre el mínim (14) i el màxim (45), per tant, el rang és [14-45]

  4. Fumava la mare que el seu nounat era el de menys pes?

    #bwt és el pes del nounat en gr
    min(birthwt$bwt)
    ## [1] 709
    birthwt$smoke[which.min(birthwt$bwt)]
    ## [1] 1

    En la columna “smoke” hi ha els casos 0 i casos 1, els quals són no fumadores i fumadores respectivament. La mare amb el nounat de menys pes si fumava.

  5. Quant va pesar el nounat la mare del qual tenia l’edat màxima?

    max(birthwt$age)
    ## [1] 45
    birthwt$bwt[which.max(birthwt$age)]
    ## [1] 4990
  6. Feu una llista els pesos dels nounats, les mares dels quals visitaran menys de dues vegades el metge durant el primer trimestre.

    # ftv és el nº de visites mèdiques durant el 1r trimestre, menys de 2 vegades, no 2 o menys, per tant;
    pes_menys_dues_visites <- birthwt$bwt[birthwt$ftv < 2]
    #aquí veiem algunes característiques del nou objecte
    head(pes_menys_dues_visites)
    ## [1] 2523 2557 2600 2622 2637 2637
    summary(pes_menys_dues_visites)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##     709    2381    2977    2943    3558    4990
    length(pes_menys_dues_visites)
    ## [1] 147

Exercici 6:

A partir del conjunt de dades anorexia treballat en apartats anteriors, creeu una matriu que tingui com a columnes els valors de Prewt i Postwt, i cada fila siguin els valors corresponents per a cada posició.

library (MASS)
data("anorexia")
pre_post_matriu <- as.matrix(anorexia[, c("Prewt", "Postwt")])
pre_post_matriu
##    Prewt Postwt
## 1   80.7   80.2
## 2   89.4   80.1
## 3   91.8   86.4
## 4   74.0   86.3
## 5   78.1   76.1
## 6   88.3   78.1
## 7   87.3   75.1
## 8   75.1   86.7
## 9   80.6   73.5
## 10  78.4   84.6
## 11  77.6   77.4
## 12  88.7   79.5
## 13  81.3   89.6
## 14  78.1   81.4
## 15  70.5   81.8
## 16  77.3   77.3
## 17  85.2   84.2
## 18  86.0   75.4
## 19  84.1   79.5
## 20  79.7   73.0
## 21  85.5   88.3
## 22  84.4   84.7
## 23  79.6   81.4
## 24  77.5   81.2
## 25  72.3   88.2
## 26  89.0   78.8
## 27  80.5   82.2
## 28  84.9   85.6
## 29  81.5   81.4
## 30  82.6   81.9
## 31  79.9   76.4
## 32  88.7  103.6
## 33  94.9   98.4
## 34  76.3   93.4
## 35  81.0   73.4
## 36  80.5   82.1
## 37  85.0   96.7
## 38  89.2   95.3
## 39  81.3   82.4
## 40  76.5   72.5
## 41  70.0   90.9
## 42  80.4   71.3
## 43  83.3   85.4
## 44  83.0   81.6
## 45  87.7   89.1
## 46  84.2   83.9
## 47  86.4   82.7
## 48  76.5   75.7
## 49  80.2   82.6
## 50  87.8  100.4
## 51  83.3   85.2
## 52  79.7   83.6
## 53  84.5   84.6
## 54  80.8   96.2
## 55  87.4   86.7
## 56  83.8   95.2
## 57  83.3   94.3
## 58  86.0   91.5
## 59  82.5   91.9
## 60  86.7  100.3
## 61  79.6   76.7
## 62  76.9   76.8
## 63  94.2  101.6
## 64  73.4   94.9
## 65  80.5   75.2
## 66  81.6   77.8
## 67  82.1   95.5
## 68  77.6   90.7
## 69  83.5   92.5
## 70  89.9   93.8
## 71  86.0   91.7
## 72  87.3   98.0

Exercici 7:

Copia el codi següent a la teva consola per generar un data frame amb 25 registres i sis variables, i respon als apartats següents:

Identificador <- c("I1","I2","I3","I4","I5","I6","I7","I8","I9","I10","I11","I12","I13","I14", "I15","I16","I17","I18","I19","I20","I21","I22","I23","I24","I25")

Edat <- c(23,24,21,22,23,25,26,24,21,22,23,25,26,24,22,21,25,26,24,21,25,27,26,22,29) 

Sexe <-c(1,2,1,1,1,2,2,2,1,2,1,2,2,2,1,1,1,2,2,2,1,2,1,1,2) 

#1 per a dones i 2 per a homes 

Pes <- c(76.5,81.2,79.3,59.5,67.3,78.6,67.9,100.2,97.8,56.4,65.4,67.5,87.4,99.7,87.6 ,93.4,65.4,73.7,85.1,61.2,54.8,103.4,65.8,71.7,85.0) 

Alt <- c(165,154,178,165,164,175,182,165,178,165,158,183,184,164,189,167,182,179,165 ,158,183,184,189,166,175) #altura en cm 

Fuma <- c("SÍ","NO","SÍ","SÍ","NO","NO","NO","SÍ","SÍ","SÍ","NO","NO","SÍ","SÍ","SÍ", "SÍ","NO","NO","SÍ","SÍ","SÍ","NO","SÍ","NO","SÍ") 

Tract_Pulmo <- data.frame(Identificador,Edat,Sexe,Pes,Alt,Fuma) 
Tract_Pulmo 
##    Identificador Edat Sexe   Pes Alt Fuma
## 1             I1   23    1  76.5 165   SÍ
## 2             I2   24    2  81.2 154   NO
## 3             I3   21    1  79.3 178   SÍ
## 4             I4   22    1  59.5 165   SÍ
## 5             I5   23    1  67.3 164   NO
## 6             I6   25    2  78.6 175   NO
## 7             I7   26    2  67.9 182   NO
## 8             I8   24    2 100.2 165   SÍ
## 9             I9   21    1  97.8 178   SÍ
## 10           I10   22    2  56.4 165   SÍ
## 11           I11   23    1  65.4 158   NO
## 12           I12   25    2  67.5 183   NO
## 13           I13   26    2  87.4 184   SÍ
## 14           I14   24    2  99.7 164   SÍ
## 15           I15   22    1  87.6 189   SÍ
## 16           I16   21    1  93.4 167   SÍ
## 17           I17   25    1  65.4 182   NO
## 18           I18   26    2  73.7 179   NO
## 19           I19   24    2  85.1 165   SÍ
## 20           I20   21    2  61.2 158   SÍ
## 21           I21   25    1  54.8 183   SÍ
## 22           I22   27    2 103.4 184   NO
## 23           I23   26    1  65.8 189   SÍ
## 24           I24   22    1  71.7 166   NO
## 25           I25   29    2  85.0 175   SÍ
  1. Seleccioneu els registres amb edat > 22.

    mes_22_edat <- Tract_Pulmo[Tract_Pulmo$Edat > 22,]
    mes_22_edat
    ##    Identificador Edat Sexe   Pes Alt Fuma
    ## 1             I1   23    1  76.5 165   SÍ
    ## 2             I2   24    2  81.2 154   NO
    ## 5             I5   23    1  67.3 164   NO
    ## 6             I6   25    2  78.6 175   NO
    ## 7             I7   26    2  67.9 182   NO
    ## 8             I8   24    2 100.2 165   SÍ
    ## 11           I11   23    1  65.4 158   NO
    ## 12           I12   25    2  67.5 183   NO
    ## 13           I13   26    2  87.4 184   SÍ
    ## 14           I14   24    2  99.7 164   SÍ
    ## 17           I17   25    1  65.4 182   NO
    ## 18           I18   26    2  73.7 179   NO
    ## 19           I19   24    2  85.1 165   SÍ
    ## 21           I21   25    1  54.8 183   SÍ
    ## 22           I22   27    2 103.4 184   NO
    ## 23           I23   26    1  65.8 189   SÍ
    ## 25           I25   29    2  85.0 175   SÍ
  2. Seleccioneu l’element 3 de la columna 4 del conjunt de dades (comptant l’identificador).

    element <- Tract_Pulmo[3,4]
    element
    ## [1] 79.3
  3. Useu l’ordre subset() per seleccionar totes les files que tenen una edat més petita que 27 anys i sense incloure la columna Alt.

    apartat_c <- subset(Tract_Pulmo, Edat<27, -Alt)
    apartat_c
    ##    Identificador Edat Sexe   Pes Fuma
    ## 1             I1   23    1  76.5   SÍ
    ## 2             I2   24    2  81.2   NO
    ## 3             I3   21    1  79.3   SÍ
    ## 4             I4   22    1  59.5   SÍ
    ## 5             I5   23    1  67.3   NO
    ## 6             I6   25    2  78.6   NO
    ## 7             I7   26    2  67.9   NO
    ## 8             I8   24    2 100.2   SÍ
    ## 9             I9   21    1  97.8   SÍ
    ## 10           I10   22    2  56.4   SÍ
    ## 11           I11   23    1  65.4   NO
    ## 12           I12   25    2  67.5   NO
    ## 13           I13   26    2  87.4   SÍ
    ## 14           I14   24    2  99.7   SÍ
    ## 15           I15   22    1  87.6   SÍ
    ## 16           I16   21    1  93.4   SÍ
    ## 17           I17   25    1  65.4   NO
    ## 18           I18   26    2  73.7   NO
    ## 19           I19   24    2  85.1   SÍ
    ## 20           I20   21    2  61.2   SÍ
    ## 21           I21   25    1  54.8   SÍ
    ## 23           I23   26    1  65.8   SÍ
    ## 24           I24   22    1  71.7   NO

Exercici 8:

Incorporeu el dataset ChickWeight que conté informació sobre el pes de 578 pollets en grams (weight), el temps des del mesurament en néixer (Time), una variable identificadorade cada pollet (Chick) a partir del rang de pes i una variable factor amb el tipus de dieta experimental que cada pollet va rebre (Diet).

  1. Incorporeu el conjunt de dades ChickWeight del paquet datasets al vostre entorn de treball.
library(MASS)
data("ChickWeight")
  1. Genereu un gràfic de dispersió de la variable weight.
plot(ChickWeight$Time, ChickWeight$weight,
     main = "Dispersió del pes",
     xlab = "Temps (dies)",
     ylab = "Pes (grams)",
     col = ChickWeight$Diet,  # Color per cada dieta
     pch = 19)  # Tipus de punt

  1. Creeu un diagrama de caixa amb la variable Time. Per a més informació sobre ChickWeight: https://rdrr.io/r/datasets/ChickWeight.html
#La variable Time és el temps (dies) des del naixement fins què es va mesurar el pes d'un pollet
boxplot(Time ~ Diet, data = ChickWeight,
        main = "Diagrama de caixa",
        xlab = "Dieta",
        ylab = "Temps (dies)",
        col = c("lightblue", "lightgreen", "lightpink", "lightyellow"))

Exercici 9:

A partir del conjunt de dades anorexia del paquet MASS, creeu un altre data frame que s’anomeni anorexia_treat_df format per Treat i per un vector nou calculat a partir de la diferència Prewt-Postwt. D’aquesta manera, ens quedarà un data frame que contingui el tipus de tractament i el valor del pes guanyat o perdut després d’haver fet el tractament. Seleccioneu aquells individus que han guanyat pes després del tractament i creeu un nou conjunt anomenat anorexia_treat_C_df que contingui només les dades d’aquells que han seguit el tractament «Cont» i que han guanyat pes després del tractament.

library(MASS)
data("anorexia")
anorexia_treat_df <- data.frame(tractament = anorexia$Treat, 
                                canvi_pes = anorexia$Postwt - anorexia$Prewt)
head(anorexia_treat_df)
##   tractament canvi_pes
## 1       Cont      -0.5
## 2       Cont      -9.3
## 3       Cont      -5.4
## 4       Cont      12.3
## 5       Cont      -2.0
## 6       Cont     -10.2
#Volem aquells que han guanyat pes, per tant, valors positius
anorexia_guany<- subset(anorexia_treat_df, canvi_pes > 0)
#el tractament ha de ser "Cont"
anorexia_treat_C_df <- subset(anorexia_guany, tractament == "Cont")
head(anorexia_treat_C_df)
##    tractament canvi_pes
## 4        Cont      12.3
## 8        Cont      11.6
## 10       Cont       6.2
## 13       Cont       8.3
## 14       Cont       3.3
## 15       Cont      11.3

Exercici 10:

Entreu a RPubs i registreu-vos. Creeu-vos un perfil i pugeu un document R Markdown. Els prerequisits són tenir instal·lat R i RStudio (v0.96.230 o més), i el paquet knitr (v0.5 o més). Passos que heu de seguir per publicar el vostre document:

  1. En RStudio, creeu un document R Markdown.

  2. Genereu el document amb Knit.

  3. A la finestra de previsualització, cliqueu el botó de publicar. Com a solució del vostre exercici, copieu l’enllaç de la vostra pàgina de prova d’RPubs.

Cas pràctic:

Resoleu els apartats següents:

  1. Creeu un conjunt de dades inventat amb R. Ha de contenir trenta observacions (quinze per a homes i quinze per a dones) per a sis variables amb aquestes característiques: Variable Nom Característiques Identificador Id caràcter Edat Edat numèrica Genere Gene 2 valors 1 = dona, 2 = home Tractament Tract Factor. Tres tipus de tractament (A, B i C) Pes Pes numèrica (en kg) Altura Alt numèrica (en cm)

    Identificador <- paste0("ID", 1:30)
    Edat <- sample(18:65, 30, replace = TRUE)
    Genere <- rep(c(1, 2), each = 15)  # 1 = dona, 2 = home
    Tractament <- sample(c("A", "B", "C"), 30, replace = TRUE)
    Pes <- round(runif(30, 50, 100), 1)  # Pes entre 50 i 100 kg
    Altura <- round(runif(30, 150, 200), 1)  # Alçada entre 150 i 200 cm
    
    data_cas_practic <- data.frame(Identificador, Edat, Genere, Tractament, Pes, Altura)
  2. Busqueu informació del vostre conjunt de dades i de les vostres variables.

    summary(data_cas_practic)
    ##  Identificador           Edat          Genere     Tractament       
    ##  Length:30          Min.   :18.0   Min.   :1.0   Length:30         
    ##  Class :character   1st Qu.:26.0   1st Qu.:1.0   Class :character  
    ##  Mode  :character   Median :38.5   Median :1.5   Mode  :character  
    ##                     Mean   :38.8   Mean   :1.5                     
    ##                     3rd Qu.:49.5   3rd Qu.:2.0                     
    ##                     Max.   :60.0   Max.   :2.0                     
    ##       Pes            Altura     
    ##  Min.   :50.70   Min.   :152.5  
    ##  1st Qu.:63.30   1st Qu.:165.2  
    ##  Median :75.20   Median :172.8  
    ##  Mean   :75.81   Mean   :175.1  
    ##  3rd Qu.:85.92   3rd Qu.:191.0  
    ##  Max.   :98.00   Max.   :199.8
    head(data_cas_practic)
    ##   Identificador Edat Genere Tractament  Pes Altura
    ## 1           ID1   24      1          B 51.0  193.9
    ## 2           ID2   55      1          A 84.8  154.2
    ## 3           ID3   36      1          A 75.3  192.6
    ## 4           ID4   60      1          B 58.3  197.9
    ## 5           ID5   35      1          A 86.0  193.3
    ## 6           ID6   18      1          B 75.1  189.9
  3. Creeu una nova variable a partir d’alguna de les que tinguem. Per exemple, podeu calcular l’IMC (IMC = pes (kg)/ [alçada (m)]2 i incloeu la nova variable en el conjunt de dades.

    data_cas_practic$IMC <- 
      round(data_cas_practic$Pes/(data_cas_practic$Altura/100)^2, 2)
    head(data_cas_practic)
    ##   Identificador Edat Genere Tractament  Pes Altura   IMC
    ## 1           ID1   24      1          B 51.0  193.9 13.56
    ## 2           ID2   55      1          A 84.8  154.2 35.66
    ## 3           ID3   36      1          A 75.3  192.6 20.30
    ## 4           ID4   60      1          B 58.3  197.9 14.89
    ## 5           ID5   35      1          A 86.0  193.3 23.02
    ## 6           ID6   18      1          B 75.1  189.9 20.83
  4. Creeu dos data frames diferenciats per a homes i dones amb dos noms diferents: Df_Homes i Df_Dones.

    df_dones <- subset(data_cas_practic, Genere == 1)
    df_homes <- subset(data_cas_practic, Genere == 2)
    head(df_dones)
    ##   Identificador Edat Genere Tractament  Pes Altura   IMC
    ## 1           ID1   24      1          B 51.0  193.9 13.56
    ## 2           ID2   55      1          A 84.8  154.2 35.66
    ## 3           ID3   36      1          A 75.3  192.6 20.30
    ## 4           ID4   60      1          B 58.3  197.9 14.89
    ## 5           ID5   35      1          A 86.0  193.3 23.02
    ## 6           ID6   18      1          B 75.1  189.9 20.83
    head(df_homes)
    ##    Identificador Edat Genere Tractament  Pes Altura   IMC
    ## 16          ID16   33      2          C 57.1  152.5 24.55
    ## 17          ID17   46      2          A 73.7  192.0 19.99
    ## 18          ID18   60      2          A 78.5  164.9 28.87
    ## 19          ID19   19      2          C 80.6  172.9 26.96
    ## 20          ID20   26      2          C 61.1  172.6 20.51
    ## 21          ID21   50      2          A 85.7  173.6 28.44
  5. Combineu de nou els dos fitxers anteriors i creeu el primer de nou amb l’ordre rbind().

    genere <- rbind(df_dones,df_homes)
    head(genere)
    ##   Identificador Edat Genere Tractament  Pes Altura   IMC
    ## 1           ID1   24      1          B 51.0  193.9 13.56
    ## 2           ID2   55      1          A 84.8  154.2 35.66
    ## 3           ID3   36      1          A 75.3  192.6 20.30
    ## 4           ID4   60      1          B 58.3  197.9 14.89
    ## 5           ID5   35      1          A 86.0  193.3 23.02
    ## 6           ID6   18      1          B 75.1  189.9 20.83