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

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方的计算以及四舍五入

r 复制代码
round(summary(lm.fit)$r.square, 3)

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

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

重复生成相同数字n次

r 复制代码
rep(100, 3)

ggplot散点图 smooth拟合直线

r 复制代码
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():设置坐标轴标签和标题。

相关推荐
m0_7487080519 分钟前
C++中的观察者模式实战
开发语言·c++·算法
qq_5375626731 分钟前
跨语言调用C++接口
开发语言·c++·算法
wjs202442 分钟前
DOM CDATA
开发语言
Tingjct43 分钟前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
猷咪1 小时前
C++基础
开发语言·c++
IT·小灰灰1 小时前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧1 小时前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q1 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳01 小时前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾1 小时前
php 对接deepseek
android·开发语言·php