R - 从多个 lm 列表中提取 t 值

标签 r

我有一个数据框,一个带有因变量的向量。例如这样:

a <- rnorm(100,1,1)
b <- rnorm(100,2,2)
c <- rnorm(100,3,3)
x <- rbind(a,b,c)

y <- rnorm(100,5,10)

现在我需要对每一行运行线性回归。我是这样做的:

lm.list <- apply(x,1, function(x) lm(x ~ y))

我设法通过添加“$coefficients”来提取系数,如下所示:

lm.list <- apply(x,1, function(x) lm(x ~ y)$coefficients)

然后我得到每行的系数。现在我想知道这些系数的意义。所以我需要提取 t 值、标准误差或 p 值。我不知道该怎么做,我不想为每行 1 × 1 运行 lm 函数并复制粘贴 t 值。有没有办法做到这一点?

还有一个额外的问题:是否可以使用 Newey-West 标准误差来计算每行的系数?我知道它如何用于单个 lms,但找不到将其与多行的 apply 函数一起使用的方法。

提前致谢!

最佳答案

对于这些类型的操作,使用列表和 lapply 系列会更容易。 首先注意:你的 a、b、c 是变量,而不是记录 -> 这是一个奇怪的想法,用 rbind 代替 cbind 或者实际上创建一个数据集来保存它们,如下所示:

data=data.frame(a,b,c)

请注意,data.frame 是一个列表 -> 我们可以调用 lapply:

lm.list=lapply(data,FUN=function(x) lm(x~y))

(顺便说一句,通常有 y~x,而不是相反)

那么到目前为止我们有什么?每个组件都包含一个 lm 类对象的列表——基本上是一个组件列表,例如:

> names(lm.list[["a"]])
 [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"        "qr"            "df.residual"  
 [9] "xlevels"       "call"          "terms"         "model"  

您可以从中提取值:

> (coeffs=sapply(lm.list, FUN=function(item){item$coefficients}))
                  a           b           c

(拦截)1.36869810 1.759809965 3.16491826 y -0.01885792 0.002648734 -0.02690408

如果您希望拥有 t 值并与 lm 对象关联,则可以对其调用 summary。让我们使用 lapply 对整个列表执行此操作:

lm.list.summary = lapply(lm.list,summary)

不要忘记 str 函数来检查对象结构/内容:

str(lm.list.summary[[1]])

然后只需正确设置要提取的内容的路径即可,例如:

y.tval = sapply(lm.list.summary, FUN=function(item){item$coefficients["y","t value"]})
y.tval
         a          b          c 
-1.7599765  0.1366731 -0.7998487

关于R - 从多个 lm 列表中提取 t 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37227146/

相关文章:

r - stat_sum 和 stat_identity 给出奇怪的结果

r - 如何重新排列/操作数据?

r - 计算 r 中的相对 RMSE

R - 将向量/数据帧中的所有值与另一个数据帧中的值进行比较以进行过滤

r - 降低栅格 R 分辨率的更快函数

r - LaTeX 和knitr - 插入 R 代码时出错

r - 将数据因子转换为日期

r - ggplot2 - 用 position = dodge 注释(标记)geom_boxplot

r - 如何在 Windows 上将 doRedis 包版本 1.0.5 安装到 R 3.0.1 中?

使用 RHive 包的 R 到 Hive 连接