【问题标题】:How to calculate confidence intervals from R summary function?如何从 R 汇总函数计算置信区间?
【发布时间】:2023-06-27 10:38:01
【问题描述】:

如果给我一个线性回归模型的输出:

Call:
lm(formula = Cost ~ Age + I(Age^2))
Residuals:
Min 1Q Median 3Q Max
-371.76 -218.77 -70.16 141.97 541.08
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 348.088 214.816 1.620 0.127
Age 103.003 181.969 0.566 0.580
I(Age^2) 4.713 29.248 0.161 0.874
Residual standard error: 293.2 on 14 degrees of freedom
Multiple R-squared: 0.478,Adjusted R-squared: 0.4035
F-statistic: 6.411 on 2 and 14 DF, p-value: 0.01056

我将如何仅据此计算置信区间?

基本上我希望手动计算以下内容:

> confint(model.fit, level = 0.90)
5 % 95 %
(Intercept) -30.26946 726.44545
Age -217.50106 423.50653
I(Age^2) -46.80263 56.22808

【问题讨论】:

  • 到目前为止您尝试过什么? coef(summary(fitted_model)) 将为您提供一个包含 EstimateStd. Error (以及其他)列的表格。 qt(c(0.05, 0.95), df = df.residual(fitted_model)) 将为您提供 q 所需的乘数 est ± q*std.err ...
  • 你能提供一些示例数据,或者你的数据结构使用'dput(yourdata)`吗?
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: r math statistics linear-regression confidence-interval


【解决方案1】:

以下是使用 Wald 置信区间手动计算 CI 的函数:

样本数据

df <- structure(list(income = c(5.42, 3.47, 1.58, 3.51, 3.38, 3.53, 
5.7, 4.67, 3.66, 5.61, 6.28, 6.5, 2.34, 2.69, 1.53, 6.83, 4.06, 
7.08, 2.07, 1.64, 2.52, 5.22, 6.84, 5.47, 2), happiness = c(4.5, 
2.54, 1.98, 3.03, 1.42, 2.67, 4.04, 4.55, 2.86, 4.59, 4.23, 5.34, 
2.34, 2.2, 2.42, 3.84, 3.57, 4.12, 2.19, 1.8, 1.53, 5.77, 5.92, 
4.66, 1.82)), row.names = c(428L, 495L, 287L, 151L, 117L, 112L, 
376L, 62L, 199L, 264L, 445L, 466L, 267L, 328L, 297L, 259L, 135L, 
128L, 35L, 421L, 375L, 36L, 435L, 216L, 256L), class = "data.frame")

模型和手动 CI

model <- lm(income ~ happiness, data = df)

manualCI <- function(model_object, ci = 0.95){
  a <- coef(summary(model_object))
  mult <- qnorm((1 + ci) / 2)
  restab <- with(as.data.frame(a),
                 cbind(est = Estimate,
                       lwr =  Estimate - mult*`Std. Error`,
                       upr = Estimate + mult*`Std. Error`))
  rownames(restab) <- rownames(a)
  return(data.frame(restab))
}

manualCI(model)

【讨论】: