【问题标题】:Extract regression coefficient values提取回归系数值
【发布时间】:2011-09-28 10:56:44
【问题描述】:

我有一个用于调查药物使用的时间序列数据的回归模型。目的是将样条曲线拟合到时间序列并计算出 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 

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

是否可以提取Pr(&gt;|t|) 的值(在此模型中为 0.33329)并将其存储在标量中以执行逻辑测试?

或者,可以用其他方法解决吗?

【问题讨论】:

  • .@John - 为什么你使用 Pr(&gt;|t|) 的值 a2 而不是前三列中的任何一列?

标签: r regression lm


【解决方案1】:

summary.lm 对象将这些值存储在名为 'coefficients'matrix 中。因此,您可以通过以下方式访问您所追求的值:

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

或者,更一般/更易读,coef(summary(mg))["a2","Pr(&gt;|t|)"]。请参阅here 了解为什么首选此方法。

【讨论】:

  • 我们如何“发现”summary 的这些属性?你是怎么发现/知道这个的?
  • 你的意思是例如coef(summary(mg))[, c("t value","Pr(&gt;|t|)")]?但是感谢您的链接 - 我总是忘记这一点!
  • @javadba,例如,您可以str(mg)names(mg)
  • @PatrickT 谢谢。这些小事会产生很大的不同。我发现了data.table,它改变了我对R的看法......但仍然需要这些技巧。
【解决方案2】:

broom 包在这里派上用场(它使用“整洁”格式)。

tidy(mg) 将提供格式良好的 data.frame,其中包含系数、t 统计量等。也适用于其他模型(例如 plm、...)。

来自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

【讨论】:

  • 从这里回答OP:td[1, "estimate"]td[td$term == "(Intercept)","estimate"]甚至tdt &lt;- as.data.table(td); setkey(tdt); tdt["(Intercept)","estimate"]
【解决方案3】:

只需将您的回归模型传递给以下函数:

    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)

【讨论】:

  • 我盗用了你的代码,发现它很有用。您可能想要更改它,以便它删除 na 值并允许从函数中输入主标题。
【解决方案4】:

要回答您的问题,您可以通过将模型保存为变量并在环境窗口中单击它来探索模型输出的内容。然后,您可以点击查看它包含的内容以及存储的位置。

另一种方法是输入yourmodelname$,然后逐个选择模型的组件,看看每个组件包含什么。当您到达 yourmodelname$coefficients 时,您将看到您想要的所有 beta-、p 和 t- 值。

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2018-05-03
    相关资源
    最近更新 更多