提取回归系数值

我有一个回归模型的一些时间序列数据调查药物使用。用样条函数拟合时间序列,计算出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

我正在使用 a2Pr(>|t|)值来测试正在调查的数据是否是自相关的。

有没有可能提取 Pr(>|t|)的这个值(在这个模型中是0.33329)并将其存储在一个标量中以执行逻辑测试?

或者,是否可以用另一种方法来解决这个问题?

243000 次浏览

A summary.lm object stores these values in a matrix called 'coefficients'. So the value you are after can be accessed with:

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

Or, more generally/readably, coef(summary(mg))["a2","Pr(>|t|)"]. See here for why this method is preferred.

The package broom comes in handy here (it uses the "tidy" format).

tidy(mg) will give a nicely formated data.frame with coefficients, t statistics etc. Works also for other models (e.g. plm, ...).

Example from broom's github repo:

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

Just pass your regression model into the following function:

    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)
}

Use as follows:

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


plot_coeffs(model)

enter image description here

To answer your question, you can explore the contents of the model's output by saving the model as a variable and clicking on it in the environment window. You can then click around to see what it contains and what is stored where.

Another way is to type yourmodelname$ and select the components of the model one by one to see what each contains. When you get to yourmodelname$coefficients, you will see all of beta-, p, and t- values you desire.