Commit 340aeb09 authored by Eduardo E. R. Junior's avatar Eduardo E. R. Junior
Browse files

Merge branch 'issue#11' into 'master'

Issue#11

Adiciona arquivos html com galerias de exemplos das bibliotecas `rpanel`, `gWidgets`, `rCharts`, `animation` e `rgl`

See merge request !9
parents d1b23675 34be9e2b
---
title: IGUIR2 - Galeria Animation
author: Eduardo E. Ribeiro Jr \& Walmes M. Zeviani
output:
html_document:
css: ../galery.css
toc: yes
---
```{r setup, include=FALSE}
library(animation)
library(knitr)
```
> Galeria de animações em estatística e utilitários para a criação de animações em R
> (Yihui Xie)
## Instalação
[http://cran.r-project.org/web/packages/animation](http://cran.r-project.org/web/packages/animation)
[https://github.com/yihui/animation](https://github.com/yihui/animation)
```{r, eval=FALSE}
install.packages("animation")
require(animation)
```
## Animações disponíveis
* `bisection.method()`
* `boot.iid()`
* `boot.lowess()`
* `brownian.motion()`
* `BM.circle()`
* `g.brownian.motion()`
* `buffon.needle()`
* `clt.ani()`
* `conf.int()`
* `cv.ani()`
* `flip.coin()`
* `grad.desc()`
* `kmeans.ani()`
* `knn.ani()`
* `least.squares()`
* `lln.ani()`
* `MC.hitormiss()`
* `MC.samplemean()`
* `mwar.ani()`
* `newton.method()`
* `price.ani()`
* `quincunx()`
* `sample.cluster()`
* `sample.simple()`
* `sample.strat()`
* `sample.system()`
* `sample.ratio()`
* `sim.qqnorm()`
## Exemplos
### Intervalos de Confiança
```{r, eval=TRUE, echo=TRUE, message=FALSE}
## Demonstração do conceito de intervalos de confiança
saveHTML(conf.int(),
autobrowse = FALSE,
img.name = "confint",
imgdir = "confint",
interval = 0.1,
htmlfile = "confint.html",
verbose = FALSE)
```
<center>
<iframe src="confint.html" width=100% height = 700 frameborder="0" scrolling="no" marginheight="0" marginwidth="0"> </iframe>
</center>
### Lançamento de uma moeda
```{r, eval=TRUE, echo=TRUE, message=FALSE}
## Demonstração a convergência do lançamento de uma moeda
saveHTML(flip.coin(),
autobrowse = FALSE,
img.name = "flipcoin",
imgdir = "flipcoin",
interval = 0.1,
htmlfile = "flipcoin.html",
verbose = FALSE)
```
<center>
<iframe src="flipcoin.html" width=100% height = 700 frameborder="0" scrolling="no" marginheight="0" marginwidth="0"> </iframe>
</center>
### Algoritmo de agrupamento K-Means
```{r, eval=TRUE, echo=TRUE, message=FALSE}
## Demonstração do conceito do algoritmo de agrupamento K-means
saveHTML(kmeans.ani(),
autobrowse = FALSE,
img.name = "kmeans",
imgdir = "kmeans",
interval = 0.1,
htmlfile = "kmeans.html",
verbose = FALSE)
```
<center>
<iframe src="kmeans.html" width=100% height = 700 frameborder="0" scrolling="no" marginheight="0" marginwidth="0"> </iframe>
</center>
### Método de mínimos quadrados
```{r, eval=TRUE, echo=TRUE, message=FALSE}
## Demonstração do método de mínimos quadrados
saveHTML(least.squares(),
autobrowse = FALSE,
img.name = "leastsquares",
imgdir = "leastsquares",
interval = 0.1,
htmlfile = "leastsquares.html",
verbose = FALSE)
```
<center>
<iframe src="leastsquares.html" width=100% height = 700 frameborder="0" scrolling="no" marginheight="0" marginwidth="0"> </iframe>
</center>
### Tábua de Galton (quincunx)
```{r, eval=TRUE, echo=TRUE, message=FALSE}
## Demonstração da tábua de galton (Binomial -> Normal)
saveHTML(quincunx(),
autobrowse = FALSE,
img.name = "quincunx",
imgdir = "quincunx",
interval = 0.1,
nmax = 200 + 15 -2,
htmlfile = "quincunx.html",
verbose = FALSE)
```
<center>
<iframe src="quincunx.html" width=100% height = 700 frameborder="0" scrolling="no" marginheight="0" marginwidth="0"> </iframe>
</center>
### Integração via _Sample Mean Monte Carlo_
```{r, eval=TRUE, echo=TRUE, message=FALSE}
## Demonstração do método de integração numérica via simulação Monte Carlo
saveHTML(MC.samplemean(),
autobrowse = FALSE,
img.name = "mcsample",
imgdir = "mcsample",
interval = 0.1,
htmlfile = "mcsample.html",
verbose = FALSE)
```
<center>
<iframe src="mcsample.html" width=100% height = 700 frameborder="0" scrolling="no" marginheight="0" marginwidth="0"> </iframe>
</center>
### Método de _Newton-Raphson_
```{r, eval=TRUE, echo=TRUE, message=FALSE, warning=FALSE}
f <- quote(sin(x)-x^2/16) # expressão da função, queremos obter a raíz
fx0 <- function(x){ eval(f) } # função
f1 <- D(f,"x") # expressão da derivada
fx1 <- function(x){ eval(f1) } # função
i <- 1 # valor inicial para o passo
dif <- 10 # valor inical para a diferença entre duas avaliações
tol <- 10^-9 # diferência mínima entre duas avaliações (tolerância)
dif <- 100 # número máximo de passos
x <- -7 # valor inicial para a raiz
while(i<100 & dif>tol){
x[i+1] <- x[i]-fx0(x[i])/fx1(x[i])
dif <- abs(x[i+1]-x[i])
i <- i+1
}
## Demostração do algoritmo Newton-Raphson para otimização de função
saveHTML({
for(j in 2:i){
curve(fx0, -10, 10, main=paste("passo ", j-1, ", (x = ",
round(x[j],2), ")", sep=""))
abline(h=0, lty=2)
arrows(x[j-1], fx0(x[j-1]), x[j], fx0(x[j]), length=0.1, col=3, lwd=2)
abline(v=x[j], h=fx0(x[j]), lty=3, col=2)
}
abline(v=x[i], h=fx0(x[i]), col=2, lwd=2)
text(0, -3, label="CONVERGIU!", cex=2)
ani.pause() },
autobrowse = FALSE,
img.name = "newton",
imgdir = "newton",
interval = 0.1,
htmlfile = "newton.html",
verbose = FALSE)
```
<center>
<iframe src="newton.html" width=100% height = 700 frameborder="0" scrolling="no" marginheight="0" marginwidth="0"> </iframe>
</center>
### Regressão Segmentada
```{r, eval=TRUE, echo=TRUE, message=FALSE, warning=FALSE}
df02 <- structure(list( x = c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,
0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2), Y1 = c(5.5,
7.2, 10.4, 7.4, 7.2, 9.1, 15.9, 12.7, 11.3, 14.4, 14.8, 17.1, 31.4,
17.5, 27.6, 19.6, 27.1, 21, 33.8, 30.2, 45.1), Y2 = c(0.8, 1.5, 2.6,
1.5, 1.4, 2.1, 3.9, 3.3, 3, 3.9, 4.2, 4.8, 6.9, 5.5, 7.3, 6.7, 8.2,
8.1, 10.2, 10.7, 12.8)), .Names = c("x", "Y1", "Y2"), class =
"data.frame", row.names = c(NA, -21L))
newdata <- seq(0, 2, len = 1000)
seq.b <- seq(0, 2, 0.05)
desvios <- rep(NA, length(seq.b))
## Demostração de uma regressão segmentada com diferentes pontos de
## quebra
saveHTML(
for(i in 1:length(seq.b)){
b <- seq.b[i]
m0 <- lm(Y1 ~ x + I(pmax(x - b, 0)), data = df02)
beta <- coefficients(m0)
desvios[i] <- sum(residuals(m0)^2)
cols <- c(rep(3, sum(df02$x < seq.b[i])),
rep(4, sum(df02$x > seq.b[i] | df02$x == seq.b[i])))
par(mfrow = c(1, 2))
plot(Y1 ~ x, data = df02, pch = 19, col = cols); grid()
if(b == 0){
abline(a = coef(m0)[1], b = coef(m0)[2], col = 4, lwd = 2)
}
if(b == 2){
abline(a = coef(m0)[1], b = coef(m0)[2], col = 3, lwd = 2)
}
if(b != 0 & b != 2){
curve(beta[1] + beta[2] * x, from = 0, to = b,
col = 3, add = TRUE)
curve(beta[1] + beta[2] * b + (beta[3] + beta[2]) * (x - b),
from = b, to = 2,
col = 4, lwd = 2, add = TRUE)
}
plot(seq.b, desvios, type = "o", pch = 19, xlab = "Pontos de Quebra"); grid()
ani.pause()
},
autobrowse = FALSE,
img.name = "piecewise",
imgdir = "piecewise",
interval = 0.1,
htmlfile = "piecewise.html",
verbose = FALSE)
```
<iframe src="piecewise.html" width=100% height = 700 frameborder="0" scrolling="no" marginheight="0" marginwidth="0"> </iframe>
## Referências
1. [http://vis.supstat.com/](http://vis.supstat.com/categories.html#animation-ref)
2. [http://www.jstatsoft.org/v53/i01/paper](http://www.jstatsoft.org/v53/i01/paper)
---
title: IGUIR2 - Galeria gWidgets
author: Eduardo E. Ribeiro Jr \& Walmes M. Zeviani
output:
html_document:
css: ../galery.css
toc: yes
---
> Ferramentas para criação de GUIs interativas no R
> (John Verzani)
## Instalação
[http://cran.r-project.org/web/packages/gWidgets/](http://cran.r-project.org/web/packages/gWidgets/)
[https://github.com/jverzani/gWidgets2](https://github.com/jverzani/gWidgets2)
```{r, eval=FALSE, bootstrap.show.code=FALSE}
install.packages("gWidgets")
require(gWidgets)
options(guiToolkit = "tcltk") ## RGtk2
```
## Exemplos
### Botão de ação (gbutton)
```{r, eval=FALSE}
require(gWidgets)
options(guiToolkit="tcltk")
x <- precip
ht <- hist(x)
hist.reactive <- function(...){
col <- sample(colors(), size=1)
plot(ht, main=NULL,
ylab="Frequência absoluta", xlab="Precipitação",
col=col, sub=col)
}
w <- gwindow("Histograma")
gbutton(text="Nova cor!", container=w, handler=hist.reactive)
```
![](./gifs/hist_Button.gif)
### Caixa de seleção (gcheckbox)
```{r, eval=FALSE}
require(gWidgets)
options(guiToolkit="tcltk")
x <- precip
ht <- hist(x)
col <- rep("#3366CC", length(ht$counts))
hist.reactive <- function(...){
if(svalue(modal)){
col[which.max(ht$counts)] <- "#142952"
}
plot(ht, col=col, main=NULL,
ylab="Frequência absoluta",
xlab="Precipitação")
if(svalue(rg)){
rug(x)
}
}
w <- gwindow("Histograma")
rg <- gcheckbox(text="Marcar sobre eixo com os valores?",
checked=FALSE, container=w, handler=hist.reactive)
modal <- gcheckbox(text="Destacal a classe modal?",
checked=FALSE, container=w, handler=hist.reactive)
```
![](./gifs/hist_Checkbox.gif)
### Caixas de seleção múltipla (gcheckboxgroup)
```{r, eval=FALSE}
require(gWidgets)
options(guiToolkit="tcltk")
x <- precip
ht <- hist(x)
nc <- length(ht$counts)
cols <- c(Vermelho="#F81D54", Amarelo="#FF9F1E", Azul="#2791E1", Verde="#72F51D")
cols2 <- c(cols, rev(cols))
hist.reactive <- function(...){
seqcol <- colorRampPalette(cols2[svalue(colors)])
plot(ht, col=seqcol(nc),
main=NULL,
ylab="Frequência absoluta",
xlab="Precipitação")
}
w <- gwindow("Histograma")
g <- gframe(text="Escolha as cores para interpolar:", container=w)
colors <- gcheckboxgroup(items=names(cols2),
checked=c(TRUE, is.na(cols2)[-1]),
container=g, handler=hist.reactive)
```
![](./gifs/hist_Checkboxgroup.gif)
### Botões de incremento (gspimbutton)
```{r, eval=FALSE}
require(gWidgets)
options(guiToolkit="tcltk")
x <- precip
ht <- hist(x)
hist.reactive <- function(...){
m <- svalue(mar)
par(mar=c(m, m, 1, 1))
plot(ht, col="#660066",
main=NULL, axes=FALSE, ann=FALSE,
xaxt="n", yaxt="n")
box(bty="L")
axis(side=1, cex.axis=svalue(cexaxis))
axis(side=2, cex.axis=svalue(cexaxis))
title(ylab="Frequência absoluta",
xlab="Precipitação",
line=svalue(line))
}
w <- gwindow("Histograma")
g <- gframe(text="Tamanho do texto dos eixos:", container=w)
mar <- gspinbutton(from=3, to=7, by=0.5, value=5,
container=g, handler=hist.reactive)
svalue(mar) <- 5
g <- gframe(text="Tamanho do texto dos eixos:", container=w)
cexaxis <- gspinbutton(from=0.5, to=2, by=0.1, value=1,
container=g, handler=hist.reactive)
svalue(cexaxis) <- 1
g <- gframe(text="Distância dos rótulos dos eixos:", container=w)
line <- gspinbutton(from=1, to=4, by=0.1, value=3,
container=g, handler=hist.reactive)
svalue(line) <- 3
```
![](./gifs/hist_Numeric.gif)
### Múltipla escolha (gradio)
```{r, eval=FALSE}
require(gWidgets)
options(guiToolkit="tcltk")
x <- precip
ht <- hist(x)
choices <- c(Turquesa="#00CC99",
Azul="#0066FF",
Rosa="#FF3399",
Laranja="#FF6600",
Roxo="#660066",
"Verde limão"="#99FF33")
hist.reactive <- function(...){
plot(ht,
col=choices[svalue(col)],
main=NULL,
ylab="Frequência absoluta",
xlab="Precipitação")
}
w <- gwindow("Histograma")
g <- gframe(text="Escolha a cor para as barras:", container=w)
col <- gradio(items=names(choices),
selected=1,
container=g, handler=hist.reactive)
```
![](./gifs/hist_Radio.gif)
### Caixas de seleção (gcombobox)
```{r, eval=FALSE}
require(gWidgets)
options(guiToolkit="tcltk")
Nclass <- c("Sturges", "Scott", "Freedman-Diaconis")
Obj <- c("precip","rivers","islands")
hist.reactive <- function(...){
L <- switch(svalue(obj),
precip=list(x=precip, xlab="Precipitação anual média (polegadas)"),
rivers=list(x=rivers, xlab="Comprimento dos rios (milhas)"),
islands=list(x=islands, xlab="Área de ilhas (1000 milhas quadradas)"))
hist(L$x,
breaks=svalue(nclass),
col="#8F0047",
main=NULL,
ylab="Frequência absoluta",
xlab=L$xlab)
rug(L$x)
}
w <- gwindow("Histograma")
glabel(text="Escolha o conjunto de dados:", container=w)
obj <- gcombobox(items=Obj, selected=1, container=w,
handler=hist.reactive)
glabel(text="Escolha a regra para número de classes:", container=w)
nclass <- gcombobox(items=Nclass, selected=1, container=w,
handler=hist.reactive)
w <- gwindow("Histograma")
g <- gframe(text="Escolha o conjunto de dados:", container=w)
obj <- gcombobox(items=Obj, selected=1, container=g,
handler=hist.reactive)
g <- gframe(text="Escolha a regra para número de classes:", container=w)
nclass <- gcombobox(items=Nclass, selected=1, container=g,
handler=hist.reactive)
```
![](./gifs/hist_Select.gif)
### Deslizador (gslider)
```{r, eval=FALSE}
require(gWidgets)
options(guiToolkit="tcltk")
x <- precip
## Extremos com amplitude estendida em 5%.
a <- extendrange(x, f=0.05)
hist.reactive <- function(...){
bks <- seq(a[1], a[2], length.out=svalue(nclass)+1)
hist(x,
breaks=bks,
main=NULL,
col="#008A8A",
ylab="Frequência absoluta",
xlab="Precipitação")
}
w <- gwindow("Histograma")
g <- gframe(text="Escolha o número de classes:", container=w)
nclass <- gslider(from=1, to=30, by=1, value=10,
container=g, handler=hist.reactive)
```
![](./gifs/hist_Slider.gif)
### Entrada de texto (gedit)
```{r, eval=FALSE}
require(gWidgets)
options(guiToolkit="tcltk")
x <- precip
ht <- hist(x)
hist.reactive <- function(...){
plot(ht, col="#006666",
ylab="Frequência absoluta",
xlab="Precipitação",
main=svalue(main),
sub=svalue(sub))
}
w <- gwindow("Histograma")
g <- gframe(text="Texto para o título:", container=w)
main <- gedit(text=NULL,
initial.msg="Insira e pressione Enter",
coerce.with="as.character",
container=g, handler=hist.reactive)
g <- gframe(text="Texto para o subtítulo:", container=w)
sub <- gedit(text=NULL,
initial.msg="Insira e pressione Enter",
coerce.with="as.character",
container=g, handler=hist.reactive)
```
![](./gifs/hist_Text.gif)
/* Tamanho de fonte do texto */
body, td, caption {
font-family: "Palatino Linotype","Book Antiqua",Palatino,serif;
background-color: #FFF;
font-size: 20px;
}
p {
margin: 0px 10px 10px;
}
/* Configura o estilo do título */
#header {
/* background-color: #F6F6F6; */
border-top: 2px solid #A96CBA;
border-right: 0px solid black;
border-bottom: 2px solid #A96CBA;
border-left: 0px solid black;
padding: 10px;
margin: 20px;
}
h1.title {
text-align: center
}
h4.author {
text-align: center
}
h4.date {
text-align: center
}
h4 {
text-align: center
}
/* Configura a tabela de conteúdo */
#TOC {
clear: both;
margin: 10px 0px 0px 30px;
padding: 10px;
width: 400px;
border: 1px solid #CCC;
border-radius: 0px;
background-color: #F6F6F6;
font-size: 15px;
line-height: 1.5;
}
/* Configura a formatação dos capitulos (headers) */
h2, .h2 {
font-size: 30px;
border-top: 0px solid black;
border-right: 0px solid black;
border-bottom: 2px solid #A96CBA;
border-left: 0px solid black;
width: 40%
}
/* Customização do ambiente de código */