Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
pessoais:jcfaria [2007/02/28 11:59] jcfariapessoais:jcfaria [2012/08/01 19:25] (atual) jcfaria
Linha 1: Linha 1:
-====== Página WIKI de José Cláudio Faria ======+====== José Cláudio Faria ======
  
-{{pessoais:i_in_the_beach_2007.png|125X210}} +{{  pessoais:i_in_the_beach_2007.png}} 
-Na Praia do Sul de Ilhéus, em janeiro de 2007, refletindo profundamente sobre o R!!!+ 
 +Eu na Praia do Sul de Ilhéus/BA, em janeiro de 2007, refletindo profundamente sobre estatística computacional e o R!!! 
 + 
 +Brincadeiras a parte... 
 + 
 +**1. Quem sou** 
 + 
 +- Engenheiro Agrônomo 
 +- Mestrado e Doutorado em Produção Vegetal pela Universidade Federal de Viçosa - UFV/MG 
 +- Pós-doc em estatística e experimentação agronômica (ESALQ) 
 + 
 + 
 +**2. O que tenho feito profissionalmente** 
 + 
 +- Professor de estatística e pesquisador da Universidade Estadual de Santa Cruz - UESC/BA; 
 + 
 +- Tenho estado desenvolvendo algumas soluções computacionais voltadas para o ambiente R: 
 +  - Editores: 
 +    - Tinn-R ([[http://sourceforge.net/projects/tinn-r/]]) 
 +    - Vim-R-plugin ([[http://www.vim.org/scripts/script.php?script_id=2628]]) 
 +  - Pacotes: 
 +    - bpca ([[http://cran.r-project.org/web/packages/bpca/index.html]]) 
 +    - TinnR ([[http://cran.r-project.org/web/packages/TinnR/index.html]]) 
 +    - fdth ([[http://cran.r-project.org/web/packages/fdth/index.html]]) 
 +    - ScottKnott ([[http://cran.r-project.org/web/packages/ScottKnott/index.html]]) 
 +    - TukeyC ([[http://cran.r-project.org/web/packages/TukeyC/index.html]]) 
 + 
 + 
 +**3. Sobre o R** 
 + 
 +- Gostaria de tê-lo encontrado desde o início de minha carreira na área de estatística computacional! 
 + 
 + 
 +**4. Sobre o futuro** 
 + 
 +- Desejo aprofundar os conhecimentos em análise multivariada de dados no ambiente R; 
 + 
 +- Trocar experiências com pessoas e equipes envolvidas nestas áreas.
  
 ===== Tinn-R ===== ===== Tinn-R =====
Linha 17: Linha 54:
     * {{pessoais:tinn-r_figure_06.png|}}     * {{pessoais:tinn-r_figure_06.png|}}
  
-===== Materiais didáticos sobre o R =====+===== Materiais sobre o R =====
  
 ==== Scripts ==== ==== Scripts ====
 +Todos os usuários estão automaticamente convidados a darem sugestões e alterarem contrutivamente todas as funções e scripts desta página. Solicito a gentileza de me enviar um [[joseclaudio.faria@terra.com.br | email]] comunicando as alterações.
 +
 === Introdução ao R === === Introdução ao R ===
  
Linha 558: Linha 597:
 } }
 </code> </code>
 +
 +==== Funções úteis ====
 +=== Superfície de resposta ===
 +== Função plotlm3d ==
 +The simple, power and very flexible function **plotlm3d** enables you to plot 3d points and/or surfaces obtained from linear methods. It was adapted from scatter3d [[http://socserv.socsci.mcmaster.ca/jfox/Misc/Rcmdr/index.html | Rcmdr package]] of John Fox and some [[ http://www.stat.wisc.edu/~deepayan | Deepayan Sarkar]] ideas.
 +
 +It requires the **rgl** package that you can download from [[http://cran.r-project.org|CRAN]].
 +
 +<code>
 +#===============================================================================
 +# Name           : plotlm3d
 +# Original author: John Fox (scatter3d from package Rcmdr)
 +# Changes        : Jose Claudio Faria and Duncan Murdoch
 +# Date (dd/mm/yy): 12/8/06 19:44:37
 +# Version        : v18
 +# Aim            : To plot 3d scatter, an or, surfaces with rgl package
 +#===============================================================================
 + 
 +# Arguments:
 +# x                 variable for horizontal axis.
 +# y                 variable for out-of-screen axis.
 +# z                 variable for vertical axis (response).
 +# surface           plot surface(s) (TRUE or FALSE).
 +# model             one or more linear model to fit ('z ~ x + y' is the default).
 +# groups            if NULL (the default), no groups are defined; if a factor,
 +#                   a different surface or set of surfaces is plotted for each
 +#                   level of the factor; in this event, the colours in plane.col
 +#                   are used successively for the points and surfaces.
 +# model.by.group    if TRUE the function will adjust one model for each level
 +#                   of groups; the order of the models must be the same of the
 +#                   level of the.
 +# model.summary     print summary or summaries of the model(s) fit (TRUE or FALSE).
 +# simple.axes       whether to draw sinple axes (TRUE or FALSE).
 +# box               whether to draw a box (TRUE or FALSE).
 +# xlab,           
 +# ylab,           
 +# zlab              axis labels.
 +# surface.col       vector of colours for regression planes, used in the order
 +#                   specified by fit.
 +# point.col         colour of points.
 +# grid.col          colour of grid lines on the regression surface(s).
 +# grid             plot grid lines on the regression surface(s) (TRUE or FALSE).
 +# grid.lines        number of lines (default, 26) forming the grid, in each of
 +#                   the x and z directions.
 +# sphere.factor     relative size factor of spheres representing points; the
 +#                   default size is dependent on the scale of observations.
 +# threshold         if the actual size of the spheres is less than the threshold,
 +#                   points are plotted instead.
 +# speed             revolutions of the plot per second.
 +# revolutions       number of full revolutions of the display.
 + 
 +plotlm3d <- function (x, y, z,
 +                      surface        = T,
 +                      model          = 'z ~ x + y',
 +                      groups         = NULL,
 +                      model.by.group = F,
 +                      model.summary  = F,
 +                      simple.axes    = T,
 +                      box            = F,
 +                      xlab           = deparse(substitute(x)),
 +                      ylab           = deparse(substitute(y)),
 +                      zlab           = deparse(substitute(z)),
 +                      surface.col    = c('blue', 'orange', 'red', 'green',
 +                                         'magenta', 'cyan', 'yellow', 'gray', 'brown'),
 +                      point.col      = 'yellow',
 +                      grid.col       = material3d("color"),
 +                      grid           = T,
 +                      grid.lines     = 26,
 +                      sphere.factor  = 1,
 +                      threshold      = 0.01,
 +                      speed          = 0.5,
 +                      revolutions    = 0)
 +{
 +  require(rgl)
 +  require(mgcv)
 +  summaries <- list()
 + 
 +  if ((!is.null(groups)) && model.by.group)
 +    if (!nlevels(groups) == length(model))
 +      stop('Model number is different of the number of groups')
 + 
 +  if ((!is.null(groups)) && (nlevels(groups) > length(surface.col)))
 +    stop('Number of groups exceeds number of colors')
 + 
 +  if ((!is.null(groups)) && (!is.factor(groups)))
 +    stop('groups variable must be a factor.')
 + 
 +  xlab; ylab; zlab
 +
 +  valid <- if (is.null(groups))
 +    complete.cases(x, y, z)
 +  else
 +    complete.cases(x, y, z, groups)
 + 
 +  x <- x[valid]
 +  y <- y[valid]
 +  z <- z[valid]
 +  
 +  if (!is.null(groups))
 +    groups <- groups[valid]
 + 
 +  levs <- levels(groups)
 +  size <- max(c(x,y,z))/100 * sphere.factor
 + 
 +  if (is.null(groups)) {
 +    if (size > threshold)
 +      spheres3d(x, y, z, color = point.col, radius = size)
 +    else
 +      points3d(x, y, z, color = point.col)
 +  }
 +  else {
 +    if (size > threshold)
 +      spheres3d(x, y, z, color = surface.col[as.numeric(groups)], radius = size)
 +    else
 +      points3d(x, y, z, color = surface.col[as.numeric(groups)])
 +  }
 +
 +  aspect3d(c(1, 1, 1))
 +
 +  if (surface) {
 +    xvals <- seq(min(x), max(x), length = grid.lines)
 +    yvals <- seq(min(y), max(y), length = grid.lines)
 +    
 +    dat  <- expand.grid(x = xvals, y = yvals)
 + 
 +    for (i in 1:length(model)) {
 +      if (is.null(groups)) {
 +        mod <- lm(formula(model[i]))
 + 
 +        if (model.summary)
 +          summaries[[model[i]]] <- summary(mod)
 +
 +        zhat <- matrix(predict(mod, newdata = dat), grid.lines, grid.lines)
 +        surface3d(xvals, yvals, zhat, color = surface.col[i], alpha = 0.5, lit = F)
 +
 +        if (grid)
 +          surface3d(xvals, yvals, zhat, color = grid.col, alpha = 0.5,
 +            lit = F, front = 'lines', back = 'lines')
 +      }
 +      else { # groups is not NULL
 +        if (!model.by.group) {
 +          for (j in 1:length(levs)) {
 +            mod <- lm(formula(model[i]), subset = (groups == levs[j]))
 + 
 +            if (model.summary)
 +              summaries[[paste(model[i], '.', levs[j], sep = '')]] <- summary(mod)
 + 
 +            zhat <- matrix(predict(mod, newdata = dat), grid.lines, grid.lines)
 +            surface3d(xvals, yvals, zhat, color = surface.col[j], alpha = 0.5, lit = F)
 + 
 +            if (grid)
 +             surface3d(xvals, yvals, zhat, color = grid.col, alpha = 0.5,
 +                lit = F, front = 'lines', back = 'lines')
 + 
 +            texts3d(min(x), min(y), predict(mod, newdata = data.frame(x = min(x), y = min(y),
 +              groups = levs[j])), paste(levs[j], ' '), adj = 1, color = surface.col[j])
 +          }
 +        }
 +        else { # model.by.group is TRUE
 +          mod <- lm(formula(model[i]), subset = (groups == levs[i]))
 + 
 +          if (model.summary)
 +            summaries[[paste(model[i], '.', levs[i], sep = '')]] <- summary(mod)
 + 
 +          zhat <- matrix(predict(mod, newdata = dat), grid.lines, grid.lines)
 + 
 +          surface3d(xvals, yvals, zhat, color = surface.col[i], alpha = 0.5, lit = F)
 + 
 +          if (grid)
 +            surface3d(xvals, yvals, zhat, color = grid.col, alpha = 0.5,
 +              lit = F, front = 'lines', back = 'lines')
 + 
 +          texts3d(min(x), min(y), predict(mod, newdata = data.frame(x = min(x), y = min(y),
 +            groups = levs[i])), paste(levs[i], ' '), adj = 1, color = surface.col[i])
 +        }
 +      }
 +    }
 +  }
 +  if(simple.axes) {
 +    axes3d(c('x', 'y', 'z'))
 +    title3d(xlab = xlab, ylab = ylab, zlab = zlab)
 +  }
 +  else
 +    decorate3d(xlab = xlab, ylab = ylab, zlab = zlab, box = box)
 +
 +  if (revolutions > 0) {
 +    start <- proc.time()[3]
 +    startMatrix <- par3d("userMatrix")
 +    while ((theta <- speed*(proc.time()[3] - start))/2/pi < revolutions) {
 +      rgl.viewpoint(userMatrix = rotate3d(startMatrix, theta, 0, 0, 1))
 +    }
 +  }
 +  if (model.summary)
 +    return(summaries)
 +  else
 +    return(invisible(NULL))
 +}
 +</code>
 +
 +== Usando a função plotlm3d ==
 +<code>
 +#===============================================================================
 +# Name           : Script to test plotlm3d
 +# Author         : Jose Claudio Faria and Duncan Murdoch
 +# Date (dd/mm/yy): 2012/07/01
 +# Version        : v18
 +# Aim            : To plot 3d scatter, an or, surfaces with rgl package
 +#===============================================================================
 +
 +# mtrace(plotlm3d)
 +# mtrace.off
 +
 +# Example 1
 +open3d()
 +rgl.bringtotop(stay = T)
 +with(iris, plotlm3d(Sepal.Length, Sepal.Width, Petal.Length,
 +                    surface       = F,
 +                    groups        = Species,
 +                    xlab          = 'SL',
 +                    ylab          = 'SW',
 +                    zlab          = 'PL',
 +                    grid          = F,
 +                    sphere.factor = 1))
 +
 +# Example 2
 +open3d()
 +rgl.bringtotop(stay = T)
 +with(iris, plotlm3d(Sepal.Length,Sepal.Width, Petal.Length,
 +                    model         = c('z ~ x + y',
 +                                      'z ~ x + y + I(x^2) + I(y^2) + I(x*y)'),
 +                    surface       = T,
 +                    groups        = Species,
 +                    simple.axes   = F,
 +                    box           = T,
 +                    xlab          = 'SL',
 +                    ylab          = 'SW',
 +                    zlab          = 'PL',
 +                    grid          = F,
 +                    sphere.factor = 1))
 +
 +# Example 3
 +open3d()
 +rgl.bringtotop(stay = T)
 +with(iris, plotlm3d(Sepal.Length,Sepal.Width, Petal.Length,
 +                    model         = c('z ~ x + y',
 +                                      'z ~ x + y + I(x^2) + I(y^2) + I(x*y)'),
 +                    surface       = T,
 +                    xlab          = 'SL',
 +                    ylab          = 'SW',
 +                    zlab          = 'PL',
 +                    grid          = F,
 +                    sphere.factor = 1))
 +
 + # Example 4
 + open3d()
 + rgl.bringtotop(stay = T)
 + with(iris, plotlm3d(Sepal.Length, Sepal.Width, Petal.Length,
 +                     model          = c('z ~ x + y',                            # to setosa
 +                                        'z ~ x + y + I(x^2) + I(y^2) + I(x*y)', # to versicolor
 +                                        'z ~ I(x^3) + I(y^3)'),                 # to virginica
 +                     groups         = Species,
 +                     model.by.group = T,
 +                     simple.axes    = F,
 +                     box            = F,
 +                     xlab           = 'SL',
 +                     ylab           = 'SW',
 +                     zlab           = 'PL',
 +                     grid           = F,
 +                     sphere.factor  = 1))
 +
 +# Example 5: Netter
 +x = c( 274,  180,  375,  205,   86,  265,   98,  330,  195,   53,
 +       430,  372,  236,  157,  370)
 +y = c(2450, 3254, 3802, 2838, 2347, 3782, 3008, 2450, 2137, 2560,
 +      4020, 4427, 2660, 2088, 2605)
 +z = c( 162,  120,  223,  131,   67,  169,   81,  192,  116,   55,
 +       252,  232,  144,  103,  212)
 +
 +mreg  = lm(z ~ x + y)
 +ndata = data.frame(x = c(150, 274, 220, 370), y = c(4000, 2800, 3500, 3100))
 +zpred = predict(mreg, newdata = ndata, se.fit = F)
 +
 +open3d()
 +rgl.bringtotop(stay = T)
 +plotlm3d(x, y, z,
 +         surface = T,
 +         model   = 'z ~ x + y',
 +         xlab    = 'x',
 +         ylab    = 'y',
 +         zlab    = 'z')
 +spheres3d(x = c(150, 274, 220, 370), y = c(4000, 2800, 3500, 3100), zpred,
 +          col = 'red', radius = 60)
 +</code>
 +

QR Code
QR Code pessoais:jcfaria (generated for current page)