我如何从R中的lm模型中提取估计值和标准误差作为线性增量的度量?

问题描述 投票:0回答:1

假设我有数据:*

data = data.frame(xdata = 1:10, ydata = 6:15)

我看数据

data

  xdata ydata
1      1     6
2      2     7
3      3     8
4      4     9
5      5    10
6      6    11
7      7    12
8      8    13
9      9    14
10    10    15

现在,我想在数据中包括第三列,它应该是增量/估计值,而第四列是标准错误。为此,我通过拟合线性模型并采用斜率/估计值以及相关的标准误差来估计数据每一行的增量。所以我适合model_1:

model_1 = lm(ydata~xdata,data = data)
out = summary(model_1)
out

它给了我:

Call:
lm(formula = ydata ~ xdata, data = data)

Residuals:
       Min         1Q     Median         3Q        Max 
-5.661e-16 -1.157e-16  4.273e-17  2.153e-16  4.167e-16 

Coefficients:
             Estimate Std. Error   t value Pr(>|t|)    
(Intercept) 5.000e+00  2.458e-16 2.035e+16   <2e-16 ***
xdata       1.000e+00  3.961e-17 2.525e+16   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.598e-16 on 8 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:      1 
F-statistic: 6.374e+32 on 1 and 8 DF,  p-value: < 2.2e-16

要提取估算值,我可以简单地做:

out$coefficients[2,1]

要提取标准错误,我可以简单地做:

out$coefficients[2,2]

但是我的兴趣是要有一个输出,显示每行的估计值和标准误,所以我最终得到10个估计值和10个标准误。有办法吗?

非常感谢!

r increment lm
1个回答
0
投票

[基本上,您的lm模型具有公式y = Intercept + x*coefficient。因此,您可以根据estimate

的输出来计算summary(lm(...

因此,如果您采用以下示例:

set.seed(123)
vector1 = rnorm(100, mean = 4)
vector2 = rnorm(100, mean = 1)
dat = data.frame(vector1,vector2)
model_dat = lm(vector2 ~ vector1, data = dat)
Model = summary(model_dat)

现在,您可以计算估算值:

dat$estimate = dat$vector1 * Model$coefficients[2,1] + Model$coefficients[1,1]

然后对于标准错误,可以将predict.lm与功能se.fit = TRUE一起使用:

dat$SE = predict.lm(model_dat, se.fit = TRUE, level = 0.95)$se.fit

因此,您将获得以下数据集:

> head(dat)
   vector1    vector2  estimate         SE
1 3.439524 0.28959344 0.9266060 0.11942447
2 3.769823 1.25688371 0.9092747 0.10294104
3 5.558708 0.75330812 0.8154090 0.18452625
4 4.070508 0.65245740 0.8934973 0.09709476
5 4.129288 0.04838143 0.8904130 0.09716038
6 5.715065 0.95497228 0.8072047 0.19893259

您可以首先比较其结果,检查使用stat_smooth获得的绘图:

library(ggplot2)
ggplot(dat, aes(x = vector1, y = vector2)) + geom_point() + stat_smooth(method = "lm", se = TRUE)

然后您得到以下情节:enter image description here

如果现在使用estimate中的SEdat列:

ggplot(dat, aes(x = vector1, y = vector2)) + geom_point() + 
  geom_line(aes(x = vector1, y = estimate), color = "red")+
  geom_line(aes(x = vector1, y = estimate+SE)) +
  geom_line(aes(x = vector1, y = estimate-SE)) 

您得到几乎相同的情节:enter image description here

希望它能回答您的问题

© www.soinside.com 2019 - 2024. All rights reserved.