2017-10-18 10 views
1

Salut J'ai besoin d'aide dans le langage de programmation Mata de Stata pour l'exemple de fonctionnement minimum suivant. J'essaie d'insérer des sous-matrices de dimension (1x200) (générées par un tirage normal aléatoire) à l'intérieur d'une matrice de pointeur de dimension 600x1 (matrice V).Erreur de conformité de programmation Stata Mata

mata: 
T=600  //number of markets 
K_S=1 //number of variables with stochastic coefficients 
R=200 //number of random draws 
st_matrix("T", T) 
//pointers to the market specific random draws: 
V=J(T,1,NULL) // T by 1 0 matrix 

for(t=1;t<=T;t++){ 
V[t]=(rnormal(K_S,R,0,1)) //dimension K_S x R 
} 
end 

Le problème est que je reçois un « rnormal(): 3200 erreur conformabilité »

Pourriez-vous suggérer ce que je fais mal.

Merci

+2

Je ne peux pas dépasser 'st_matrix (" T ", 600)' dans votre cas, ce qui crée une matrice dans Stata (NB) qui est 1 x 1 et contient la constante 600. Quel est le point de cela? Cela ressemble au problème XY pour moi. Avez-vous besoin d'une matrice de 600 x 200 à la fois? Si oui, pourquoi ne pas le produire directement? Pourquoi les pointeurs sont-ils nécessaires? http://xyproblem.info/ –

Répondre

1

Vous essayez d'assigner une matrice K_S x R à une seule cellule dans un vecteur de colonne. Un pointeur doit être affecté, eh bien, un pointeur:

mata: 
T = 600 // number of markets 
K_S = 1 // number of variables with stochastic coefficients 
R = 200 // number of random draws 
st_matrix("T", T) 

// pointers to the market specific random draws: 
V = J(T, 1, NULL) // T by 1 0 matrix 

for(t=1; t<=T; t++){ 
    V[t]= &(rnormal(K_S, R, 0, 1)) //dimension K_S x R 
} 
end 

En mata la notation & signifie pointeur.

+0

Merci Mauricio. J'ai donc essayé la correction et j'obtiens ce résultat. mata: V + ------------- + 1 | 0xfa7f240 | 2 | 0xfa81cc0 | 3 | 0xfa80890 | 4 | 0xfa82320 | 5 | 0xfa82980 | 6 | 0xfa82870 | 7 | 0xfa82760 | 8 | 0xfa82210 | 9 | 0xfa81880 | 10 | 0xfa81990 | 11 | 0xfa80670 | Pourriez-vous me dire Qu'est-ce que cela signifie? J'ai pensé que j'obtiendrais une sous-matrice de dimension K_SxR dans un vecteur de colonne de 600x1. Est-ce que je fais quelque chose de mal? – Ska

+0

@Ska Non. Vous avez créé 600 + 1 objets. Un vecteur 600 x 1 et 600 matrices K_S x R. Un pointeur est juste une adresse, littéralement. Donc V est un vecteur avec 600 adresses et les objets réels sont ailleurs. Où sont-elles? Par exemple, V [1] est "0xfa7f240", qui est l'adresse de la matrice K_S x R en mémoire. Vous pouvez vous y reporter via * V [1], * V [2], etc. – Mauricio