Multiplicação de vetor em erros e JAGS

9

Em R, c (3,1,0) * c (2,0,1) == c (6,0,0). Este não é um produto escalar e não é um produto cruzado. Primeiro, qual é o nome desse produto e, segundo, ele funciona no WinBUGS, OpenBUGS e / ou JAGS?

Jack Tanner
fonte
2
isso é apenas multiplicação por elementos. Não tenho certeza se ele funciona no WinBUGS, OpenBUGS ou JAGS.
assumednormal

Respostas:

3

Diferentemente do JAGS, o WinBUGS e o OpenBUGS não fazem essa forma de vetorização; você precisa escrever um loop e calcular cada elemento 'manualmente', como descrito acima.

hóspede
fonte
4

Martyn Plummer ressalta que isso é implementado no JAGS, que eu perdi ao ler o manual. Do capítulo 5:

Funções escalares que recebem argumentos escalares são automaticamente vetorizadas. Eles também podem ser chamados quando os argumentos são matrizes com dimensões ou escalares conformes. Assim, por exemplo, o escalar c pode ser adicionado à matriz A usando

B <- A + c

em vez da forma mais detalhada

D <- dim(A)
for (i in 1:D[1])
  for (j in 1:D[2]) {
    B[i,j] <- A[i,j] + c
  }
}
Jack Tanner
fonte
2

Para fazer a multiplicação por elementos, basta fazer um loop for nessas linguagens e pronto! Eu usei para loops no WinBUGS sem problemas.

Curioso
fonte
Que pergunta esta resposta responde? Não parece ser relevante aqui.
whuber
@whubber, por quê? É perfeitamente relevante. Ok, mudei o post um pouco para ficar mais claro.
Curioso
Sim, um loop for é o que tenho feito até agora; Eu apenas me perguntei se uma versão vetorizada era possível.
Jack Tanner
Enviei uma solicitação de recurso ao JAGS: sourceforge.net/tracker/…
Jack Tanner
Obrigado, Tomas. Agora vejo a conexão: você não está respondendo à pergunta como indicado, mas está oferecendo uma solução alternativa.
whuber
2

Aliás, a multiplicação por elementos de dois vetores de comprimento igual é chamada de produto Hadamard (também conhecido como produto de Schur).

Anders Gorm
fonte