如何从 R 中的 lm 模型中提取估计值和标准误差作为线性增量的度量?
How do I extract estimates and standard errors as a measure of linear increment from an lm model in R?
假设我有数据:*
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
现在我想在数据中包含第三列,它应该是 increment/estimate,第四列我们应该是标准错误。为此,我通过拟合线性模型并采用 slope/estimate 以及相关的标准误差来估计每行数据的增量。所以我适合 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 个标准误差。有办法吗?
非常感谢!
基本上,您的 lm
模型是公式 y = Intercept + x*coefficient
。
因此,您可以根据 summary(lm(...
的输出计算 estimate
所以,如果你举下面的例子:
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)
你得到这个情节:
如果现在,您使用 dat
中的 estimate
和 SE
列:
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))
你得到几乎相同的情节:
希望它能回答您的问题
假设我有数据:*
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
现在我想在数据中包含第三列,它应该是 increment/estimate,第四列我们应该是标准错误。为此,我通过拟合线性模型并采用 slope/estimate 以及相关的标准误差来估计每行数据的增量。所以我适合 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 个标准误差。有办法吗?
非常感谢!
基本上,您的 lm
模型是公式 y = Intercept + x*coefficient
。
因此,您可以根据 summary(lm(...
estimate
所以,如果你举下面的例子:
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)
你得到这个情节:
如果现在,您使用 dat
中的 estimate
和 SE
列:
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))
你得到几乎相同的情节:
希望它能回答您的问题