【R语言】lm线性回归及输出含义,置信区间,预测,R方,ggplot 拟合直线

发布于:2025-03-19 ⋅ 阅读:(19) ⋅ 点赞:(0)

lm线性回归及输出含义

在 R 语言中,我们使用 lm() 函数执行线性回归,并用 summary() 查看结果。例如:

lm.fit <- lm(Price ~ BuildingArea, data = st.kilda.data)
summary(lm.fit)

回归分析结果如下:

Call:
lm(formula = Price ~ BuildingArea, data = st.kilda.data)

Residuals:
    Min      1Q  Median      3Q     Max 
-817415 -201614  -85181   19895 3403199 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -129484.0    91775.9  -1.411    0.161    
BuildingArea   11209.5      799.8  14.015   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 490300 on 99 degrees of freedom
Multiple R-squared:  0.6649,    Adjusted R-squared:  0.6615 
F-statistic: 196.4 on 1 and 99 DF,  p-value: < 2.2e-16

1. Call(回归公式)

Call:
lm(formula = Price ~ BuildingArea, data = st.kilda.data)
  • 这里的 Price ~ BuildingArea 说明 房价 (Price) 作为因变量(Y),由 建筑面积 (BuildingArea) 作为自变量(X)来预测。

2. Residuals(残差分析)

Residuals:
    Min      1Q  Median      3Q     Max 
-817415 -201614  -85181   19895 3403199 
  • 残差 = 真实值 - 预测值,表示模型的误差。
  • 五个关键数值
    • Min(最小值):最小残差,模型低估的最大程度(-817415)。
    • 1Q(第一四分位数):有 25% 的残差低于 -201614。
    • Median(中位数):50% 残差小于 -85181。
    • 3Q(第三四分位数):有 75% 的残差小于 19895。
    • Max(最大值):最大残差,模型高估的最大程度(3403199)。

3. Coefficients(回归系数表)

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -129484.0    91775.9  -1.411    0.161    
BuildingArea   11209.5      799.8  14.015   <2e-16 ***

(1) Estimate(估计值)

  • 截距(Intercept):-129484.0

    • BuildingArea = 0 时,房价的理论预测值是 -129,484 元(在实际应用中,可能没有建筑面积为 0 的情况,因此截距通常不具有实际意义)。
  • BuildingArea
    

    系数:11209.5

    • 每增加 1 平方米建筑面积,房价平均增加 11,209.5 元

(2) Std. Error(标准误差)

  • 标准误差(Std. Error)

    表示估计值的不确定性:

    • BuildingArea 的标准误差为 799.8,说明 11209.5 这个估计值有较小的误差,较为可靠。
    • Intercept 的标准误差较大,说明该估计值可能不稳定。

(3) t value(t 统计量)

  • 计算公式
    t = Estimate Std. Error t = \frac{\text{Estimate}}{\text{Std. Error}} t=Std. ErrorEstimate

  • 例如:
    t BuildingArea = 11209.5 799.8 = 14.015 t_{\text{BuildingArea}} = \frac{11209.5}{799.8} = 14.015 tBuildingArea=799.811209.5=14.015

  • t 值越大,说明该变量对因变量的影响更显著。

(4) Pr(>|t|)(p 值)

  • p 值用于检验回归系数是否显著
    • BuildingArea 的 p 值 < 2e-16,表示该变量对房价有极其显著的影响(通常 p < 0.05 认为显著)。
    • Intercept 的 p 值 0.161,大于 0.05,表示截距不显著,可以在某些情况下忽略它。

4. Significance Codes(显著性标记)

Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • 这是 R 语言的

    显著性水平

    说明:

    • *** 表示 p < 0.001,极显著。
    • ** 表示 0.001 ≤ p < 0.01,显著。
    • * 表示 0.01 ≤ p < 0.05,较显著。
    • . 表示 0.05 ≤ p < 0.1,弱显著。
    • 表示 p ≥ 0.1,不显著。

在本例中:

  • BuildingArea 变量的 p 值 < 2e-16,所以被标记为 ***,表示它对 Price 影响极其显著。
  • Intercept 的 p 值为 0.161,没有标记,表示不显著。

5. 模型整体评估

Residual standard error: 490300 on 99 degrees of freedom
Multiple R-squared:  0.6649,    Adjusted R-squared:  0.6615 
F-statistic: 196.4 on 1 and 99 DF,  p-value: < 2.2e-16

(1) Residual Standard Error(残差标准误差)

  • 490300 说明模型的预测误差大约是 49 万
  • 数值越小,表示模型的拟合度越好。

(2) R-squared(R² 决定系数)

  • Multiple R-squared(0.6649)
    • 表示 BuildingArea 能解释房价变化的 66.49%,模型拟合度较好。
  • Adjusted R-squared(0.6615)
    • 调整 R²,用于修正变量数量对 R² 的影响。
    • 因为是单变量回归,这里 R² 和 Adjusted R² 差异不大。

(3) F-statistic(F 统计量)

  • F-statistic: 196.4 on 1 and 99 DF, p-value: < 2.2e-16
  • 检验整体模型是否显著
    • F 值 = 196.4,p 值 < 2.2e-16,表示 模型整体显著

置信区间

置信区间(Confidence Intervals)在回归分析中的作用

在回归分析中,置信区间(Confidence Interval, CI)用于衡量回归系数的不确定性。与 p 值不同,置信区间提供了一个范围,表示回归系数的可能真实值,而不是一个显著性检验的结果。


1. 在 R 中计算置信区间

我们可以使用 confint() 函数来计算回归系数的置信区间。例如:

lm.fit <- lm(Price ~ BuildingArea, data = st.kilda.data)

# 默认 95% 置信区间
confint(lm.fit)

输出结果:

                2.5 %   97.5 %
(Intercept)  -311587.233 52619.18
BuildingArea    9622.491 12796.50
  • 默认情况下,confint() 计算 95% 置信区间(即 level = 0.95)。
  • 解释
    • BuildingArea 的 95% 置信区间为 [9622.49, 12796.50],表示我们有 95% 的信心,真实回归系数落在这个区间内。
    • Intercept(截距)的 95% 置信区间较大,说明截距的不确定性较高。

2. 改变置信水平

我们可以调整 level 参数来计算不同的置信区间,例如 99% 置信区间

confint(lm.fit, level = 0.99)

输出结果:

                 0.5 %    99.5 %
(Intercept)  -370524.63 111556.57
BuildingArea    9108.86  13310.13
  • 99% 置信区间比 95% 置信区间更宽,因为 更高的置信水平意味着我们需要一个更大的区间来确保包含真实值
  • BuildingArea 的 99% 置信区间为 [9108.86, 13310.13],表示我们有 99% 的信心,真实回归系数落在这个区间内。

3. 置信区间 vs. p 值

  • 如果置信区间 不包含 0,说明该变量的系数显著不为 0,与 p 值小于 0.05 的结果一致。
  • 如果置信区间 包含 0,说明变量的影响可能不显著,与 p 值大于 0.05 的情况一致。

在这个示例中:

  • BuildingArea 的置信区间(95%: [9622.49, 12796.50])不包含 0,说明其对 Price 影响显著(p < 2e-16)。
  • Intercept 的置信区间包含 0(-311587.23 到 52619.18),这与 p = 0.161 的结果一致,说明截距可能不显著。

4. 置信区间的作用

  • 解释回归系数的不确定性,避免单一估计值可能带来的误导。
  • 用于变量选择:如果某个变量的置信区间包含 0,可以考虑去掉该变量。
  • 与 p 值互补,提供更直观的统计信息。

预测

1. 置信区间 vs. 预测区间

predict() 函数中,我们可以指定 interval 参数来计算:

  • 置信区间(Confidence Interval):预测 均值 的精确度,即 100 m² 房屋的平均价格 的估计范围。
  • 预测区间(Prediction Interval):预测 单个新样本的值 的精确度,即 某个具体 100 m² 房屋的价格 可能落入的范围。

R 代码

# 生成一个新数据集,表示 100m² 的房屋
new.100 <- data.frame(BuildingArea = 100)

# 计算 95% 置信区间
predict(lm.fit, new.100, interval = "confidence")

# 计算 95% 预测区间
predict(lm.fit, new.100, interval = "prediction")

2. 置信区间(Confidence Interval)

      fit      lwr     upr
1 991465.5 894562.7 1088368
  • 预测值(fit)991,465.5(即 99.1 万)
  • 下界(lwr)894,562.7(即 89.5 万)
  • 上界(upr)1,088,368(即 108.8 万)

解读

  • 这个区间表示,我们有 95% 的信心,对于 所有 100 m² 的房屋,它们的 平均价格 会落在 89.5 万到 108.8 万 之间。
  • 由于它是 均值的区间,因此它 较窄

3. 预测区间(Prediction Interval)

       fit      lwr      upr
1 991465.5 13820.26 1969111
  • 预测值(fit)991,465.5(即 99.1 万)
  • 下界(lwr)13,820.26(即 1.38 万)
  • 上界(upr)1,969,111(即 196.9 万)

解读

  • 这个区间表示,我们有 95% 的信心,对于 某一特定 100 m² 的房屋,它的 实际价格 可能落在 1.38 万到 196.9 万 之间。
  • 这个范围比置信区间更 ,因为它考虑了个别房屋的价格波动(残差的影响)。

4. 置信区间 vs. 预测区间

比较 置信区间(Confidence Interval) 预测区间(Prediction Interval)
定义 预测 均值的范围,即 100m² 房屋的平均价格 预测 单个房屋的范围,即 具体某个 100m² 房屋的价格
计算方式 仅考虑回归系数的不确定性 还考虑个体样本的波动性
区间宽度 较窄,因为均值的误差小 较宽,因为个体房屋价格变化较大
示例(100m²) [89.5 万, 108.8 万] [1.38 万, 196.9 万]

R方的计算以及四舍五入

round(summary(lm.fit)$r.square, 3)

summary(lm.fit)$r.square:提取回归模型的 决定系数 R²

round(..., 3):将其 四舍五入到小数点后三位

重复生成相同数字n次

rep(100, 3)

ggplot散点图 smooth拟合直线

sonar |> 
  ggplot(aes(x = V1, y = V2)) +
  geom_point() + 
  geom_smooth(method = "lm", se = FALSE) +
  labs(x =  "V1", y = "V2") +
  ggtitle("V2 versus V1 Scatter Plot")  

geom_point():绘制散点图。

geom_smooth(method = "lm", se = FALSE)

  • method = "lm":使用线性回归lm)。
  • se = FALSE:不显示置信区间(默认是 TRUE,会绘制阴影区域)。

labs() & ggtitle():设置坐标轴标签和标题。

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到