[RStata][Statamarkdown] Utiliser Stata dans R
Terminé
Utiliser Stata dans R
Ici nous allons présenter les librairies RStata et Statamarkdown qui permettent d’utiliser Stata dans R.
Note 1: Toutes les librairies stata dans R exigent d’avoir Stata installé sur le PC
Note 2: Dans ce tutoriel, nous indiquons library() pour charger les librairies (ou en anglais packages ou library). Mais il est nécessaire de les avoir téléchargées au préalable avec la fonction install.packages(). Pour la librairie Statamarkdown, il est nécessaire d’utiliser une méthode d’importation particulière qui sera présente au moment venu
Ressources
Rstata https://www.rdocumentation.org/packages/RStata/versions/1.1.1
Statamarkdown https://github.com/Hemken/Statamarkdown
Rprofile https://www.roelpeters.be/what-is-the-rprofile-file/
RStata
Introduction
Rstata est une librairie qui permet d’utiliser le logiciel stata dans R en utilisant la fonction stata().
Librairie
library(RStata)
Choisir (l’exécutable) Stata
Il existe deux moyens de le faire. Le premier ne marche que sur le moment et le suivant est durable.
chooseStataBin()
La fonction chooseStataBin() permet de sélectionner manuellement l’emplacement du fichier Stata.exe pour l’intégrer à R. Les fonctions de stata pourront ensuite être lancée depuis R. Par contre, il faudra réutiliser la fonction et choisir manuellement le fichier à chaque nouvelle session, ce qui peut être embêtant. De plus, il faudra à chaque fois indiquer dans la fonction stata() quelle version de Stata on utilise, ce qui peut aussi être embêtant à la longue.
chooseStataBin()
.Rprofile
Une méthode plus durable est de mettre dans les options globale du .Rprofile l’emplacement du fichier Stata.exe à utiliser. Ainsi, il ne sera plus nécessaire d’utiliser la fonction chooseStataBin() à chaque nouvelle session. On peut aussi en profiter pour ajouter la version de Stata dans les options pour éviter d’avoir à le spécifier à chaque fois que nous utilisons la fonction Stata().
Le .Rprofile est un fichier Stata qui se lance au début de chaque session de R. Il permet de rentrer du code R et peut être assez pratique pour mettre en place des routines. Par exemple, charger automatiquement des packages ou des données à chaque nouvelle session de R. Le but ici sera de préciser à R de fixer dans les options globale le chemin du fichier Stata.exe et sa version.
# Ouvrir le .Rprofile méthode 1
file.edit(".Rprofile")
# Ouvrir le .Rprofile méthode 2
usethis::edit_r_profile()
Dans le .Rprofile, il faut coller le chemin pour le fichier Stata.exe et la version dans la nouvelle fenêtre “.Rprofile” de cette manière [avec mon chemin par exemple]:
Note: J’utilise Stata16 dans cet exemple
stataexe = "C:/Users/hateg/Desktop/CODE/Stata16/StataSE-64.exe"
options(RStata.StataPath = stataexe)
options(RStata.StataVersion = 16)
Il faut enregistrer le fichier et nous pouvons fermer le R profile. Une fois que c’est fait il sera peut-être nécessaire de redémarrer R la première fois seulement, mais le reste du temps on n’aura plus à se soucier de la fonction chooseStataBin(), ni de la précision de la version en utilisant la fonction stata().
Lancer des codes Stata depuis R
Lancer une ligne de code
Pour lancer les codes dans Stata, il suffit simplement d’utiliser la fonction stata() avec le code dedans. Par exemple:
Si la version n’est pas fixée
stata(stata.version=16,"di 2+2")
## . di 2+2
## 4
Si la version est fixée
stata("di 2+2")
## . di 2+2
## 4
Comme nous pouvons le voir, fixer la version une fois est plus rapide. Pour les prochains exemples nous partons du principe que la version est fixée. Si ce n’est pas votre cas, il suffit simplement d’ajouter “stata.version=[votre version de stata en chiffre]” dans la fonction.
Lancer plusieurs lignes de code
Pour lancer plusieurs lignes de code, il suffit de lancer de retourner à la ligne:
Note: Nous utilisons “sysuse auto” pour appeler un tableau de données “auto” qui se trouve de base dans Stata.
stata("
sysuse auto
sum
")
## .
## . sysuse auto
## (1978 Automobile Data)
## . sum
##
## Variable | Obs Mean Std. Dev. Min Max
## -------------+---------------------------------------------------------
## make | 0
## price | 74 6165.257 2949.496 3291 15906
## mpg | 74 21.2973 5.785503 12 41
## rep78 | 69 3.405797 .9899323 1 5
## headroom | 74 2.993243 .8459948 1.5 5
## -------------+---------------------------------------------------------
## trunk | 74 13.75676 4.277404 5 23
## weight | 74 3019.459 777.1936 1760 4840
## length | 74 187.9324 22.26634 142 233
## turn | 74 39.64865 4.399354 31 51
## displacement | 74 197.2973 91.83722 79 425
## -------------+---------------------------------------------------------
## gear_ratio | 74 3.014865 .4562871 2.19 3.89
## foreign | 74 .2972973 .4601885 0 1
## .
Envoyer un tableau de données de R
Pour utiliser un tableau de données de R, il suffit d’ajouter le nom du tableau dans le paramètre “data.in=” de la fonction Stata:
Note: le tableau de données cars est de base dans R et peut être utilisé à n’importe quel moment sans avoir besoin de l’invoquer avant. Les deux seules variables du tableau de données cars sont “dist” et “speed”.
stata(data.in=cars,
"
sum
reg dist speed
")
## .
## . sum
##
## Variable | Obs Mean Std. Dev. Min Max
## -------------+---------------------------------------------------------
## speed | 50 15.4 5.287644 4 25
## dist | 50 42.98 25.76938 2 120
## . reg dist speed
##
## Source | SS df MS Number of obs = 50
## -------------+---------------------------------- F(1, 48) = 89.57
## Model | 21185.4589 1 21185.4589 Prob > F = 0.0000
## Residual | 11353.5211 48 236.531689 R-squared = 0.6511
## -------------+---------------------------------- Adj R-squared = 0.6438
## Total | 32538.98 49 664.060816 Root MSE = 15.38
##
## ------------------------------------------------------------------------------
## dist | Coef. Std. Err. t P>|t| [95% Conf. Interval]
## -------------+----------------------------------------------------------------
## speed | 3.932409 .4155128 9.46 0.000 3.096964 4.767853
## _cons | -17.57909 6.75844 -2.60 0.012 -31.16785 -3.99034
## ------------------------------------------------------------------------------
## .
Importer un tableau de donnée de Stata
Nous pouvons importer un tableau de données de Stata:
auto <- stata("sysuse auto",data.out=TRUE)
## . sysuse auto
## (1978 Automobile Data)
head(auto)
## make price mpg rep78 headroom trunk weight length turn displacement
## 1 AMC Concord 4099 22 3 2.5 11 2930 186 40 121
## 2 AMC Pacer 4749 17 3 3.0 11 3350 173 40 258
## 3 AMC Spirit 3799 22 NA 3.0 12 2640 168 35 121
## 4 Buick Century 4816 20 3 4.5 16 3250 196 40 196
## 5 Buick Electra 7827 15 4 4.0 20 4080 222 43 350
## 6 Buick LeSabre 5788 18 3 4.0 21 3670 218 43 231
## gear_ratio foreign
## 1 3.58 Domestic
## 2 2.53 Domestic
## 3 3.08 Domestic
## 4 2.93 Domestic
## 5 2.41 Domestic
## 6 2.73 Domestic
Ou envoyer un tableau et le récupérer modifié:
stata(data.in=cars,
"gen speed2 = speed + rnorm(0,3)",
data.out=TRUE) -> cars2
## . gen speed2 = speed + rnorm(0,3)
## unknown function rnorm()
## r(133);
head(cars2)
## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 5 8 16
## 6 9 10
Statamarkdown
Comme son nom l’indique, cette librairie permet d’utiliser stata directement dans un markdown, c’est-à-dire de pouvoir écrire le code dans un chunk.
Note: Au point ou j’en suis, je ne sais pas comment échanger les données de R et Stata avec cette librairie. Pour pouvoir faire ça, je recommande la librairie précédente, c’est-à-dire RStata.
Installation de Statamarkdown
Ici, l’installation est particulière. Il faut avoir installé la librairie devtools:
install.packages("devtools")
Puis charger detools:
library(devetools)
Puis lancer l’installation se trouvant sur un git:
install_github("hemken/Statamarkdown")
Finalement, nous pouvons ouvrir la librairie Statamarkdown:
Note: Il n’est pas nécessaire de faire ça à chaque fois, les prochaines fois, il suffira juste de lancer la commande library(Statamarkdown).
Markdown
Maintenant, il suffit d’ouvrir un fichier Rmarkdown puis d’ajouter la ligne de code suivante au premier chunk [dans stataexe j’indique l’emplacement du logiciel stata.exe]:
stataexe = ""
knitr::opts_chunk$set(engine.path = stataexe, cleanlog = FALSE)
Le plus simple est d’ajouter ces lignes de code dans le .Rprofile pour que ces éléments restent longtemps (plus d’information dans la partie .Rprofile)
Maintenant il est possible de lancer stata simplement dans un chunk (même si je ne sais pas pour l’instant comment transférer les données entre R et Stata directement dans le chunk):
Note: Il faut préciser quel langage on utilise dans l’intitulé du chunck à chaque fois qu’on souhaite utiliser Stata, donc ```{stata}.
sysuse auto
sum
. sysuse a(1978 Automobile Data)
. sum
Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
make | 0
price | 74 6165.257 2949.496 3291 15906
mpg | 74 21.2973 5.785503 12 41
rep78 | 69 3.405797 .9899323 1 5
headroom | 74 2.993243 .8459948 1.5 5
-------------+---------------------------------------------------------
trunk | 74 13.75676 4.277404 5 23
weight | 74 3019.459 777.1936 1760 4840
length | 74 187.9324 22.26634 142 233
turn | 74 39.64865 4.399354 31 51
displacement | 74 197.2973 91.83722 79 425
-------------+---------------------------------------------------------
gear_ratio | 74 3.014865 .4562871 2.19 3.89
foreign | 74 .2972973 .4601885 0 1