Multiplicación de vectores en BUGS y JAGS

9

En R, c (3,1,0) * c (2,0,1) == c (6,0,0). Este no es un producto punteado y no es un producto cruzado. Primero, ¿cuál es el nombre de este producto, y segundo, funciona en WinBUGS, OpenBUGS y / o JAGS?

Jack Tanner
fuente
2
esto es solo multiplicación por elementos. No estoy seguro de si funciona en WinBUGS, OpenBUGS o JAGS.
asumido normal el

Respuestas:

3

A diferencia de JAGS, WinBUGS y OpenBUGS no realizan esta forma de vectorización; usted tiene que escribir un bucle, y calcular cada elemento 'a mano', como se describió anteriormente.

invitado
fuente
4

Martyn Plummer señala que esto se implementa en JAGS, lo que me perdí al leer el manual. De Ch 5:

Las funciones escalares que toman argumentos escalares se vectorizan automáticamente. También se pueden invocar cuando los argumentos son matrices con dimensiones conformes o escalares. Entonces, por ejemplo, el escalar se puede agregar a la matriz usandocA

B <- A + c

en lugar de la forma más detallada

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

Para hacer una multiplicación basada en elementos, puede hacer un bucle for en esos idiomas y ¡listo! He usado bucles en WinBUGS sin problemas.

Curioso
fuente
¿Qué pregunta responde esta respuesta? No parece ser relevante aquí.
whuber
@ whubber, ¿por qué? Es perfectamente relevante. Ok, cambié un poco la publicación para ser más claro.
Curioso
Sí, un bucle for es lo que he estado haciendo hasta ahora; Me preguntaba si era posible una versión vectorizada.
Jack Tanner
He enviado una solicitud de función a JAGS: sourceforge.net/tracker/…
Jack Tanner
Gracias Tomás. Ahora veo la conexión: no está respondiendo la pregunta como se indicó, pero está ofreciendo una solución alternativa.
whuber
2

Por cierto, la multiplicación por elementos de dos vectores de igual longitud se denomina producto Hadamard (también conocido como producto Schur).

Anders Gorm
fuente