Blog Post number 2
Published:
Base R - Ambiente de trabalho
Objetos, operações e funções
Operações Matemáticas
1 + 1
4 - 2
2 * 3
5 / 3
4 ^ 2
40/3 * 2
(40 + 5 + 23) * 2
pi/5
Criando Objetos
- Sempre procurar usar para nomes de objetos, principalmente para os longos, o uso de “_”, evitando outros tipos de símbolos que podem causar problemas.
v_1 <- "UTFPR" ##o sinal " <- " significa atribuição
v_1
v_2 <- c(1,2.5,40,32) # isso é um vetor
- Utilizando o parenteses na linha de comando, ao rodar o resultado já é mostrado na tela.
(v_2 <- c(1,2.5,40,32))
- Ao escrever uma função deve-se ficar atento aos parenteses. Caso o R entenda que está faltando algo ele avisará e em alguns casos aparecerá um “+” para você colocar oque falta.
- Fazendo operações com vetores
v_3 <- v_2 - 1
v_3
v_4 <- v_3/2
v_4
v_5 <- v_4*3
v_5
v_6 <- v_2 + v_3 + v_4 + v_5
v_6
Matrizes
- A matriz nada mais é que um vetor com duas dimensões, ou seja, linha e coluna. Aceita penas um tipos de classe (não pode ter numérico e caractere junto por exemplo)
?matrix
m1 <- matrix(1:8, nrow = 2, ncol = 4)
m1
m2 <- matrix(1:20, 5, 4)
m2
Listas
listas permitem armazenar dados de classes diferentes e de comprimentos diferentes
l1 <- list(Universidade = v_1, Campus= "Pato Branco", Curso = "Agronomia", Dia = Sys.time())
l1
Data Frame
- O data frame é a forma de guardar dados mais importante quando se fala em análise de dados. Ele permite que tenha várias classes, porém todas as variáveis devem ter o mesmo comprimento (ex.: mesma quantidadde de linha). Outra observação importante é que um data frame deve ser organizado de forma que cada coluna represente uma variável e que cada linha represente uma observação (Unidade experimental).
npk # Isso é um dataframe
Formando um dataframe
df2 <- data.frame(rep(1:5, each = 4), rep(1:4,5), rnorm(20, 8, 2))
names(df2) <- c("tratamento", "bloco", "produtividade")
df2
Para saber sobre determinado dataframe, matriz, vetor ou lista:
str(npk)
str(df2)
Acesso de colunas e linhas de um objeto (matriz, vetor, lista ou dataframe)
v_2[3] # retorna o terceiro valor do vetor v_2
m2[,2] # retorna a segunda coluna da matriz
m2[1,] # retorna a primeira linha da matriz
m2[1, 2] # retorna o valor em determinada linha e coluna
npk$yield # retorna coluna específica de dataframe (o $ funciona apenas em listas e dataframe),
l1$Curso
df2$produtividade # retorna a coluna produtividade do dataframe
Funções
log(5, base = 10)
sqrt(4)
pi/5
mean(1:5)
sum(1,3,4)
round(10/3)
round(sum(1.5,mean(1:10),log(3)))
- Criando as próprias funções
####### - A criação de funções é uma forma de simplificar o código e torná-los mais práticos.
soma <- function(x = 0, y = 0, z = 0, w =0 , v = 0) {
resposta <- x + y + z + w + v
return(resposta)
}
soma(5, 7)
- Regra de Três
soma(5)
regratres <- function(a = 0, b = 0, c = 0) {
resposta <- (c*b)/a
}
x <- regratres(50, 100, 25)
x
- Equação da Continuidade
eq.cont <- function(v1= 0, a2 = 0, v2 = 0) {
resposta <- (a2*v2)/v1
}
x <- eq.cont(10, 57, 12)
x
Test T
data("sleep") # Arquivo de dados exemplo
str(sleep)
t.test(data = sleep, extra ~ group)
Anova
data("npk")
str(npk)
a1<- aov(data = npk, yield ~ N*P*K + block)
summary(a1)
Teste de normalidade por Shapiro-Wilk
shapiro.test(a1$residuals) # p>0.05 (normal)
Regressão linear
lm1 <- lm(data=iris, Sepal.Length ~ Petal.Length)
summary(lm1)
lm2 <- lm(iris$Sepal.Length ~ iris$Petal.Length + iris$Petal.Width)
summary(lm2)
Aplicando os modelos de regressão linear com funções
- Obtendo os coeficientes:
model <- lm(iris$Sepal.Length ~ iris$Petal.Length+iris$Sepal.Width) coef <- model$coefficients
- Formando uma função:
se_len <- function(petal.length = 0, sepal.width = 0) {
y <- (coef[1]+(coef[2]*petal.length) + (coef[3]*sepal.width))
return(y)
}
- Aplicando a função:
x <- se_len(iris[,3], iris[,2])
Gráfico com valores preditos e reais:
plot(x, iris$Sepal.Length)
summary(lm(iris$Sepal.Length ~ x))
função extra:
tapply(npk$yield, npk$block, mean) # média de produtividade para cáda bloco
tapply(npk$yield, npk$N, mean) # média de produtividade para cada nível de N
tapply(npk$yield, npk$N, sum) # soma
tapply(npk$yield, npk$N, sd) # desvio padrão
tapply(npk$yield, npk$N, var) #variancia
tapply(npk$yield, npk$N, min) # mínimo
tapply(npk$yield, npk$N, max) # máximo
tapply(npk$yield, npk$N, median) # mediana
Pacote dplyr e magrittr - Manipulação de dados
o Pacote magrittr tem o operador %>% (pipe) que evita fazer empilhamento de funções e criação de objetos desnecessários que podem atrapalhar a fucionalidade do código.
library(tidyverse) # chama todos os pacotes do tidyverse
library(dplyr) # chama só o dplyr
library(magrittr) # para usar o pipe ( %>% )
aim <- iris %>% group_by(Species) %>% summarise_all(c(mean = mean,sd = sd)) #Média e desvio ara cada espécies com o uso do %>%
# sem o uso de %>% ficaria:
aim <- group_by(.data = iris, Species)
aim <- summarise_all(.tbl = aim, c(mean = mean, sd = sd)) # usa o c() para concaternar mais de uma função.
# Pode fazer de apenas uma variável também
aim <- iris %>% group_by(Species) %>% summarise(mean = mean(Sepal.Width))
Obs.: Quando se tem vários fatores que devem cada um ter a sua média (Experimentos fatoriais) quando usar o group_by() inserir todos os fatores:
aim <- npk %>% group_by(N,P,K) %>% summarise(yield = mean(yield)) # Tipo um trifatorial
Filtrar por determinado valor de coluna específica
aim <- iris %>% filter(Species == "setosa") # pode ser asism
aim <- filter(.data = iris, Species == "virginica") # ou assim
Selecionar apenas colunas de interesse
aim <- iris %>% select(Species, Petal.Length, Sepal.Length)
Pacote Reshape2
####### Melt - Fazer várias colunas (variáveis) virarem uma única coluna com adição dos nomes de cada variável em suas respectivas observações.
library(reshape2)
data <- melt(iris,id.vars = "Species") # as colunas que serão mantidas devem ser indicadas em "id.vars"
# perceba que todas as colunas com exceção de "Species" viraram uma única coluna denominada "value" com os respectivos nomes na coluna "variable"
# Para alterar os nomes das colunas criadas (variable e value) só adicionar os argumentos "variable.name" e "value.name"
data <- melt(iris, id.vars = "Species", variable.name = "Variáveis", value.name = "Medidas")