Извлечение значений коэффициента регрессии
у меня есть регрессионная модель для некоторых данных временных рядов, исследующих использование наркотиков. Цель состоит в том, чтобы подогнать сплайн к временному ряду и разработать 95% CI и т. д. Модель выглядит следующим образом:
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)
итоговый вывод mg
- это:
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
Я использую Pr(>|t|)
стоимостью a2
чтобы проверить, если данные в стадии расследования являются автокоррелированными.
можно ли извлечь это значение Pr(>|t|)
(в этой модели 0.33329) и хранить его в a скаляр для выполнения логического теста?
в качестве альтернативы, может ли он быть разработан с помощью другого метода?
3 ответа:
A
summary.lm
объект хранит эти значения вmatrix
под названием'coefficients'
. Таким образом, значение, которое вам нужно, можно получить с помощью:a2Pval <- summary(mg)$coefficients[2, 4]
или, более широко / читабельно,
coef(summary(mg))["a2","Pr(>|t|)"]
. Смотрите здесь почему этот метод является предпочтительным.
пакета
broom
пригодится здесь (он использует "аккуратный" формат).
tidy(mg)
даст красиво сформированные данные.рама с коэффициентами, статистикой и т. и т. п. Работает также для других моделей (например, plm, ...).пример
broom
РЕПО github: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
просто передайте свою регрессионную модель в следующую функцию:
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) }
использовать следующим образом:
model <- lm(Petal.Width ~ ., data = iris) plot_coeffs(model)