web-dev-qa-db-fra.com

Extraire les valeurs du coefficient de régression

J'ai un modèle de régression pour certaines données chronologiques portant sur l'utilisation des médicaments. Le but est d’adapter une spline à une série chronologique et d’établir un IC à 95%, etc. Le modèle est le suivant:

id <- ts(1:length(drug$Date))
a1 <- ts(drug$Rate)
a2 <- lag(a1-1)
tg <- ts.union(a1,id,a2)
mg <-lm (a1~a2+bs(id,df=df1),data=tg) 

La sortie récapitulative de mg est la suivante:

Call:
lm(formula = a1 ~ a2 + bs(id, df = df1), data = tg)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.31617 -0.11711 -0.02897  0.12330  0.40442 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)        0.77443    0.09011   8.594 1.10e-11 ***
a2                 0.13270    0.13593   0.976  0.33329    
bs(id, df = df1)1 -0.16349    0.23431  -0.698  0.48832    
bs(id, df = df1)2  0.63013    0.19362   3.254  0.00196 ** 
bs(id, df = df1)3  0.33859    0.14399   2.351  0.02238 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

J'utilise la valeur Pr(>|t|) de a2 pour vérifier si les données à l'étude sont autocorrélées.

Est-il possible d'extraire cette valeur de Pr(>|t|) (dans ce modèle 0.33329) et de la stocker dans un scalaire pour effectuer un test logique?

Sinon, peut-il être élaboré en utilisant une autre méthode?

55
John

Un objet summary.lm stocke ces valeurs dans une matrix appelée 'coefficients'. Ainsi, la valeur que vous recherchez peut être consultée avec: 

a2Pval <- summary(mg)$coefficients[2, 4]

Ou, plus généralement/lisiblement, coef(summary(mg))["a2","Pr(>|t|)"]. Voir ici pour savoir pourquoi cette méthode est préférée.

61
wkmor1

Le paquetage broom est pratique ici (il utilise le format "rangé").

tidy(mg) donnera un data.frame bien formaté avec des coefficients, des statistiques, etc. Cela fonctionne également pour d’autres modèles (par exemple, plm, ...).

Exemple tiré du repo github de broom:

lmfit <- lm(mpg ~ wt, mtcars)
require(broom)    
tidy(lmfit)

      term estimate std.error statistic   p.value
1 (Intercept)   37.285   1.8776    19.858 8.242e-19
2          wt   -5.344   0.5591    -9.559 1.294e-10

is.data.frame(tidy(lmfit))
[1] TRUE
24
Helix123

Passez simplement votre modèle de régression à la fonction suivante:

    plot_coeffs <- function(mlr_model) {
      coeffs <- coefficients(mlr_model)
      mp <- barplot(coeffs, col="#3F97D0", xaxt='n', main="Regression Coefficients")
      lablist <- names(coeffs)
      text(mp, par("usr")[3], labels = lablist, srt = 45, adj = c(1.1,1.1), xpd = TRUE, cex=0.6)
    }

Utilisez comme suit:

model <- lm(Petal.Width ~ ., data = iris)

plot_coeffs(model)

 enter image description here

1
Cybernetic

Pour répondre à votre question, vous pouvez explorer le contenu de la sortie du modèle en enregistrant le modèle en tant que variable et en cliquant dessus dans la fenêtre d'environnement. Vous pouvez ensuite cliquer autour pour voir ce qu'il contient et ce qui est stocké où.

Une autre méthode consiste à taper yourmodelname$ et à sélectionner les composants du modèle un par un pour voir leur contenu. Lorsque vous atteignez yourmodelname$coefficients, vous verrez toutes les valeurs bêta, p et t que vous désirez.

0
Kevin Rosenfield