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?
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.
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
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)
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.