====== Dia 2 ====== ## soluções das atividades sugeridas 11:20 1:10 (11:20)*(1:10) sum((11:20)*(1:10)) ## veja aqui a lei da reciclagem e a mensagem de "warning" sum((10:20)*(1:10)) (10:20)*(1:10) ## aqui a reciclagem funciona sem "warning" (tamanho de um vetor é multiplo do outro) (11:15) (1:10) (11:15)*(1:10) sum((11:15)*(1:10)) ## a lei da reciclagem também funciona com matrizes M1 <- matrix(1:10, nc=2) M1 M1 * ((1:5)*10) ## outro exemplo sum(log(sqrt(2^(1:10)))) ## entrada de dados do exemplo usando codigos: 1-Coxa, 2-Furacão fut <- edit(data.frame()) fut ## inspecionando o objeto e seus atributos str(fut) names(fut) names(fut) <- c("Idade","Time") str(fut) ## recodificando fut <- transform(fut, Time = factor(Time, levels=1:2, labels=c("Coxa", "Furacão"))) ## adicionando uma nova couna aos dados de uma variável ordinal ## note a definição e importâncoia de se definir um fator ordenado fut <- edit(data.frame(fut)) fut <- transform(fut, Opina = factor(var3, levels=1:3, labels=c("Ruim", "Regular", "Bom"), ord=T)) fut$Opina fut$Opina fut[, "var3"] fut[, 3] fut[, -3] ## removendo a coluna desnecessária fut <- fut[,-3] fut attributes(fut) summary(fut) plot(fut) ## aqui foi discutido o conceitos fundamentais da linguagem S3: ## funções genéricas, classes e métodos ## ex de reg e despacho de métodos xydata <- data.frame(x = 1:20, y = c(0.9,5.1,2.4,8.1,4.2,7.1,5.6,7.6,5.9,7.7, 11.8,6.9,9.3,10.9,8.4,11.6,13.0,13.8,13.1,9.3) ) reg <- lm(y ~ x, data = xydata) summary(reg) plot(reg) class(reg) ## note o comportamento diferente de plot() e summary() para diferentes objetos, explicando o despacho de métodos ## a formula pode ser manipulada por várias funcos do R, por exemplo para extrair a matriz do modelo model.matrix(y ~ x, data = xydata) ## importando dados da web quest <- read.table("http://www.ime.usp.br/~noproest/dados/questionario.txt", head=T, sep="\t") #, dec=",", sep=";") head(quest) dim(quest) summary(quest) is.ordered(quest$Toler) levels(quest$Toler) ordered(quest$Toler, levels=c("P","M","I")) barplot(table)ordered(quest$Toler, levels=c("P","M","I"))) quest <- transform(quest, Toler=ordered(quest$Toler, levels=c("P","M","I"))) names(quest) with(quest, boxplot(Idade ~ Toler)) ########################################################################## ## fazendo gráfico de uma função x <- seq(0, 60, length=500) y <- 3 + 15 * exp(-x/10) plot(x,y, ty="l") ## fazendo de outra forma... fx <- function(x) 3 + 15 * exp(-x/10) plot(fx, from=0, to=60) class(fx) ## definindo um parâmetro da função que pode ser alterado fx <- function(x, alpha) 3 + 15 * exp(-x/alpha) plot(x, fx(x, alpha=10), ty="l", ylab="f(x)") lines(x, fx(x, alpha=5), ty="l", col=2) lines(x, fx(x, alpha=15), ty="l", col=4) legend("topright", c(expression(alpha==5), expression(alpha==10), expression(alpha==15)), col=c(2,1,4), lty=1) title(expression(paste("Função f(x) com diferentes valores de ",alpha))) pdf("exponenciais.pdf") fx <- function(x, alpha) 3 + 15 * exp(-x/alpha) plot(x, fx(x, alpha=10), ty="l", ylab="f(x)") lines(x, fx(x, alpha=5), ty="l", col=2) lines(x, fx(x, alpha=15), ty="l", col=4) legend("topright", c(expression(alpha==5), expression(alpha==10), expression(alpha==15)), col=c(2,1,4), lty=1) title(expression(paste("Função f(x) com diferentes valores de ",alpha))) dev.off() ## exemplo de integração (para função de uma variável) fx <- function(x) 3 + 15 * exp(-x/10) integrate(fx, 10, 20) integrate(fx) # tem, obrigatoriamente, que especificar limites de integração!!! integrate(fx, 0, 10) ## passando argumento adicional para a função fx <- function(x, alpha) 3 + 15 * exp(-x/alpha) integrate(fx, 10, 20, alpha=5) ## nem tudo é integrável... integrate(fx, 10, Inf, alpha=5) #Erro em integrate(fx, 10, Inf, alpha = 5) : # the integral is probably divergent ## definindo uma outra função fx <- function(x) (1/10) * exp(-x/10) ## .. é verificando que é uma f.d.p. integrate(fx, 0, Inf) #1 with absolute error < 0.00011 ## a função só é definida para valores não negativos... integrate(fx, -Inf, Inf) #Erro em integrate(fx, -Inf, Inf) : non-finite function value ## e a função fica melhor definida especificando seu domínio fx <- function(x) {ifelse(x>0, (1/10) * exp(-x/10), 0)} integrate(fx, -Inf, Inf) #1 with absolute error < 0.00011 ## para o exemplo no material use a função abs() para definir módulo abs(-5)