R语言|临床预测模型(二):简单/多重线性回归

R语言|临床预测模型(二)

一般线性模型

(一)线性回归(Linear regression)

根据自变量数目多少,可分为简单线性回归多重线性回归,只有一个自变量即为简单线性回归,多个自变量即为多重线性回归。相较于简单线性回归,多重线性回归更为可靠,但仍可能出现欠拟合状况,且并非纳入自变量越多越好。

1. 概述
(1)相关
  • 相关 ≠ 线性回归

    • 相关:不确定性的相关关系,指两个变量在宏观上存在关系,但未精确到数学函数关系,当变量X增加时,变量Y随着增加或者减少,但变量Y的具体取值不能由变量X确定,可分为正相关、负相关和零相关。

      image-20240824194818773

    • 线性回归:确定性的数学函数关系。

  • 根据变量数值分布类型不同,相关可分为直线相关、秩相关、列联相关等。

    • 秩相关:当变量的数值不符合正态性或为等级资料时,宜采用秩相关,主要利用变量数值的秩次替代原始数据进行相关分析。

    • 列联相关:针对于分类变量。

    • 直线相关:可计算皮尔森(Pearson)相关系数 r,r > 0为正相关,r < 0为负相关,r = 0为零相关或无相关,r绝对值越大相关程度越大。

      image-20240824195749200

      r 的假设检验公式(p<0.05则存在统计学意义):

      image-20240824203008814

      注意:

      • 相关关系不等于因果关系

      • 相关系数只是用于衡量变量间的相关程度,弱相关不一定表明变量间没有关系

      • 在直线相关中,极端值对相关系数的影响较大

      • 在相关关系成立的数据范围之外外推应谨慎,通常可内推

      • 数据的间杂性可能存在虚假相关

        image-20240824203507388

        (a)样本甲和样本乙两个变量均为正相关,但混合在一起则显示无相关

        (b)样本甲乙两变量均无相关,但混合在一起显示存在正相关

(2)回归
  • 回归:用回归方程表示变量间的依存关系

    image-20240824204234408

    a 为截距,其单位与因变量 Y 相同,在临床研究中通常没有实际意义,因为自变量X大多取不到 0

    image-20240824204743061

    b 为斜率,也称为回归系数

    image-20240824204900367

    简单线性回归中,自变量 X 的回归系数 b 的假设检验(p<0.05存在统计学意义)

    image-20240824205831030

    image-20240824210023679

    RMSE 在排除了自变量 X 对因变量 Y 的线性影响后,用于衡量因变量 Y 随机波动大小,可以反映数据的离散化程度,在多因素逐步回归分析中作为自变量 X 引入和剔除的标准之一。

    image-20240824210041653

  • 简单线性回归分析的数据需满足以下条件:

    • 正态性:给定自变量 X,因变量 Y 符合正态分布,即双变量正态分布
    • 独立性:各观测的因变量 Y 值之间应符合独立性,传染病相关研究通常不符合
    • 线性:自变量 X 与因变量 Y 之间应符合线性关系,可通过绘制散点图判断是否符合线性假设
    • 方差齐性:因变量 Y 的方差不会随着自变量 X 的变化而变化
  • 在临床工作中,多重线性回归更为常见

2. 线性回归实战

对于相关和线性回归,一般是从研究不确定性的相关关系开始,再将其逐步完善为确定性的数学函数关系。

(1)简单线性回归
a. 回归拟合

简单线性回归可以使用 lm()glm()rms包中的 ols() 进行拟合,结果完全等价。

# 查看示例数据 women,共2个变量(height、weight),15个研究对象
str(women)

# 相关分析(Pearson),不指定 y 则默认为自身
cor(x=women, method = c("pearson"))

# 对 Pearson 相关系数 r 做统计学假设检验
cor.test(x=women$height, y=women$weight, method = c("pearson"))

# 简单线性回归
lmfit <- lm(formula=weight~height, data=women)
summary(lmfit)

image-20240824215009716

image-20240824215942007

b. 回归检验

由于简单线性回归具有一定的适用条件,此处对其进行了判断。

# 线性假定
plot(x=women$height,
    y=women$weight,
    xlab="height",
    ylab="weight")

# 双变量正态性检验
# install.packages("mvnormtest")
library(mvnormtest)
# mshapiro.test 无法处理数据框,只能处理矩阵,故需要先使用 t() 将其转换为矩阵
mshapiro.test(t(women)) 
# p<0.05说明不符合双变量正态分布

image-20240824221353148

当数据不符合双变量正态性时,如果其不是严重偏态,仍可以使用简单线性回归。

# 查看变量的分布情况
library(car)
scatterplotMatrix(x=women, main="Scatter Plot Matrix")

image-20240824221917014

# 双变量正态性检验,生成线性回归模型诊断图
par(mfrow=c(2,2))
plot(lmfit)

image-20240824222415561

  • 残差与拟合值图 (Residuals vs Fitted)

    • 目的:检查线性关系假设和均匀性假设(残差的等方差性)。
    • 图形解释
      • 横轴是拟合值(Fitted Values),纵轴是标准化残差(Residuals)。
      • 如果模型正确指定,图中的点应该随机分布在横轴附近,没有明显的模式。
      • 如果图中出现曲线模式,说明模型可能有非线性关系未捕捉。
      • 如果残差的分散程度随拟合值增加或减少,可能表明异方差性问题。
  • 正态 Q-Q 图 (Normal Q-Q)

    • 目的:检查残差是否符合正态分布的假设。

    • 图形解释

      • 横轴是标准正态分布的理论分位数,纵轴是样本残差的分位数。
        • 如果残差符合正态分布,图中的点应该大致沿着一条直线分布。
        • 如果点偏离直线,特别是在两端,说明残差可能不是正态分布,可能存在重尾或轻尾数据。
  • 标量化残差与杠杆图 (Scale-Location or Spread-Location Plot)

    • 目的:进一步检查**残差的均匀性(方差齐性)**假设。
    • 图形解释
      • 横轴是拟合值(Fitted Values),纵轴是标准化残差的平方根(Square Root of Standardized Residuals)。
      • 理想情况下,点应随机分布,且呈水平带状分布。
      • 如果残差随着拟合值变化而呈现出某种模式,可能表明异方差性问题。
  • 杠杆值与标准化残差图 (Residuals vs Leverage or Cook’s Distance Plot)

    • 目的:识别可能对模型有过度影响的数据点(高杠杆点或异常值)。
    • 图形解释
      • 横轴是杠杆值(Leverage),纵轴是标准化残差。
      • 该图显示哪些点对模型拟合影响较大(即,离群点或影响点)。
      • 图中会标示出 Cook’s 距离(Cook’s Distance)的轮廓线,点在这些轮廓线之外说明它们对模型有很大影响。

对于方差齐性检验,还可以使用 car 包中的 ncvTest() 函数或 SpreadLevelPlot() 函数。

独立性检验一般基于经验主观判断。

**【总结】**若数据轻微违反双变量正态性或者方差齐性,仍然可以进行简单线性回归,因为简单线性回归对轻微偏态数据、异方差数据的稳健性较好。另外,在本案例中,样本量较小是散点出现轻微偏态的主要原因。若增加样本量,变量height、weight必然满足正态性。

(2)多重线性回归
a. 回归拟合
# 载入示例数据
packageurl <- "https://cran.r-project.org/src/contrib/Archive/ElemStatLearn/ElemStatLearn_2015.6.26.tar.gz"
install.packages(packageurl, repos=NULL, type="source")
data("prostate", package = "ElemStatLearn")

image-20240824224753877

对于非高维数据,可以在正式统计分析前,使用 str()summary()head()names()查看数据全貌信息。

image-20240824225109160

# 各变量相关性检验
cor.prostate <- cor(x=prostate, method = c("pearson"))
round(cor.prostate, 3) # 保留三位小数

image-20240824225933051

# 相关性矩阵可视化
library(corrplot)
corrplot(cor.prostate, method = "ellipse") # 选定图形为椭圆

image-20240824230247637

# 其他可视化方法
library(ggcorrplot)
ggcorrplot(cor.prostate, method = "circle",
          hc.order = TRUE, hc.method = "ward.D", # 聚类,对于代谢组学和基因组学数据很有必要
          outline.color = "white", # 设置外边框颜色
          ggtheme = theme_bw(), # 设置图形格式
          type = "upper", # 设置只显示上半部分结果
          lab = TRUE, lab_size = 4, # 设置显示相关系数,并设定字体大小
          colors = c("#6D9EC1", "white", "#E46726"))

image-20240831152953715

# 多重线性回归,此处为了简便纳入了所有自变量
multifit <- lm(formula = lpsa~lcavol+lweight+age+lbph+svi+lcp+gleason+pgg45, data = prostate)
summary(multifit)

image-20240831154046619

**注意:**由于简单线性回归只有一个变量,其 F 值为 t^2,两者完全等价。

# 使用 anova 查看方差分析表,其结果与回归系数表相似
anova(multifit)
image-20240831154538724
b. 回归检验

在多重线性回归中,也需要对其使用条件进行检验。

par(mfrow = c(2,2))
plot(multifit)

image-20240831154956520

  • 左上角图形用来说明因变量与自变量的线性关系。可以发现,残差值Residuals与预测值Fittedvalues没有明显关联。随预测值Fitted values的变化,残差保持稳定,即说明因变量与自变量之间存在线性关系。
  • 左下角图用来检查方差齐性,其线段两侧散点呈随机分布,说明其方差齐。
  • 右上角图形用来检查残差是否符合正态性,可以发现散点轻微偏离虚线,残差呈轻微偏态。
  • 变量是否满足独立性,一般靠主观判断。
# 使用 lmtest 包中的 bptest 检验方差齐性
# install.packages("lmtest")
library(lmtest)
bptest(multifit)

image-20240831155628663

在多重线性回归中,还应当考虑多重共线性问题。

# 检验多重共线性
# packageurl <- "https://cran.r-project.org/src/contrib/Archive/pbkrtest/pbkrtest_0.4-4.tar.gz"
# install.packages(packageurl, repos=NULL, type="source")
# install.packages("car")
library(car)
vif(multifit)

image-20240831160939345

输出结果为各自变量的方差膨胀因子 VIF,如果小于 5 或者 10 则该自变量不存在多重共线性,如果大于 5 或者 10 则存在多重共线性问题,不可直接拟合模型,应该使用岭回归或其它降维方法。

补充:处理多重共线性的策略

  • 移除变量:如果某些变量之间存在高共线性,可以考虑从模型中移除一些变量。

  • 合并变量:将相关的变量合并为一个新变量,例如,通过计算几个相关变量的平均值。

  • 增加样本量:有时增加样本量可以帮助减少共线性带来的影响,因为更多的数据提供了更多的信息,有助于更准确地估计模型参数。

  • 正则化方法:使用如岭回归(Ridge Regression)或 LASSO 这类引入惩罚项的技术可以有效地处理共线性问题。

# 绘制预测值与实际值散点图,查看模型拟合准确性,以下两种方法结果相同
par(mfrow = c(1,2))
plot(x = prostate$lpsa, y = predict(multifit), xlab = "实际值", ylab = "预测值")
plot(x = prostate$lpsa, y = fitted(multifit), xlab = "实际值", ylab = "预测值")

image-20240831163033585

因变量Ipsa的预测值与实际值较为一致,说明模型拟合准确性较高。

此处也可以计算 RMSE、MSE、MAE 等指标来量化模型的准确性,其计算较为简单。

**【总结】**相关 vs 线性相关

  • 联系:
    • 两者均表示线性关系。
    • 相关系数与回归系数的符号相同,共变方向一致。
    • 假设检验的结果完全等价。
    • 相关系数与回归系数存在数学运算关系。
    • 可以用回归解释相关。
  • 区别:
    • 相关系数没有单位,回归系数有单位,所以相关系数与单位无关,回归系数与单位有关。
    • 相关表示相互关系,回归表示依存关系。
    • 对资料的要求不同:当变量X和Y都是随机变量时,可以进行相关和回归分析;当变量Y是随机变量(变量X可控制)时,理论上只能做回归而不能做相关分析,如变量X为性别时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值