0
votes

Spécification de variables utilisées dans la formule de régression à l'aide d'une chaîne

J'effectue une régression en utilisant data.table . Cependant, je voudrais spécifier de manière dynamique le côté droit de la formule comme dans l'exemple suivant: xxx

ceci donne une erreur. Y a-t-il un moyen de passer une chaîne et d'avoir qui étant les variables utilisées sur le côté droit de la formule?


0 commentaires

3 Réponses :


1
votes

Vous pouvez utiliser reformuler code> pour créer un objet de formule.

do.regr <- function(dt, varname, rhs){
  lmtest::coeftest(x = lm(reformulate(rhs, varname), data = dt))
}

do.regr(dt, varname, c('b', 'c'))


2 commentaires

Merci! J'ai mis à jour la question à généraliser la situation un peu plus - fait reformuler travaille toujours?


Cela ne fonctionne pas comme si vous souhaitez appliquer ceci par groupe. Peut-être essayez peut-être l'approche de Roland ou je pouvais penser à la division par d et d'appliquer reformuler sur chaque liste.



1
votes

Vous pouvez calculer sur la langue:

do.regr <- function(rhs) {
  rhs <- parse(text = rhs)[[1]]
  varname <- as.symbol(varname)
  eval(bquote(dt[, lmtest::coeftest(x = lm(.(varname) ~ .(rhs)),
                        vcov. = sandwich::NeweyWest(x = lm(.(varname) ~ .(rhs))) ), by = "d"]))
}

do.regr("b+c")
#works


0 commentaires

1
votes

L'OP a demandé à passer le côté droit comme paramètre sur la fonction do.reg () code> mais a spécifié le côté gauche de la gauche de manière dynamique dans une variable varname code>.

Par conséquent, je suggère de passer à la fois le côté gauche et le côté droit en tant que paramètres sur la fonction do.reg () code>. p> L'approche ci-dessous reprend suggestion de Roland à calculer sur la langue em> mais utilise Colle :: colle () code> pour une interpolation de chaîne et une fonction d'aide eval () code> que je trouve plus lisible, iMho: p> xxx pré>

La fonction d'aide eval () code> a été suggéré par Matt Dowle afin de créer une expression à être évalué, "similaire à la construction d'une instruction SQL dynamique à envoyer à un serveur". p>

La fonction peut être appelée comme p> xxx pré>

ou P > xxx pré>

et renvoie le même résultat que p> xxx pré>

      d           V1
 1: one 5.000000e-01
 2: one 5.000000e-01
 3: one 1.046778e-16
 4: one 2.738990e-17
 5: one 4.776564e+15
 6: one 1.825490e+16
 7: one 2.023596e-47
 8: one 3.625202e-49
 9: two 5.000000e-01
10: two 5.000000e-01
11: two 3.289712e-16
12: two 2.416974e-17
13: two 1.519890e+15
14: two 2.068702e+16
15: two 6.281080e-46
16: two 2.491017e-49


0 commentaires