Значення коефіцієнта регресії вилучення


77

У мене є модель регресії для деяких даних часових рядів, що досліджують вживання наркотиків. Мета полягає в тому, щоб припасувати сплайн до часового ряду і відпрацювати 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) і зберегти його в скалярі для виконання логічного тесту?

Як варіант, чи можна це розробити за допомогою іншого методу?


. @ Джон - Чому ви використовували Pr(>|t|)значення a2а не будь-який із перших трьох стовпців?
Chetan Arvind Patil

Відповіді:


86

summary.lmОб'єкт зберігає ці значення в matrixназивається 'coefficients'. Отже, значення, за яким ви переслідуєте, можна отримати за допомогою:

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

Або, в більш загальному плані / читаемо, coef(summary(mg))["a2","Pr(>|t|)"]. Подивіться тут, чому цей метод є кращим.


Як ми можемо "виявити" ці властивості summary? Як ти це знайшов / знав?
StephenBoesch

Ви маєте на увазі, наприклад coef(summary(mg))[, c("t value","Pr(>|t|)")]? Але дякую за Посилання - я це завжди забуваю!
Крістоф

@javadba, ти можеш str(mg)або names(mg), наприклад.
PatrickT

2
@PatrickT thx. Ці дрібниці мають велике значення. Я дізнався про це, data.tableі це змінило мій погляд на R .. але все ж потрібні такі поради.
StephenBoesch

32

Пакет тут broomдуже до речі (він використовує формат «охайний»).

tidy(mg) дасть добре оформлений data.frame з коефіцієнтами, t статистикою тощо. Працює також для інших моделей (наприклад, 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

1
Для того, щоб відповісти на ДР від цього: td[1, "estimate"]або td[td$term == "(Intercept)","estimate"]або навітьtdt <- as.data.table(td); setkey(tdt); tdt["(Intercept)","estimate"]
PatrickT

3

Щоб відповісти на ваше запитання, ви можете дослідити вміст вихідних даних моделі, збереживши модель як змінну та натиснувши на неї у вікні середовища. Потім ви можете клацнути навколо, щоб побачити, що він містить і що де зберігається.

Інший спосіб - набирати yourmodelname$та підбирати компоненти моделі по одному, щоб побачити, що кожен містить. Коли ви дійдете до yourmodelname$coefficients, ви побачите всі бажані значення бета-, р та t-.


2

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

    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)

введіть тут опис зображення


1
Я розграбував ваш код і вважаю його корисним. Можливо, ви захочете змінити його так, щоб він видалив значення na і дозволив ввести основний заголовок із функції.
user1945827
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.