问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/weixin_48846514/article/details/146354840

在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_BuildingArea = 11209.5 / 799.8 = 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():设置坐标轴标签和标题。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号