0%

多项式回归(Polynomial regression)及线性检验

在临床实验中定量测定线性(范围)评价一般会用到EP-6A方法,其中有一步骤是用多项式回归分析及线性检验

所谓的线性检验,是指对每个非线性系数(多项式回归)作T检验,判断回归系数(b2,b3..bn)与零是否有显著性差异,其中b0与b1不反映非线性,故不需对其进行检验

所以我们需要对测定数据做个多项式回归分析,然后从结果中获得所需的系数(coefficients);因此我们需要了解如何对数据进行多项式回归分析

多项式公式:

\[ \hat{h} = \theta_0 + \theta_1 x^1 + \ ... \ + \theta_{n-1} x^{n-1} + \theta_n x^n \]

如果令x0=1,在多样本的情况下,可以写成向量化的形式:

\[ \hat{h} = X \cdot \theta \]

如果假设中出现了高阶项,那么这个模型还是线性模型吗?此时看待问题的角度不同,得到的结果也不同。如果把上面的假设看成是特征x的方程,那么该方程就是非线性方程;如果看成是参数θ的方程,那么x的高阶项都可以看做是对应θ的参数,那么该方程就是线性方程。很明显,在线性回归中采用了后一种解释方式。因此多项式回归仍然是参数的线性模型。

参考自:【机器学习】多项式回归

Fitting Polynomial Regression in R

在R语言中,线性回归一般会想到用lm()函数,对于多项式回归也不例外

data <- data.frame(x = c(0.50, 1.00, 1.50, 2.00, 3.00, 4.00, 5.00), 
                   y = c(6.24, 14.21, 23.31, 32.62, 49.28, 67.65, 85.59))

拟合多项式,有两种方法(以二项式为例):

有正交的模型:

fit.plm <- lm(y ~ poly(x, degree = 2), data = data)

无正交的模型:

fit.plm <- lm(y ~ x + I(x^2), data = data)

对于上述两者的区别,可参照:How to interpret coefficients from a polynomial model fit?

If you just want a nudge in the right direction without quite so much judgement: poly() creates orthogonal (not correlated) polynomials, as opposed to I(), which completely ignores correlation between the resultant polynomials. Correlation between predictor variables can be a problem in linear models, so it's probably better (in general) to use poly() instead of I().

若想将正交的结果转化为原来变量的回归方程,需再加个raw = TRUE参数

fit.plm <- lm(y ~ poly(x, degree = 2, raw = TRUE), data = data)

查看回归拟合结果:

> summary(fit.plm)

Call:
lm(formula = y ~ x + I(x^2), data = data)

Residuals:
        1         2         3         4         5         6         7 
 0.191786 -0.451418 -0.021044  0.562907 -0.398458  0.124486 -0.008259 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.50857    0.53285  -4.708  0.00925 ** 
x           17.05714    0.48219  35.374 3.81e-06 ***
I(x^2)       0.11284    0.08583   1.315  0.25888    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4278 on 4 degrees of freedom
Multiple R-squared:  0.9999,    Adjusted R-squared:  0.9998 
F-statistic: 1.384e+04 on 2 and 4 DF,  p-value: 2.088e-08

上述coefficients中,一般会关注Estimate(系数估计值),Std. Error(系数SE),t value(T统计量),Pr(>|t|)(显著性P值),degrees(自由度)以及Residual standard error(回归/残差标准误)

对于自由度:

统计推断里面,t检验为n-1,简单理解就是有n个数,我们知道了前n-1个具体的数,同时知道了n个数的平均,我们就可以知道第n个数了,所以其实只有n-1个数是自由的。但是在一元回归里,残差所对应的自由度(即t分布的自由度)=n-p(自变量或者称被解释变量的个数)-1(因变量或者称解释变量的个数)。【其实还是和统计推断里面一样的,不过,TSS=RSS+ESS,TSS里面的自由度是n-1,但是RSS自由度为p(自变量或者称被解释变量的个数),所以ESS自由度为n-p-1】

参考自:t检验自由度如何选择?

对于多项式回归的自由度df = L - Rdf,其中L为样本数,Rdf为回归自由度,一般一次多项式Rdf=1,二次多项式Rdf=2依次类推,即回归方程中系数(包括b0)的个数

对于有重复测试的数据,df需要再考虑样本测定次数,因此df = L * R - Rdf,其中R为每个样本的测定次数

对于回归结果的展示,也可用sjPlot包的tab_model()函数来查看更加美观的结果

sjPlot::tab_model(fit.plm, show.se = T, show.stat = T, show.df = T, show.fstat = T, show.dev = T)

Linearity Test

对多项式回归方程进行线性检验(Linearity Test):

对于线性检验,我们可根据每个回归系数的显著性P值来判断 如果二次多项式模型的非线性系数b2,或三次多项式模型的非线性系数b2 和b3中的任意一个与0比较,都有显著差异(P小于0.05),则认为该组数据存在非线性

这只是统计学上的显著性,只是非线性被检测到了;对于临床标准而言,还要进行线性与非线性检验

上述多项式回归分析主要是利用统计学方法进行线性判断,统计学标准的线性可称为一阶线性,对数据组的要求很高。对于在临床实验室中使用的测定方法,在其临床应用实践中允许有一定的非线性误差,此时通过对统计学标准的非线性作程度判断,可得到临床标准的线性,即二阶线性。

临床标准的线性检验中使用了两个统计量,ADL(偏离直线平均差异,average deviation from linearity)与PctBnd(百分区界 ,percent bound) ,对于大多数分析物PctBnd取5%。如ADL小于所要求的临界判断值,则可认为数据组具有临床可接受的线性,所拟合出的最适非线性多项式无临床意义。

参考自:线性范围的评估及数据处理方法以及线性范围评估指南

参考资料:

Fitting Polynomial Regression in R
Polynomial regression techniques
R实现Polynomial regression
https://haifengniu.com/zh/post/r-statistics/

本文出自于http://www.bioinfo-scrounger.com转载请注明出处