INTRODUCAO A LINGUAGEM R

Intro: Operacoes simples

2 + 3
2 - 3
2 * 3
2/3
2 + 2
3 + 4  # ; separa operadores
2^3  # potencia
exp(1)
log(2.718282)
log10(6)  # log base 10
log(9, 3)  # log base 3
pi
sqrt(4)
trunc(5.65)  #truncatura
round(5.65)
round(pi, 2)
round(pi, 5)  #arredondamentos

Erros

3/0  # + infinity
-3/0  # - infinity
0/0  # NaN: not a number

Criar objectos

a <- 2 + 3
b = 2 + 3
a
## [1] 5
b
## [1] 5
a
## [1] 5
x <- ((3 + 10)/3)^2
x  # Objecto x mais complexo
## [1] 18.78

Manipular os objectos em memoria

a + x
## [1] 23.78
a * x
## [1] 93.89

Lista objectos em memoria

ls()
## [1] "a" "b" "x"
rm(x)  #remove um objecto
ls()  # Nova lista já sem o objecto x
## [1] "a" "b"

Expressoes

NOTA: Diferencas de sintax entre “<-” ; “=”; “==” “!=”

2 == 3  # 2 é igual a 3?
2 != 3  # 2 não é igual a 3
is.finite(1)  # 1 é um numero finito?
is.infinite(10)  #10 é infinito?
is.infinite(Inf)  #inf é infinito

Criar vectores de dados

y <- c(1, 3, 4, 5, 8, 10)
y  #dados individuais
## [1]  1  3  4  5  8 10
length(y)
## [1] 6
x <- c(1:8)
x
## [1] 1 2 3 4 5 6 7 8
length(x)  # tamanho do objecto x (quantidade de dados)
## [1] 8

operacoes entre objectos em memoria

y * x
## Warning: longer object length is not a multiple of shorter object length
## [1]  1  6 12 20 40 60  7 24
cbind(y, x, y * x)
## Warning: longer object length is not a multiple of shorter object length
## Warning: number of rows of result is not a multiple of vector length (arg
## 1)
##       y x   
## [1,]  1 1  1
## [2,]  3 2  6
## [3,]  4 3 12
## [4,]  5 4 20
## [5,]  8 5 40
## [6,] 10 6 60
## [7,]  1 7  7
## [8,]  3 8 24

caracteristicas dos objectos

str(x)  #Estrutura
##  int [1:8] 1 2 3 4 5 6 7 8

estatisticas simples

summary(x)  #sumario dos dados
max(x)
min(x)
sum(x)
mean(x)
sd(x)
median(x)
range(x)
quantile(x)  #quartis
quantile(x, 0.1)  #quantil especifico

Objectos com missing values “=NA” no R

d <- c(1:8, NA)
d
## [1]  1  2  3  4  5  6  7  8 NA
mean(d)  # NA (not available) devido a 1 dos dados ser NA
## [1] NA
mean(d, na.rm = TRUE)  # retira os NAs
## [1] 4.5
mean(d, na.rm = T)
## [1] 4.5

Geradores de numeros aleatorios

runif(n = 1, min = 0, max = 1000)
## [1] 800.7

Geradores de numeros aleatorios com seed fixo

set.seed(23)
runif(n = 5, min = 0, max = 1)  # gerador de numeros aleatorios UNIFORMES entre 0 and 1
## [1] 0.5766 0.2231 0.3319 0.7107 0.8194
rnorm(n = 5, mean = 0, sd = 1)  # gerador de numeros aleatorios NORMAIS com media=0 e sd=1
## [1] -0.1924  2.0166  2.7076  0.5285 -0.4824
rpois(n = 100, lambda = 2)  # gerador de numeros aleatorios POISSON com lambda=2
##   [1] 1 2 2 4 2 2 1 1 3 1 3 3 4 0 3 2 1 1 1 1 3 1 4 4 1 3 0 1 2 3 3 0 1 1 3
##  [36] 2 3 1 3 4 0 1 5 2 4 1 1 2 1 0 1 0 5 2 6 2 3 4 2 0 1 3 1 2 4 3 0 4 3 3
##  [71] 0 1 4 0 1 0 1 2 2 2 1 3 2 2 0 4 2 1 1 0 3 3 3 4 1 1 2 1 2 2
hist(rpois(n = 1000, lambda = 2))

plot of chunk unnamed-chunk-13

rbinom(n = 100, size = 400, p = 0.5)  # gerador de numeros baseados em Bernouli trials: 400 trials com p.sucesso de 0.5
##   [1] 201 199 204 206 200 193 204 184 207 194 198 187 214 214 209 219 212
##  [18] 191 202 202 201 186 214 207 193 199 199 194 203 210 189 211 189 213
##  [35] 187 184 191 183 185 205 208 206 198 204 212 195 195 205 204 200 205
##  [52] 196 215 192 193 204 216 208 207 195 208 212 199 203 201 178 229 202
##  [69] 188 206 207 194 205 196 202 208 198 196 197 210 218 202 204 191 192
##  [86] 184 208 201 196 186 207 183 206 230 212 187 201 201 208 205
hist(rbinom(n = 100, size = 400, p = 0.5))

plot of chunk unnamed-chunk-13

Criar e trabalhar uma base de dados simples

idades <- c(35, 21, 25, 22, 22, 31, 18, 24, 19, 25)
idades
##  [1] 35 21 25 22 22 31 18 24 19 25
idades
##  [1] 35 21 25 22 22 31 18 24 19 25
mean(idades)
## [1] 24.2
median(idades)
## [1] 23
summary(idades)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    18.0    21.2    23.0    24.2    25.0    35.0
# ?summary #pedir ajuda online sobre uma função

Estatisticas mais complexas

# install.packages('fBasics') #instala o packadge no PC a partir do CRAN;
# Necessário fazer apenas '1' vez
library(fBasics)  # carrega o packadge para esta sessão específica de R; Necessário fazer em cada sessão nova de R
## Loading required package: MASS
## Loading required package: timeDate
## Loading required package: timeSeries
## Attaching package: 'fBasics'
## The following object is masked from 'package:base':
## 
## norm
basicStats(idades)
##               idades
## nobs         10.0000
## NAs           0.0000
## Minimum      18.0000
## Maximum      35.0000
## 1. Quartile  21.2500
## 3. Quartile  25.0000
## Mean         24.2000
## Median       23.0000
## Sum         242.0000
## SE Mean       1.6653
## LCL Mean     20.4328
## UCL Mean     27.9672
## Variance     27.7333
## Stdev         5.2662
## Skewness      0.7820
## Kurtosis     -0.6462
# ?basicStats #online descobrimos que podemos controlar os CI
basicStats(idades, ci = 0.9)
##               idades
## nobs         10.0000
## NAs           0.0000
## Minimum      18.0000
## Maximum      35.0000
## 1. Quartile  21.2500
## 3. Quartile  25.0000
## Mean         24.2000
## Median       23.0000
## Sum         242.0000
## SE Mean       1.6653
## LCL Mean     21.1473
## UCL Mean     27.2527
## Variance     27.7333
## Stdev         5.2662
## Skewness      0.7820
## Kurtosis     -0.6462
ls()
## [1] "a"      "b"      "d"      "idades" "x"      "y"

combinar objectos por colunas para comparar valores

cbind(basicStats(idades), basicStats(idades, ci = 0.9))
##               idades   idades
## nobs         10.0000  10.0000
## NAs           0.0000   0.0000
## Minimum      18.0000  18.0000
## Maximum      35.0000  35.0000
## 1. Quartile  21.2500  21.2500
## 3. Quartile  25.0000  25.0000
## Mean         24.2000  24.2000
## Median       23.0000  23.0000
## Sum         242.0000 242.0000
## SE Mean       1.6653   1.6653
## LCL Mean     20.4328  21.1473
## UCL Mean     27.9672  27.2527
## Variance     27.7333  27.7333
## Stdev         5.2662   5.2662
## Skewness      0.7820   0.7820
## Kurtosis     -0.6462  -0.6462

Graficos simples

plot(idades)

plot of chunk unnamed-chunk-18

idades
##  [1] 35 21 25 22 22 31 18 24 19 25
hist(idades)  #histograma automatico

plot of chunk unnamed-chunk-18

hist(idades, main = "Histograma das idades", col = "3", xlab = "Idades (anos)", 
    ylab = "N Obs")

plot of chunk unnamed-chunk-18

boxplot(idades)

plot of chunk unnamed-chunk-18

boxplot(idades, main = "Boxplot das idades", ylab = "Idade (anos)")

plot of chunk unnamed-chunk-18

Analises mais avançadas: Trabalhar com base de dados de Etmopterus

Definir a directoria de trabalho

setwd("D:\\Aulas\\2013_Curso_R-Kteam\\Aulas\\Sessao1")
getwd()  #confirmar directoria
## [1] "D:/Aulas/2013_Curso_R-Kteam/Aulas/Sessao1"

Carregar a base de dados

etmop <- read.table("Etmopterus-spinax.csv", header = TRUE, sep = ",", dec = ".", 
    na.strings = "NA")
# etmop
ls()
## [1] "a"      "b"      "d"      "etmop"  "idades" "x"      "y"
attach(etmop)
detach(etmop)

Ver os dados

# etmop
head(etmop, 20)  #20 primeiros dados
##    Index           Species Sexo CTcm    PTg Maturacao ArtePesca
## 1      1 Etmopterus spinax    M 18.7  26.79   Imaturo   Arrasto
## 2      2 Etmopterus spinax    M 18.5  24.68   Imaturo   Arrasto
## 3      3 Etmopterus spinax    M 26.2  75.75   Imaturo   Arrasto
## 4      4 Etmopterus spinax    M 32.8 143.79    Maturo   Arrasto
## 5      5 Etmopterus spinax    F 33.7 161.60    Maturo   Arrasto
## 6      6 Etmopterus spinax    M 29.7 103.64    Maturo   Arrasto
## 7      7 Etmopterus spinax    M 24.2  59.78   Imaturo   Arrasto
## 8      8 Etmopterus spinax    M 29.8 102.11    Maturo   Arrasto
## 9      9 Etmopterus spinax    F 21.4  40.24   Imaturo   Arrasto
## 10    10 Etmopterus spinax    M 19.7  29.25   Imaturo   Arrasto
## 11    12 Etmopterus spinax    F 33.2 159.00    Maturo   Arrasto
## 12    13 Etmopterus spinax    F 36.5 165.16    Maturo   Arrasto
## 13    14 Etmopterus spinax    F 36.1 197.30   Imaturo   Arrasto
## 14    15 Etmopterus spinax    F 19.5  30.86   Imaturo   Arrasto
## 15    16 Etmopterus spinax    F 23.1  48.61   Imaturo   Arrasto
## 16    17 Etmopterus spinax    F 18.9  24.93   Imaturo   Arrasto
## 17    18 Etmopterus spinax    F 24.3  60.34   Imaturo   Arrasto
## 18    28 Etmopterus spinax    M 27.6 100.14    Maturo   Arrasto
## 19    29 Etmopterus spinax    F 22.5  45.06   Imaturo   Arrasto
## 20    30 Etmopterus spinax    M 24.6  57.30   Imaturo   Arrasto
dim(etmop)  #tamanho da matriz de dados
## [1] 244   7
length(etmop)
## [1] 7

Estatisticas simples

str(etmop)
## 'data.frame':    244 obs. of  7 variables:
##  $ Index    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Species  : Factor w/ 1 level "Etmopterus spinax": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Sexo     : Factor w/ 2 levels "F","M": 2 2 2 2 1 2 2 2 1 2 ...
##  $ CTcm     : num  18.7 18.5 26.2 32.8 33.7 29.7 24.2 29.8 21.4 19.7 ...
##  $ PTg      : num  26.8 24.7 75.8 143.8 161.6 ...
##  $ Maturacao: Factor w/ 2 levels "Imaturo","Maturo": 1 1 1 2 2 2 1 2 1 1 ...
##  $ ArtePesca: Factor w/ 2 levels "Anzol","Arrasto": 2 2 2 2 2 2 2 2 2 2 ...
summary(etmop)
##      Index                     Species    Sexo         CTcm     
##  Min.   :   1.0   Etmopterus spinax:244   F:167   Min.   :14.3  
##  1st Qu.:  96.8                           M: 77   1st Qu.:28.2  
##  Median : 535.5                                   Median :31.7  
##  Mean   : 559.6                                   Mean   :30.7  
##  3rd Qu.: 880.2                                   3rd Qu.:34.9  
##  Max.   :1401.0                                   Max.   :40.7  
##       PTg          Maturacao     ArtePesca  
##  Min.   : 10.8   Imaturo: 87   Anzol  :149  
##  1st Qu.: 91.4   Maturo :157   Arrasto: 95  
##  Median :135.2                              
##  Mean   :140.3                              
##  3rd Qu.:185.2                              
##  Max.   :367.1
summary(etmop$CTcm)  #sumario apenas de 1 das variaveis dentro do objecto
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    14.3    28.2    31.7    30.7    34.9    40.7

Estatisticas mais complexas e por factores

basicStats(etmop$CTcm)
##             X..etmop.CTcm
## nobs            244.00000
## NAs               0.00000
## Minimum          14.30000
## Maximum          40.70000
## 1. Quartile      28.20000
## 3. Quartile      34.92500
## Mean             30.74221
## Median           31.70000
## Sum            7501.10000
## SE Mean           0.35701
## LCL Mean         30.03899
## UCL Mean         31.44544
## Variance         31.09899
## Stdev             5.57665
## Skewness         -0.75839
## Kurtosis         -0.04228
by(etmop$CTcm, etmop$Sexo, mean)
## etmop$Sexo: F
## [1] 32.72
## -------------------------------------------------------- 
## etmop$Sexo: M
## [1] 26.44
by(etmop$CTcm, etmop$Sexo, sd)
## etmop$Sexo: F
## [1] 4.691
## -------------------------------------------------------- 
## etmop$Sexo: M
## [1] 4.9
by(etmop$CTcm, etmop$ArtePesca, mean)
## etmop$ArtePesca: Anzol
## [1] 33.32
## -------------------------------------------------------- 
## etmop$ArtePesca: Arrasto
## [1] 26.7
by(etmop$CTcm, etmop$ArtePesca, sd)
## etmop$ArtePesca: Anzol
## [1] 3.239
## -------------------------------------------------------- 
## etmop$ArtePesca: Arrasto
## [1] 6.07

Graficos para variaveis qualitativas (factores)

Gráficos de barras (frequencias) para o factor Sexo

plot(etmop$Sexo, main = "Sexo Individuos Capturados", xlab = "sexo", ylab = "Frequencia (n)")

plot of chunk unnamed-chunk-24

plot(etmop$Sexo, main = "Sex of captured specimens", xlab = "Sex", ylab = "Frequency (n)", 
    names.arg = c("Females", "Males"))

plot of chunk unnamed-chunk-24

Graficos de barras (frequencias) para o factor Arte de pesca

plot(etmop$ArtePesca, main = "Arte de pesca", xlab = "Arte de pesca", ylab = "Frequencia (n)")

plot of chunk unnamed-chunk-25

Graficos para variaveis quantitativas (numericas)

boxplot(etmop$CTcm, data = etmop)

plot of chunk unnamed-chunk-26

hist(etmop$CTcm)

plot of chunk unnamed-chunk-26

# ?hist()
boxplot(CTcm ~ ArtePesca, data = etmop)

plot of chunk unnamed-chunk-26

boxplot(CTcm ~ Sexo, data = etmop)

plot of chunk unnamed-chunk-26

Construir 2 graficos numa pagina de trabalho

par(mfrow = c(1, 2))
boxplot(CTcm ~ Sexo, data = etmop, ylab = "CT (cm)", xlab = "Sexo")
boxplot(CTcm ~ ArtePesca, data = etmop, ylab = NULL, xlab = "Arte de pesca")

plot of chunk unnamed-chunk-27

Fancy plots with ggplot2

library(ggplot2)
box.sex <- ggplot(etmop, aes(factor(Sexo), CTcm))
box.sex + geom_boxplot() + facet_grid(. ~ ArtePesca)

plot of chunk unnamed-chunk-28

hist.CT <- ggplot(etmop, aes(x = CTcm))
hist.CT + geom_histogram(binwidth = 2) + facet_grid(ArtePesca ~ Sexo, scales = "free_y")

plot of chunk unnamed-chunk-28

Criar novas variaveis na base de dados

criar Log-Peso e Log-Tamanho

etmop$log.CTcm <- log(etmop$CTcm)
etmop$log.PTg <- log(etmop$PTg)
head(etmop)
##   Index           Species Sexo CTcm    PTg Maturacao ArtePesca log.CTcm
## 1     1 Etmopterus spinax    M 18.7  26.79   Imaturo   Arrasto    2.929
## 2     2 Etmopterus spinax    M 18.5  24.68   Imaturo   Arrasto    2.918
## 3     3 Etmopterus spinax    M 26.2  75.75   Imaturo   Arrasto    3.266
## 4     4 Etmopterus spinax    M 32.8 143.79    Maturo   Arrasto    3.490
## 5     5 Etmopterus spinax    F 33.7 161.60    Maturo   Arrasto    3.517
## 6     6 Etmopterus spinax    M 29.7 103.64    Maturo   Arrasto    3.391
##   log.PTg
## 1   3.288
## 2   3.206
## 3   4.327
## 4   4.968
## 5   5.085
## 6   4.641
str(etmop)
## 'data.frame':    244 obs. of  9 variables:
##  $ Index    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Species  : Factor w/ 1 level "Etmopterus spinax": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Sexo     : Factor w/ 2 levels "F","M": 2 2 2 2 1 2 2 2 1 2 ...
##  $ CTcm     : num  18.7 18.5 26.2 32.8 33.7 29.7 24.2 29.8 21.4 19.7 ...
##  $ PTg      : num  26.8 24.7 75.8 143.8 161.6 ...
##  $ Maturacao: Factor w/ 2 levels "Imaturo","Maturo": 1 1 1 2 2 2 1 2 1 1 ...
##  $ ArtePesca: Factor w/ 2 levels "Anzol","Arrasto": 2 2 2 2 2 2 2 2 2 2 ...
##  $ log.CTcm : num  2.93 2.92 3.27 3.49 3.52 ...
##  $ log.PTg  : num  3.29 3.21 4.33 4.97 5.09 ...

plot dos dados originais e log de peso-comprimento

par(mfrow = c(1, 2))
plot(etmop$CTcm, etmop$PTg, ylab = "W (g)", xlab = "CT (cm)", main = "Relação Peso-Comprimento")
plot(etmop$log.CTcm, etmop$log.PTg, ylab = "log-W (g)", xlab = "log-CT (cm)", 
    main = "Relação LogPeso-LogComprimento")

plot of chunk unnamed-chunk-30

Subset de dados

Ex: Posso criar uma “nova” base de dados apenas com os imaturos

etmop.imaturos <- subset(etmop, Maturacao == "Imaturo")  #novo objecto
head(etmop.imaturos)
##    Index           Species Sexo CTcm   PTg Maturacao ArtePesca log.CTcm
## 1      1 Etmopterus spinax    M 18.7 26.79   Imaturo   Arrasto    2.929
## 2      2 Etmopterus spinax    M 18.5 24.68   Imaturo   Arrasto    2.918
## 3      3 Etmopterus spinax    M 26.2 75.75   Imaturo   Arrasto    3.266
## 7      7 Etmopterus spinax    M 24.2 59.78   Imaturo   Arrasto    3.186
## 9      9 Etmopterus spinax    F 21.4 40.24   Imaturo   Arrasto    3.063
## 10    10 Etmopterus spinax    M 19.7 29.25   Imaturo   Arrasto    2.981
##    log.PTg
## 1    3.288
## 2    3.206
## 3    4.327
## 7    4.091
## 9    3.695
## 10   3.376
dim(etmop.imaturos)
## [1] 87  9
dim(etmop)
## [1] 244   9
# write.table(etmop.imaturos, file='imaturos.csv', sep=',', dec='.',
# row.names=FALSE, col.names=TRUE) # gravar em CSV

Filtar e criar novas variaveis com IF-ELSE

funcao IFELSE: mais simplificada

median(etmop$CTcm)
## [1] 31.7
etmop$CT.categorico <- ifelse(etmop$CTcm > median(etmop$CTcm), "Grandes", "Pequenos")
head(etmop, 30)
##    Index           Species Sexo CTcm    PTg Maturacao ArtePesca log.CTcm
## 1      1 Etmopterus spinax    M 18.7  26.79   Imaturo   Arrasto    2.929
## 2      2 Etmopterus spinax    M 18.5  24.68   Imaturo   Arrasto    2.918
## 3      3 Etmopterus spinax    M 26.2  75.75   Imaturo   Arrasto    3.266
## 4      4 Etmopterus spinax    M 32.8 143.79    Maturo   Arrasto    3.490
## 5      5 Etmopterus spinax    F 33.7 161.60    Maturo   Arrasto    3.517
## 6      6 Etmopterus spinax    M 29.7 103.64    Maturo   Arrasto    3.391
## 7      7 Etmopterus spinax    M 24.2  59.78   Imaturo   Arrasto    3.186
## 8      8 Etmopterus spinax    M 29.8 102.11    Maturo   Arrasto    3.395
## 9      9 Etmopterus spinax    F 21.4  40.24   Imaturo   Arrasto    3.063
## 10    10 Etmopterus spinax    M 19.7  29.25   Imaturo   Arrasto    2.981
## 11    12 Etmopterus spinax    F 33.2 159.00    Maturo   Arrasto    3.503
## 12    13 Etmopterus spinax    F 36.5 165.16    Maturo   Arrasto    3.597
## 13    14 Etmopterus spinax    F 36.1 197.30   Imaturo   Arrasto    3.586
## 14    15 Etmopterus spinax    F 19.5  30.86   Imaturo   Arrasto    2.970
## 15    16 Etmopterus spinax    F 23.1  48.61   Imaturo   Arrasto    3.140
## 16    17 Etmopterus spinax    F 18.9  24.93   Imaturo   Arrasto    2.939
## 17    18 Etmopterus spinax    F 24.3  60.34   Imaturo   Arrasto    3.190
## 18    28 Etmopterus spinax    M 27.6 100.14    Maturo   Arrasto    3.318
## 19    29 Etmopterus spinax    F 22.5  45.06   Imaturo   Arrasto    3.114
## 20    30 Etmopterus spinax    M 24.6  57.30   Imaturo   Arrasto    3.203
## 21    31 Etmopterus spinax    M 25.5  69.65   Imaturo   Arrasto    3.239
## 22    32 Etmopterus spinax    M 22.9  49.85   Imaturo   Arrasto    3.131
## 23    33 Etmopterus spinax    F 23.6  51.21   Imaturo   Arrasto    3.161
## 24    34 Etmopterus spinax    F 21.1  38.32   Imaturo   Arrasto    3.049
## 25    35 Etmopterus spinax    M 17.8  24.12   Imaturo   Arrasto    2.879
## 26    36 Etmopterus spinax    M 19.7  32.58   Imaturo   Arrasto    2.981
## 27    37 Etmopterus spinax    M 16.1  16.27   Imaturo   Arrasto    2.779
## 28    40 Etmopterus spinax    F 32.7 159.80   Imaturo   Arrasto    3.487
## 29    41 Etmopterus spinax    F 28.0 101.09   Imaturo   Arrasto    3.332
## 30    42 Etmopterus spinax    F 29.9 113.54   Imaturo   Arrasto    3.398
##    log.PTg CT.categorico
## 1    3.288      Pequenos
## 2    3.206      Pequenos
## 3    4.327      Pequenos
## 4    4.968       Grandes
## 5    5.085       Grandes
## 6    4.641      Pequenos
## 7    4.091      Pequenos
## 8    4.626      Pequenos
## 9    3.695      Pequenos
## 10   3.376      Pequenos
## 11   5.069       Grandes
## 12   5.107       Grandes
## 13   5.285       Grandes
## 14   3.429      Pequenos
## 15   3.884      Pequenos
## 16   3.216      Pequenos
## 17   4.100      Pequenos
## 18   4.607      Pequenos
## 19   3.808      Pequenos
## 20   4.048      Pequenos
## 21   4.243      Pequenos
## 22   3.909      Pequenos
## 23   3.936      Pequenos
## 24   3.646      Pequenos
## 25   3.183      Pequenos
## 26   3.484      Pequenos
## 27   2.789      Pequenos
## 28   5.074       Grandes
## 29   4.616      Pequenos
## 30   4.732      Pequenos
table(etmop$CT.categorico)
## 
##  Grandes Pequenos 
##      121      123

Ciclo IF: mais complexo

# função if que varre todos os valores de xi.  A aplicação pode ser
# complicada e é preciso ter cuidado para os valores não se irem
# sobrepondo
length(etmop)  # como é uma matriz de dados a função length dá o numero de variaveis
## [1] 10
dim(etmop)  # da as dimensões da matriz
## [1] 244  10
dim(etmop)[1]  #selecciona o 1o valor da matrtiz = nº obs (linhas)
## [1] 244
244
## [1] 244
# Ciclo FOR para criar nova variavel
for (i in 1:dim(etmop)[1]) {
    # para todos os valores que vão da 1a até á ultima obs.
    if (etmop$CTcm[i] < 30) 
        etmop$CT.categorico2[i] <- "Medios"
    if (etmop$CTcm[i] < 20) 
        etmop$CT.categorico2[i] <- "Pequenos"
    if (etmop$CTcm[i] >= 30) 
        etmop$CT.categorico2[i] <- "Grandes"
}
head(etmop, 30)
##    Index           Species Sexo CTcm    PTg Maturacao ArtePesca log.CTcm
## 1      1 Etmopterus spinax    M 18.7  26.79   Imaturo   Arrasto    2.929
## 2      2 Etmopterus spinax    M 18.5  24.68   Imaturo   Arrasto    2.918
## 3      3 Etmopterus spinax    M 26.2  75.75   Imaturo   Arrasto    3.266
## 4      4 Etmopterus spinax    M 32.8 143.79    Maturo   Arrasto    3.490
## 5      5 Etmopterus spinax    F 33.7 161.60    Maturo   Arrasto    3.517
## 6      6 Etmopterus spinax    M 29.7 103.64    Maturo   Arrasto    3.391
## 7      7 Etmopterus spinax    M 24.2  59.78   Imaturo   Arrasto    3.186
## 8      8 Etmopterus spinax    M 29.8 102.11    Maturo   Arrasto    3.395
## 9      9 Etmopterus spinax    F 21.4  40.24   Imaturo   Arrasto    3.063
## 10    10 Etmopterus spinax    M 19.7  29.25   Imaturo   Arrasto    2.981
## 11    12 Etmopterus spinax    F 33.2 159.00    Maturo   Arrasto    3.503
## 12    13 Etmopterus spinax    F 36.5 165.16    Maturo   Arrasto    3.597
## 13    14 Etmopterus spinax    F 36.1 197.30   Imaturo   Arrasto    3.586
## 14    15 Etmopterus spinax    F 19.5  30.86   Imaturo   Arrasto    2.970
## 15    16 Etmopterus spinax    F 23.1  48.61   Imaturo   Arrasto    3.140
## 16    17 Etmopterus spinax    F 18.9  24.93   Imaturo   Arrasto    2.939
## 17    18 Etmopterus spinax    F 24.3  60.34   Imaturo   Arrasto    3.190
## 18    28 Etmopterus spinax    M 27.6 100.14    Maturo   Arrasto    3.318
## 19    29 Etmopterus spinax    F 22.5  45.06   Imaturo   Arrasto    3.114
## 20    30 Etmopterus spinax    M 24.6  57.30   Imaturo   Arrasto    3.203
## 21    31 Etmopterus spinax    M 25.5  69.65   Imaturo   Arrasto    3.239
## 22    32 Etmopterus spinax    M 22.9  49.85   Imaturo   Arrasto    3.131
## 23    33 Etmopterus spinax    F 23.6  51.21   Imaturo   Arrasto    3.161
## 24    34 Etmopterus spinax    F 21.1  38.32   Imaturo   Arrasto    3.049
## 25    35 Etmopterus spinax    M 17.8  24.12   Imaturo   Arrasto    2.879
## 26    36 Etmopterus spinax    M 19.7  32.58   Imaturo   Arrasto    2.981
## 27    37 Etmopterus spinax    M 16.1  16.27   Imaturo   Arrasto    2.779
## 28    40 Etmopterus spinax    F 32.7 159.80   Imaturo   Arrasto    3.487
## 29    41 Etmopterus spinax    F 28.0 101.09   Imaturo   Arrasto    3.332
## 30    42 Etmopterus spinax    F 29.9 113.54   Imaturo   Arrasto    3.398
##    log.PTg CT.categorico CT.categorico2
## 1    3.288      Pequenos       Pequenos
## 2    3.206      Pequenos       Pequenos
## 3    4.327      Pequenos         Medios
## 4    4.968       Grandes        Grandes
## 5    5.085       Grandes        Grandes
## 6    4.641      Pequenos         Medios
## 7    4.091      Pequenos         Medios
## 8    4.626      Pequenos         Medios
## 9    3.695      Pequenos         Medios
## 10   3.376      Pequenos       Pequenos
## 11   5.069       Grandes        Grandes
## 12   5.107       Grandes        Grandes
## 13   5.285       Grandes        Grandes
## 14   3.429      Pequenos       Pequenos
## 15   3.884      Pequenos         Medios
## 16   3.216      Pequenos       Pequenos
## 17   4.100      Pequenos         Medios
## 18   4.607      Pequenos         Medios
## 19   3.808      Pequenos         Medios
## 20   4.048      Pequenos         Medios
## 21   4.243      Pequenos         Medios
## 22   3.909      Pequenos         Medios
## 23   3.936      Pequenos         Medios
## 24   3.646      Pequenos         Medios
## 25   3.183      Pequenos       Pequenos
## 26   3.484      Pequenos       Pequenos
## 27   2.789      Pequenos       Pequenos
## 28   5.074       Grandes        Grandes
## 29   4.616      Pequenos         Medios
## 30   4.732      Pequenos         Medios
table(etmop$CT.categorico2)
## 
##  Grandes   Medios Pequenos 
##      150       77       17

Outras funcoes e programacoes com interesse

###Funcao SAMPLE: reamostragem

Dados

y <- 1:10
y
##  [1]  1  2  3  4  5  6  7  8  9 10

Permutacoes

sample(y)  # permutações na ordem
##  [1] 10  7  6  2  4  1  3  8  5  9
sample(y, replace = TRUE)  # Permutações com reposicao (bootstrap)
##  [1]  2  3  3  4  7 10 10  3  3  9
sample(y, 8, replace = F)  # reamostragem de 8 valores SEM reposicao
## [1] 10  5  1  2  3  7  8  6
sample(y, 8, replace = T)  # reamostragem de 8 valores COM reposicao
## [1] 4 8 6 2 5 3 7 2

EXPERIENCIA: Amostragem aleatoria de uma populacao

gerar numeros aleatorios normais

Y <- rnorm(n = 250, mean = 0, sd = 1)  # Populacao verdadeira: 100 individuos aleatorios
length(Y)
## [1] 250
par(mfrow = c(1, 1))
hist(Y, breaks = "Scott")

plot of chunk unnamed-chunk-36

mean(Y)
## [1] -0.03855

retirar uma amostra aleatoria (x) da populacao Y: 50 indivíduos

x <- sample(Y, 100, replace = F)
length(x)
## [1] 100

Graficos a comparar a pop verdadeira com a amostra retirada

par(mfrow = c(1, 2))
hist(Y, main = "População verdadeira", breaks = "Scott")
hist(x, main = "População amostrada", breaks = "Scott")

plot of chunk unnamed-chunk-38

PROGRAMAR Funcoes simples

Programar uma funcao para calcular a media a custa de outras funções existentes no R

a.minha.media <- function(x) {
    sum(x)/length(x)
}

Usar a nova funcao programada

a <- c(2, 3, 4, 5, 6)
a.minha.media(a)
## [1] 4
a.minha.media(etmop$CTcm)
## [1] 30.74
mean(etmop$CTcm)
## [1] 30.74

Programar uma media “aldrabada”

a.minha.media.aldrabada <- function(x) {
    (sum(x) + 1)/length(x)
}

a.minha.media.aldrabada(a)
## [1] 4.2
a.minha.media.aldrabada(etmop$CTcm)
## [1] 30.75

FUNCOES com LOOPS

soma com loops

soma.com.loop <- function(x) {
    y <- 0  # Inicia um novo objecto
    for (i in 1:length(x)) y <- y + x[i]
    y
}

soma.com.loop(a)
## [1] 20
sum(a)
## [1] 20

media com loops

media.com.loop <- function(x) {
    z.soma <- 0  # Inicia um novo objecto para guardar as somas
    z.media <- 0  # Inicia um novo objecto para guardar a media final
    for (i in 1:length(x)) z.soma <- z.soma + x[i]
    z.media <- z.soma/length(x)
    z.media
}

media.com.loop(a)
## [1] 4
media.com.loop(etmop$CTcm)
## [1] 30.74
a.minha.media(etmop$CTcm)
## [1] 30.74
mean(etmop$CTcm)
## [1] 30.74
# NOTA: loops grandes podem ser muito lentos em R.