2017-10-02 4 views
2

j'ai une trame de données comme ceci:extrait coefficients estimés et l'erreur standard à l'aide tidyverse

set.seed(560) 
df<-data.frame(lag= rep(1:40, each=228), psit= rep(rnorm(228, 20, 
10)),var=rnorm(9120, 50, 10)) 

Pour chaque sous-ensemble de lag Je souhaite exécuter une régression linéaire où psit est prédite par var (par exemple lm (PSIT ~ var, df)). Je voudrais sortir les informations de coefficient pour chaque valeur. Spécifiquement, le bêta Estimate et le Std. error dans une trame de données. Ensuite, calculez la taille de l'effet standardisé. La sortie doit être:

output<-data.frame(lag= rep(1:40, each=1), estimate= rep(rnorm(40, 
.5, 0.01)),std.error=rnorm(40,0.01, 0.01)) 
output$strd.effect <- output$estimate /output$std.error 

J'ai essayé:

models <- 
df %>% 
group_by(lag) %>% 
do(model = lm(psit ~ var,data = .)) 


coeff<- 
    models %>% 
    ungroup()%>% 
    group_by(variable) %>% 
    do(glance(estimate=summary(model[i]$coeff[,1], 
    std.error=summary(model[i]$coeff[,2]) 

coeff<- 
    coeff %>% 
    group_by(variable) %>% 
    mutate(std.effect=estimate[[i]]/coeff[[i]] 

Répondre

2

Le broom pacakge peut aider ici. Essayez

models %>% 
    rowwise() %>% 
    do({cbind(broom::tidy(.$model), lag=.$lag)}) %>% 
    filter(term=="var") %>% 
    mutate(std.effect=estimate/std.error) %>% 
    select(lag, estimate, std.error, std.effect)