[R-br] Simulação de um DQL no R

Jose Claudio Faria joseclaudio.faria em gmail.com
Quinta Maio 10 23:13:17 BRT 2012


Edmundo,

Em adição ao que o Walmes falou, creio que isso dependerá de
conhecimento das operações matriciais envolvidas em cada delineamento.
Para DQL não tenho pronto. Tenho para DIC, DBC e Fatorial.

Vou exemplificar com DBC e você poderá adaptar para DQL (com as
matrizes adequadas).
Uso para simular experimentos nas provas individuais para os alunos
resolverem em casa.

O experimento será gravado em um arquivo (DBC.txt no exemplo) com um
número variáveis de resposta (Y) igual ao comprimento do vetor "mat".

#=============================================================================
# Função para gerar DBC - Delineamento em Blocos ao Acaso
#=============================================================================
ger.dbc <- function(mu, sd, mat, Xblo, Eblo, Xtra, Etra, file)
{
  stopifnot(mat        == NULL,
            mu         == NULL,
            sd         == NULL,
            Xblo       == NULL,
            Eblo       == NULL,
            Xtra       == NULL,
            Etra       == NULL,
            ncol(Xblo) == nrow(Eblo),
            ncol(Xtra) == nrow(Etra))

  # Gerar matrix experimental
  l.tra <- gl(n=ncol(Xtra), k=nrow(Xtra)/ncol(Xtra),
labels=LETTERS[1:ncol(Xtra)])
  blo   <- paste('B', 1:(nrow(Xtra)/ncol(Xtra)), sep='')
  me    <- data.frame(tra=l.tra, blo=blo)

  bl <- Xblo %*% Eblo                   # gerar efeito de bloco
  tr <- Xtra %*% Etra                   # gerar efeito de tratamento

  # Modelar experimento
  m  <- NULL
  for(i in 1:length(mat)) {
    set.seed(mat[i])
    e    <- rnorm(nrow(Xtra), sd=sd)    # gerar erro aleatório <-> aluno
    y.al <- round(mu + bl + tr + e, 2)  # definir y
    m    <- cbind(m, y.al)              # acumular
  }
  colnames(m) <- mat

  # Gerar resultado final (data.frame)
  dfm <- cbind(me, m)

  # Gravar dados para serem usados na análise
  write.table(dfm,
              file=file,
              quote=FALSE, row.names=FALSE)

  return(dfm)
}

mat <- c(20121, 20122) # o vetor mat. vc pode colocar os números que quiser...

#=============================================================================
# Dados necessários para gerar o DBC e chamada a função "ger.dbc"
#=============================================================================
dbc1 <- ger.dbc(
  file='DBC.txt',
  mu=10,
  sd=3,
  mat,

  Xblo=matrix(c(
  # 1  2  3  4   # Incidência dos blocos
    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1,

    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1,

    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1,

    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1,

    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1), byrow=T, ncol=4),

  Eblo=matrix(c(4, 2, 1, 4), byrow=T, ncol=1),

  Xtra=matrix(c(
  # A  B  C  D  E (tr)
    1, 0, 0, 0, 0,   # Incidência dos tratamentos
    1, 0, 0, 0, 0,
    1, 0, 0, 0, 0,
    1, 0, 0, 0, 0,

    0, 1, 0, 0, 0,
    0, 1, 0, 0, 0,
    0, 1, 0, 0, 0,
    0, 1, 0, 0, 0,

    0, 0, 1, 0, 0,
    0, 0, 1, 0, 0,
    0, 0, 1, 0, 0,
    0, 0, 1, 0, 0,

    0, 0, 0, 1, 0,
    0, 0, 0, 1, 0,
    0, 0, 0, 1, 0,
    0, 0, 0, 1, 0,

    0, 0, 0, 0, 1,
    0, 0, 0, 0, 1,
    0, 0, 0, 0, 1,
    0, 0, 0, 0, 1), byrow=T, ncol=5),

  Etra=matrix(c(2, 5, 5, 4, 4), byrow=T, ncol=1))

Rode o código acima no seu R!

Em seguida digite no console:
> getwd() # para ver onde o arquivo DBC.txt foi gravado
> dir() para ver os arquivos existente na pasta de trabalho do R. Deverá ver o DBC.txt
> file.show('DBC.txt')

Ab,
-- 
///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
Jose Claudio Faria
Estatistica
UESC/DCET/Brasil
joseclaudio.faria at gmail.com
///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\


Mais detalhes sobre a lista de discussão R-br