Извлечь значения коэффициента регрессии - PullRequest
60 голосов
/ 05 июля 2011

У меня есть модель регрессии для данных временных рядов, изучающих употребление наркотиков. Цель состоит в том, чтобы подогнать сплайн к временному ряду и отработать 95% -й доверительный интервал и т. Д. Модель работает следующим образом:

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) и сохранить его в скаляре для выполнения логического теста?

В качестве альтернативы, это может быть решено с помощью другого метода?

Ответы [ 4 ]

67 голосов
/ 05 июля 2011
Объект

A summary.lm сохраняет эти значения в matrix, называемом 'coefficients'. Таким образом, значение, к которому вы стремитесь, может быть доступно с помощью:

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

Или, в более широком смысле / читабельно, coef(summary(mg))["a2","Pr(>|t|)"]. См. здесь , почему этот метод предпочтителен.

26 голосов
/ 07 апреля 2015

Пакет broom пригодится здесь (он использует формат "аккуратно").

tidy(mg) даст красиво отформатированный data.frame с коэффициентами, статистикой t и т. Д. Работает также для другихмодели (например, plm, ...).

Пример из репозитория github 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
1 голос
/ 19 февраля 2017

Просто передайте свою модель регрессии в следующую функцию:

    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)

enter image description here

0 голосов
/ 03 ноября 2018

Чтобы ответить на ваш вопрос, вы можете изучить содержимое вывода модели, сохранив модель в виде переменной и щелкнув по ней в окне среды.Затем вы можете щелкнуть вокруг, чтобы увидеть, что оно содержит и что хранится.

Другой способ - набрать yourmodelname$ и выбрать компоненты модели по одному, чтобы увидеть, что в них содержится.Когда вы доберетесь до yourmodelname$coefficients, вы увидите все желаемые бета-, p- и t-значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...