Je veux d'abord calculer une matrice de transition markov puis en prendre l'exposant. Pour atteindre le premier but j'utilise la fonction markovchainFit
dans le paquet markovchain
et il me renvoie un data.frame, plutôt qu'une matrice. J'ai donc besoin de le convertir en matrice avant de prendre l'exposant. Mon extrait de code R est commeMatrice de transition d'accès à partir de l'objet markovchainFit
#################################
# Estimate Transition Matrix #
#################################
setwd("G:/Data_backup/GDP_per_Capita")
library("foreign")
library("Hmisc")
mydata <- stata.get("G:/Data_backup/GDP_per_Capita/states.dta")
mydata
library(markovchain)
library(expm)
rgdp_e=mydata[,2:7]
rgdp_o=mydata[,8:13]
createSequenceMatrix(rgdp_e)
rgdp_e_trans<-markovchainFit(data=rgdp_e,,method="bootstrap",nboot=5, name="Bootstrap Mc")
rgdp_e_trans<-as.numeric(unlist(rgdp_e_trans))
rgdp_e_trans<-as.matrix(rgdp_e_trans)
is.matrix(rgdp_e_trans)
rgdp_e_trans %^% 1/5
le rgdp_e_trans
est une trame de données, et je tente de le convertir en une matrice numérique. Il semble fonctionner quand je le teste en utilisant la commande is.matrix
. Cependant, la dernière ligne me donne une erreur dit
Error in rgdp_e_trans %^% 2 :
(list) object cannot be coerced to type 'double'
Après quelques travaux de recherche dans StackOverflow, je trouve this question partage le même problème et utiliser rgdp_e_trans<-as.numeric(unlist(rgdp_e_trans))
pour forcer l'objet à `double », mais il semble fonctionne pas. Par ailleurs, les rgdp_e_trans de data.frame contient aucun facteur ou caractères La sortie de la console est comme
> rgdp_e=mydata[,2:7]
> rgdp_o=mydata[,8:13]
> createSequenceMatrix(rgdp_e)
Error: not compatible with STRSXP
> rgdp_e_trans<-markovchainFit(data=rgdp_e,,method="bootstrap",nboot=5, name="Bootstrap Mc")
> rgdp_e_trans
$estimate
1 2 3 4 5
1 0.6172840 0.18930041 0.09053498 0.074074074 0.02880658
2 0.1125828 0.59602649 0.28476821 0.006622517 0.00000000
3 0.0000000 0.03846154 0.60256410 0.358974359 0.00000000
4 0.0000000 0.01162791 0.03488372 0.691860465 0.26162791
5 0.0000000 0.00000000 0.00000000 0.044247788 0.95575221
> rgdp_e_trans<-as.numeric(unlist(rgdp_e_trans))
Error: (list) object cannot be coerced to type 'double'
> rgdp_e_trans<-as.matrix(rgdp_e_trans)
> is.matrix(rgdp_e_trans)
[1] TRUE
> rgdp_e_trans %^% 1/5
Error in rgdp_e_trans %^% 1 :
(list) object cannot be coerced to type 'double'
>
Toute suggestion de résoudre le problème, ou autre façon de calculer l'exposant? Je vous remercie.
supplémentaires:
> str(rgdp_e_trans)
List of 1
$ estimate:Formal class 'markovchain' [package "markovchain"] with 4 slots
.. [email protected] states : chr [1:5] "1" "2" "3" "4" ...
.. [email protected] byrow : logi TRUE
.. [email protected] transitionMatrix: num [1:5, 1:5] 0.617 0.113 0 0 0 ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
.. .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
.. [email protected] name : chr "Bootstrap Mc"
et je commente la partie as.matrix
rgdp_e=mydata[,2:7]
rgdp_o=mydata[,8:13]
createSequenceMatrix(rgdp_e)
rgdp_e_trans<-markovchainFit(data=rgdp_e,,method="bootstrap",nboot=5, name="Bootstrap Mc")
rgdp_e_trans
str(rgdp_e_trans)
# rgdp_e_trans<-as.numeric(unlist(rgdp_e_trans))
# rgdp_e_trans<-as.matrix(rgdp_e_trans)
# is.matrix(rgdp_e_trans)
rgdp_e_trans$estimate %^% 1/5
Essayez 'rgdp_e_trans $ estimation% ^% 1/5'. –
Ne semble pas fonctionner. '> rgdp_e_trans $ estimation% ^% 1/5 Erreur dans rgdp_e_trans $ estimation% ^% 1: pas une matrice' – zlqs1985
Pourriez-vous ajouter la sortie de' str (rgdp_e_trans) 'après l'avoir créée avec' markovchainFit'? –