精华内容
下载资源
问答
  • 近年来,针对离散事件系统的基于模型诊断方法在大型通讯网络、电网故障诊断等领域获得了成功应用,成为人工智能与控制工程领域的热门研究课题。介绍了针对离散事件系统的基于模型诊断的基本思想与建模方法,从不同的...
  • 基于模型诊断的方法,是根据系统模型,来诊断出故障部件。然而,在很多情况下系统模型是未知的,此时需要通过试验,得到系统的部分模型。执行这些试验需要花费大量的资源和时间,因此针对如何缩减试验的次数,利用...
  • eof代码流量相关的跨时间尺度模型诊断 作为我们对 NOAA 模型诊断工作组 (MDTF) 的贡献的一部分,用于流量相关模型诊断和一般天气类型的几种工具。 更多信息:用于耦合环流模型的基于天气类型的跨时间尺度诊断框架 Á...
  • 数据挖掘技术在医疗诊断中的应用——感知机模型诊断心脏病.pdf
  • 给出当待诊断系统的模型为不确定因果理论时,基于模型诊断和模型中心诊断等概念,论证基于模型中心诊断与U-S本原蕴涵/蕴涵式的直接关系,并且根据知识不确定程度对候选诊断进行排序.指出对经典因果理论基于一致性...
  • gglm:线性模型诊断图的图形语法
  • 模拟电路故障的深度学习融合模型诊断方法.pdf
  • 神经网络模型诊断胃肠道早癌价值的Meta分析.pdf
  • R包ss3diags使Stock Synthesis用户可以使用R脚本 “在集成库存评估中使用模型诊断的食谱”一ss3diags介绍的关键模型诊断图。 目前正在最终确定一本手册,其中包含详细。 此外,ss3diags Github存储库提供了有关...
  • 对广义因果理论上基于模型诊断的一般过程进行形式化,对它与本原蕴涵/蕴涵式的直接关系进行论证,从而将理论结果与实现联系起来.表明该结果不仅能够计算只已知部件的部分故障行为方式时基于模型的诊断,还能够计算...
  • 1.4线性回归之模型诊断

    千次阅读 2016-02-07 16:19:51
    我们接着上篇文章开始讲解线性模型诊断方面的操作。我们说过,线性模型的参数估计采用了最小二乘法的思想,但基于该思想是有前提假设的: 1)正态性假设:随机误差项服从均值为0,标准差为sigma的正态分布; 2)独立...

    一、线性回归模型假设条件

    我们接着上篇文章开始讲解线性模型诊断方面的操作。我们说过,线性模型的参数估计采用了最小二乘法的思想,但基于该思想是有前提假设的:

    1)正态性假设:随机误差项服从均值为0,标准差为sigma的正态分布;

    2)独立性:因变量y之间相互独立,即互不影响;

    3)线性关系:因变量与自变量之间必须满足线性相关;

    4)同方差性:随机误差项满足方差齐性;

    只有线性模型满足以上几个假设条件,通过最小二乘法得到的结果才可能比较准确。

     

    首先看一下多元线性模型的参数估计:

    >str(as.data.frame(state.x77))

    'data.frame':   50 obs. of 8 variables:

     $ Population: num  3615 365 2212 2110 21198 ...

     $ Income   : num  3624 6315 4530 3378 5114...

     $ Illiteracy: num  2.1 1.5 1.8 1.9 1.1 0.7 1.1 0.9 1.3 2 ...

     $ Life Exp : num  69 69.3 70.5 70.7 71.7 ...

     $ Murder   : num  15.1 11.3 7.8 10.1 10.3 6.83.1 6.2 10.7 13.9 ...

     $ HS Grad  : num  41.3 66.7 58.1 39.9 62.663.9 56 54.6 52.6 40.6 ...

     $ Frost    : num  20 152 15 65 20 166 139 10311 60 ...

     $ Area     : num  50708 566432 113417 51945156361 ...

    > my.data <-as.data.frame(state.x77[, c(1, 2, 3, 4, 5, 6)])

    > fit <-lm(Murder~., data=my.data)

    > summary(fit)

    Call:

    lm(formula = Murder~ ., data = my.data)

     

    Residuals:

        Min     1Q  Median      3Q    Max

    -3.6960 -1.1351  0.0498 1.3554  3.3204

     

    Coefficients:

                  Estimate Std. Error t valuePr(>|t|)   

    (Intercept)  1.186e+02 1.749e+01   6.779 2.41e-08 ***

    Population   2.264e-04 6.168e-05   3.670 0.000653 ***

    Income      -1.186e-05  5.689e-04 -0.021 0.983469   

    Illiteracy   2.604e+00 5.957e-01   4.371 7.44e-05 ***

    `Life Exp`  -1.686e+00 2.498e-01  -6.751 2.65e-08 ***

    `HS Grad`    8.217e-02 5.191e-02   1.583 0.120615   

    ---

    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’1

     

    Residual standarderror: 1.794 on 44 degrees of freedom

    MultipleR-squared:  0.7879,    Adjusted R-squared:  0.7638

    F-statistic: 32.68on 5 and 44 DF,  p-value: 9.203e-14

    该模型除了IncomeHS Grad变量没有通过显著性检验以外,剩余变量都是显著的,并且模型也通过检验,5个自变量解释了79%的因变量,似乎模型还能说的过去。接下来就对该模型做进一步的验证。

     

    > str(fit)

    List of 12

     $ coefficients : Named num [1:6] 1.19e+022.26e-04 -1.19e-05 2.60 -1.69 ...

      ..- attr(*, "names")= chr [1:6]"(Intercept)" "Population" "Income""Illiteracy" ...

     $ residuals   : Named num [1:50] 3.32 0.202 -1.721 2.009 -0.103 ...

      ..- attr(*, "names")= chr [1:50]"Alabama" "Alaska" "Arizona" "Arkansas"...

     $ effects     : Named num [1:50] -52.17 8.88 7.97 -15.37 -11.81 ...

      ..- attr(*, "names")= chr [1:50]"(Intercept)" "Population" "Income""Illiteracy" ...

     $ rank        : int 6

     $ fitted.values: Named num [1:50] 11.78 11.19.52 8.09 10.4 ...

      ..- attr(*, "names")= chr [1:50]"Alabama" "Alaska" "Arizona" "Arkansas"...

     $ assign      : int [1:6] 0 1 2 3 4 5

     $ qr          :List of 5

      ..$ qr  : num [1:50, 1:6] -7.071 0.141 0.141 0.141 0.141 ...

      .. ..- attr(*, "dimnames")=List of2

      .. .. ..$ : chr [1:50] "Alabama""Alaska" "Arizona" "Arkansas" ...

      .. .. ..$ : chr [1:6] "(Intercept)""Population" "Income" "Illiteracy" ...

      .. ..- attr(*, "assign")= int [1:6]0 1 2 3 4 5

      ..$ qraux: num [1:6] 1.14 1.12 1.03 1.08 1.02...

      ..$ pivot: int [1:6] 1 2 3 4 5 6

      ..$ tol : num 1e-07

      ..$ rank : int 6

      ..- attr(*, "class")= chr"qr"

     $ df.residual : int 44

     $ xlevels     : Named list()

     $ call        : language lm(formula = Murder ~ ., data = my.data)

     $ terms       :Classes 'terms', 'formula' length 3 Murder ~ Population + Income +Illiteracy + `Life Exp` + `HS Grad`

      .. ..- attr(*, "variables")=language list(Murder, Population, Income, Illiteracy, `Life Exp`, `HS Grad`)

      .. ..- attr(*, "factors")= int[1:6, 1:5] 0 1 0 0 0 0 0 0 1 0 ...

      .. .. ..- attr(*, "dimnames")=Listof 2

      .. .. .. ..$ : chr [1:6] "Murder""Population" "Income" "Illiteracy" ...

      .. .. .. ..$ : chr [1:5]"Population" "Income" "Illiteracy" "`LifeExp`" ...

      .. ..- attr(*, "term.labels")= chr[1:5] "Population" "Income" "Illiteracy""`Life Exp`" ...

      .. ..- attr(*, "order")= int [1:5]1 1 1 1 1

      .. ..- attr(*, "intercept")= int 1

      .. ..- attr(*, "response")= int 1

      .. ..- attr(*,".Environment")=<environment: R_GlobalEnv>

      .. ..- attr(*, "predvars")=language list(Murder, Population, Income, Illiteracy, `Life Exp`, `HS Grad`)

      .. ..- attr(*, "dataClasses")=Named chr [1:6] "numeric" "numeric" "numeric""numeric" ...

      .. .. ..- attr(*, "names")= chr[1:6] "Murder" "Population" "Income""Illiteracy" ...

     $ model       :'data.frame':  50 obs. of  6 variables:

      ..$ Murder   : num [1:50] 15.1 11.3 7.8 10.1 10.3 6.8 3.1 6.2 10.7 13.9 ...

      ..$ Population: num [1:50] 3615 365 2212 211021198 ...

      ..$ Income   : num [1:50] 3624 6315 4530 3378 5114 ...

      ..$ Illiteracy: num [1:50] 2.1 1.5 1.8 1.91.1 0.7 1.1 0.9 1.3 2 ...

      ..$ Life Exp : num [1:50] 69 69.3 70.5 70.7 71.7 ...

      ..$ HS Grad  : num [1:50] 41.3 66.7 58.1 39.9 62.6 63.9 56 54.6 52.6 40.6 ...

      ..- attr(*, "terms")=Classes'terms', 'formula' length 3 Murder ~ Population + Income + Illiteracy + `LifeExp` + `HS Grad`

      .. .. ..- attr(*, "variables")=language list(Murder, Population, Income, Illiteracy, `Life Exp`, `HS Grad`)

      .. .. ..- attr(*, "factors")= int[1:6, 1:5] 0 1 0 0 0 0 0 0 1 0 ...

      .. .. .. ..- attr(*,"dimnames")=List of 2

      .. .. .. .. ..$ : chr [1:6]"Murder" "Population" "Income""Illiteracy" ...

      .. .. .. .. ..$ : chr [1:5]"Population" "Income" "Illiteracy" "`LifeExp`" ...

      .. .. ..- attr(*, "term.labels")=chr [1:5] "Population" "Income" "Illiteracy""`Life Exp`" ...

      .. .. ..- attr(*, "order")= int[1:5] 1 1 1 1 1

      .. .. ..- attr(*, "intercept")= int1

      .. .. ..- attr(*, "response")= int1

      .. .. ..- attr(*,".Environment")=<environment: R_GlobalEnv>

      .. .. ..- attr(*, "predvars")=language list(Murder, Population, Income, Illiteracy, `Life Exp`, `HS Grad`)

      .. .. ..- attr(*, "dataClasses")=Named chr [1:6] "numeric" "numeric" "numeric""numeric" ...

      .. .. .. ..- attr(*, "names")= chr[1:6] "Murder" "Population" "Income""Illiteracy" ...

     - attr(*, "class")= chr"lm"

     

     

    1、模型残差的正态性假设的两种方法:

    方法一:正态性检验:使用自定义函数plotErrors(也可以使用自定义函数的norm.test

    > plotErrors<- function(forecasterrors)

    + {

    +  # make a red histogram of the forecast errors: 

    +   mysd <- sd(forecasterrors)

    +   hist(forecasterrors,col="red", freq=FALSE)           画出模型残差的直方图

    注意:下面几句命令可以使用此命令代替

     lines(density(forecasterrors),col="blue", type="l", lwd=2)

     

    +  # freq=FALSE ensures the area under the histogram = 1

    +  # generate normally distributed data with mean 0 and standard deviation mysd  

    +   mynorm <- rnorm(10000,mean=0, sd=mysd)   生成10000个均值为0,方差为模型残差的方差的正态分布数据

    +   myhist <-hist(mynorm, plot=FALSE)

     

    +  # plot the normal curve as a blue line on top of the histogram of forecast errors:

    +   points(myhist$mids,myhist$density, type="l", col="blue", lwd=2)

    + }

     

    >plotErrors(fit$residuals)

     

    >qqnorm(fit$residuals)

    >qqline(fit$residuals)

     

    方法二:使用自定义函数的norm.test

    有关norm.test自定义函数的脚本可以到此处下载:http://yunpan.cn/cH7dXVnCPRqKs 访问密码 f11e

    > norm.test <-function(x, breaks = 20, alpha = 0.05, plot = TRUE){

    +   if(plot == TRUE){

    +     #设置图形界面(多图合为一张图)

    +     opar <- par(no.readonly = TRUE)

    +     layout(matrix(c(1,1,2,3),2,2,byrow =TRUE), width = c(2,2),

    +            heights = c(2,2))

    +     #绘制直方图

    +     hist(x, freq = FALSE,breaks = seq(min(x), max(x), length = breaks), main = 'x的直方图',ylab = '核密度值')

    +     #添加核密度图

    +     lines(density(x), col = 'red', lty = 1,lwd = 2)

    +     #添加正态分布图

    +     x <- x[order(x)]

    +     lines(x, dnorm(x, mean(x), sd(x)), col ='blue', lty = 2, lwd = 2.5)

    +     #添加图例

    +     legend('topright',legend = c('核密度曲线','正态分布曲线'), col =c('red','blue'), lty = c(1,2), lwd = c(2,2.5), bty = 'n')

    +     #绘制Q-Q

    +     qqnorm(x, xlab = '实际分布', ylab = '正态分布', main = 'xQ-Q', col = 'blue')

    +     qqline(x)

    +     #绘制P-P

    +     P <- pnorm(x, mean(x), sd(x))

    +     cdf <- 0

    +     for(i in 1:length(x)){cdf[i] <- sum(x<= x[i])/length(x)}

    +     plot(cdf, P, xlab = '实际分布', ylab = '正态分布', main = 'xP-P', xlim = c(0,1), ylim = c(0,1), col ='blue')

    +     abline(a = 0, b = 1)

    +     par(opar)

    +   }

    +   #定量的shapiro检验

    +   if (length(x) <= 5000) {

    +     shapiro <- shapiro.test(x)

    +     if(shapiro$p.value > alpha)

    +     print(paste('定量结果为:', 'x服从正态分布,', 'P=',round(shapiro$p.value,5), '> 0.05'))

    +     else

    +     print(paste('定量结果为:', 'x不服从正态分布,', 'P=',round(shapiro$p.value,5), '<= 0.05'))

    +     shapiro

    +   }

    +  

    +   else {

    +     ks <- ks.test(x,'pnorm')

    +     if(ks$p.value > alpha)

    +     print(paste('定量结果为:', 'x服从正态分布,', 'P=',round(ks$p.value,5), '> 0.05'))

    +     else

    +     print(paste('定量结果为:', 'x不服从正态分布,', 'P=',round(ks$p.value,5), '<= 0.05'))

    +     ks

    +   }

    + }

    >

    >norm.test(fit$residuals)

    [1] "定量结果为: x服从正态分布, P = 0.80937 > 0.05"

     

            Shapiro-Wilk normality test

     

    data:  x

    W = 0.9859, p-value= 0.8094

     

    通过定性与定量的结果显示,模型的误差项满足正态性的假设。如果误差项不满足正态性检验,那么可以考虑对因变量采取Box-Cox转换(由于误差项是随机变量,因变量也是随机变量,如果误差项不满足正态性假设,也就意味着因变量也不满足正态性假设)。

    关于Box-Cox转换可以使用car包中的powerTransform()函数。常见的转换形式可见如下表格:

    > library(car)

    >powerTransform(my.data$Murder)

    Estimatedtransformation parameters

    my.data$Murder

          0.605542

    从上图发现,需要变换的参数估计值为0.6,比较接近常见变换中的0.5,所以可以考虑将因变量Y变换为Y的开根号。但这里没有不建议这样操作,因为模型中的误差项已经服从正态分布了。

     

     

    2、独立性假设

    对于截面数据,检验个体间是否相互独立,一般通过收集到的数据本身进行验证,无法直接定量得出。例如不同用户的购买习惯、网页浏览情况等。在本例中可以认为美国各洲之间的谋杀率是相互独立的。对于时间序列数据,检验观察间是否相互独立,可以考虑使用杜宾-瓦特森检验(D-W检验)。该检验可以使用car包中的durbinWatsonTest函数实现。为了使用该函数,我们不妨也使用一下该函数,检验观测检的独立性:

    > library(car)

    >durbinWatsonTest(fit)

     lag Autocorrelation D-W Statistic p-value

       1     0.02852993      1.865058  0.652

     Alternative hypothesis: rho != 0

    检验结果显示,P值大于0.05,接受独立的原假设,即序列间不存在自相关性。

     

    3、线性关系

    可以绘制因变量与各个自变量的散点图,确定两者之间是否存在明显的线性关系。如果不存在线性关系,可以考虑变量变换(如对数变换、指数变换、多项式变换等),实现因变量与自变量的线性关系。

    下面对因变量和自变量分别绘制散点图,以显示变量之间是否存在线性关系:

    #谋杀率与人口数的散点图

    opar <-par(no.readonly = TRUE)

    par(mfrow =c(1,2))

    plot(my.data$Population,my.data$Murder, xlab = 'Population', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data$Population),col = 'red')

    text(15000,4,paste('相关系数为:',round(cor(my.data$Population,my.data$Murder),2)), col = 'blue')

     

    #谋杀率与收入的散点图

    plot(my.data$Income,my.data$Murder, xlab = 'Income', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data$Income),col = 'red')

    text(5500,3,paste('相关系数为:',round(cor(my.data$Income, my.data$Murder),2)), col = 'blue')

     

    #谋杀率与文盲率的散点图

    plot(my.data$Illiteracy,my.data$Murder, xlab = 'Illiteracy', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data$Illiteracy),col = 'red')

    text(2,4,paste('相关系数为:', round(cor(my.data$Illiteracy,my.data$Murder),2)), col = 'blue')

     

    #谋杀率与寿命的散点图

    plot(my.data[,'LifeExp'], my.data$Murder, xlab = 'Life Exp', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data[,'LifeExp']), col = 'red')

    text(69,4,paste('相关系数为:', round(cor(my.data[,'Life Exp'],my.data$Murder),2)), col = 'blue')

     

    #谋杀率与高中毕业率的散点图

    plot(my.data[,'HSGrad'], my.data$Murder, xlab = 'HS Grad', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data[,'HSGrad']), col = 'red')

    text(43,4,paste('相关系数为:', round(cor(my.data[,'HS Grad'],my.data$Murder),2)), col = 'blue')

    plot(fit,which = 1)

    par(opar)

    从结果中可以得知只有各洲的文盲率、寿命与谋杀率存在较高的线性相关性。并且文盲率越高,谋杀率越高;老龄化越严重谋杀率越低。其他变量与谋杀率的相关性就显得不明显了。在“残差拟合值”散点图中明显存在一条非线性的曲线,说明某些变量与因变量之间不存在线性关系。

     

    关于因变量与自变量的线性性假设,还可以通过成分残差图来判断各个自变量与因变量之间是否存在线性相关。该图的实现可运用car包的crPlots()函数。

    > library(car)

    > crPlots(fit)

    可见该函数返回的线性相关性检验可视化图与上图中的散点图结论基本一致。

     

    4、同方差性

    如果模型的残差项不满足方差齐性的话,最小二乘估计将产生严重的错误,如参数估计量的方差不具有最小方差性,那么估计与预测的精度降低。

    对于模型误差项方差齐性的检验:

    方法一、可以使用扩展包lmtest中的bptest()函数。

    > library(lmtest)

    > bptest(fit)

            studentized Breusch-Pagan test

    data:  fit

    BP = 4.32, df = 5, p-value = 0.5043

     

    方法二、或者利用car包中的ncv.test()函数

    > library(car)

    > ncvTest(fit)

    Non-constantVariance Score Test

    Variance formula: ~fitted.values

    Chisquare =0.3819702    Df = 1    p = 0.5365507

     

    > plot(x=fitted(fit), y=sqrt(abs(rstandard(fit))), xlab="预测值", ylab="学生化残差平方根")

    > abline(h=0.75,col="blue")

    不论从定性(位置尺度图中的散点随机分布在水平线0.75附近)和定量(P值均大于0.05)的角度,都可以说明模型的误差项符合方差齐性的假设。如果误差项不满足方差齐性的假设,也可以考虑Box-Cox变换,使模型的误差项满足方差齐性。

     

    二、线性回归模型诊断

    自变量之间如果有较强的相关关系,就很难求得较为理想的回归方程;若个别观测点与多数观测点偏离很远或因过失误差(如抄写或输入错误所致),它们也会对回归方程的质量产生极坏的影响。对这两面的问题进行监测和分析的方法,称为回归诊断。前者属于共线性诊断问题;后者属于异常点诊断问题。

     

    1、共线性诊断(过拟合overfitting

    多重共线性是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。

    方法一、通过方差膨胀因子(VIF)检验模型中的自变量间是否存在多重共线性。car包中的vif()函数检验

    > library(car)

    > vif(fit)

    Population     Income Illiteracy `Life Exp`  `HS Grad`

      1.154183  1.860073   2.006550   1.711095  2.675924

    一般方差膨胀因子大于4就可能存在多重共线性问题。从上可知,没有一个变量的方差膨胀因子大于4,可以认为变量间不存在多重共线性。

     

    方法二、还可以使用R自带的kappa()函数检验模型中变量的多重共线性。

    >kappa(cor(my.data[, c("Population", "Income","Illiteracy", "Life Exp", "HS Grad")]))

    [1] 8.75853

    一般k<100时,则认为多重共线性可能性很小,100<= k <= 1000时,认为存在中等程度或较强的多重共线性,而k>1000时,认为存在严重的多重共线性。从结果中也说明这5个变量间不存在多重共线性。

     

     

    2、异常点诊断

    有关异常点诊断,《统计建模与R语言》中提到了帽子矩阵对角元素检验法、DFFITS准则、Cook统计量和COVRATIO准则。

     

    帽子矩阵对角元素检验法

    如果帽子矩阵对角元素满足如下条件,则认为第i组样本影响较大,可以结合其他准则,考虑是否将其剔除。

    Rhatvalues()函数可以直接求得帽子矩阵的对角元素。

     

    DFFITS准则

    在满足以上条件时,可以认为第i个样本影响比较大,需要引起注意。Rdffits()函数可以计算得到D统计量。

     

    Cook统计量

    该统计量的计算可以使用cooks.distance()函数求得。一般来说,Cook统计量越大,说明该点越可能为异常点。但该方法的缺点是无法界定Cook统计量多大才算大,这需要视具体情况而定。

     

    COVRATIO准则

    有关COVRATIO值的计算可以直接使用covratio()函数得到。判定原则是:COVRATIO值离1越远,则认为样本对模型的的影响越大。

     

    三、到此,基本完成了本文的两个任务,即模型的假设检验和模型的诊断,中间使用到了很多的函数来实现模型的检验。

    1R中提供了一个非常便捷的函数可以直接进行模型的假设检验,该函数是gvlma包中的gvlma函数。

    > library(gvlma)

    > gvlma(fit)

    Call:

    lm(formula = Murder~ ., data = my.data)

     

    Coefficients:

    (Intercept)   Population       Income  Illiteracy   `Life Exp` 

      1.186e+02   2.264e-04   -1.186e-05    2.604e+00  -1.686e+00 

      `HS Grad` 

      8.217e-02 

     

     

    ASSESSMENT OF THELINEAR MODEL ASSUMPTIONS

    USING THE GLOBALTEST ON 4 DEGREES-OF-FREEDOM:

    Level ofSignificance =  0.05

     

    Call:

     gvlma(x = fit)

     

                         Value p-value                Decision

    GlobalStat        2.31584  0.6779 Assumptions acceptable.

    Skewness           0.05779  0.8100 Assumptions acceptable.

    Kurtosis           1.02584  0.3111 Assumptions acceptable.

    Link Function      0.58648 0.4438 Assumptions acceptable.

    Heteroscedasticity0.64573  0.4216 Assumptions acceptable.

    从上图中的红框内容显示,数据满足OLS(最小二乘法)回归模型的所有统计假设。如果“全局统计量”被拒绝,即认为模型不满足统计假设时,可以回到前面的检验过程进行一一验证并修正。

     

    2、最后再讲解一下多元线性回归模型中逐步回归的过程,该过程分向前回归、向后回归和向前向后回归。

    向前回归指原始模型不包含任何自变量,在该回归过程中一一向模型添加满足条件的自变量。

    向后回归指原始模型包含所有自变量,在该过程中一一删除某些不满足条件的自变量。

    向前向后回归则是同时考虑向前回归和向后回归,使模型在选择变量时有出有进。

     

    Rstep()函数就是用于实现多元线性模型的逐步回归过程,指定step()函数中direction参数,可以实现向前、向后和向前向后逐步回归。

    > fit.new <-step(fit, direction="both")

    Start:  AIC=64.07

    Murder ~ Population+ Income + Illiteracy + `Life Exp` + `HS Grad`

                 Df Sum of Sq    RSS   AIC

    - Income      1    0.001 141.66 62.069

    <none>                    141.66 64.069

    - `HS Grad`   1    8.066 149.72 64.838

    - Population  1   43.358 185.01 75.421

    - Illiteracy  1   61.517 203.17 80.102

    - `Life Exp`  1  146.741 288.40 97.616

     

    Step:  AIC=62.07

    Murder ~ Population+ Illiteracy + `Life Exp` + `HS Grad`

                 Df Sum of Sq    RSS   AIC

    <none>                    141.66 62.069

    - `HS Grad`   1   10.837 152.49 63.755

    + Income      1    0.001 141.66 64.069

    - Population  1   49.198 190.86 74.975

    - Illiteracy  1   62.070 203.73 78.238

    - `Life Exp`  1  147.187 288.85 95.693

     

    >summary(fit.new)

    Call:

    lm(formula = Murder~ Population + Illiteracy + `Life Exp` +

        `HS Grad`, data = my.data)

     

    Residuals:

       Min    1Q Median     3Q    Max

    -3.687 -1.132  0.052 1.357  3.323

     

    Coefficients:

                  Estimate Std. Error t valuePr(>|t|)   

    (Intercept)  1.185e+02 1.717e+01   6.904 1.42e-08 ***

    Population   2.259e-04 5.715e-05   3.953  0.00027 ***

    Illiteracy   2.605e+00 5.867e-01   4.440 5.77e-05 ***

    `Life Exp`  -1.686e+00 2.466e-01  -6.838 1.77e-08 ***

    `HS Grad`    8.161e-02 4.399e-02   1.855  0.07010 . 

    ---

    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’1

     

    Residual standarderror: 1.774 on 45 degrees of freedom

    MultipleR-squared:  0.7879,    Adjusted R-squared:  0.769

    F-statistic: 41.78on 4 and 45 DF,  p-value:1.323e-14

     

    > gvlma(fit.new)

    Call:

    lm(formula = Murder~ Population + Illiteracy + `Life Exp` + `HS Grad`, data = my.data)

     

    Coefficients:

    (Intercept)   Population  Illiteracy   `Life Exp`    `HS Grad` 

      1.185e+02   2.259e-04    2.605e+00   -1.686e+00   8.161e-02 

     

    ASSESSMENT OF THELINEAR MODEL ASSUMPTIONS

    USING THE GLOBALTEST ON 4 DEGREES-OF-FREEDOM:

    Level ofSignificance =  0.05

     

    Call:

     gvlma(x = fit.new)

     

                         Value p-value                Decision

    GlobalStat        2.29300  0.6820 Assumptions acceptable.

    Skewness           0.05595  0.8130 Assumptions acceptable.

    Kurtosis           1.03265  0.3095 Assumptions acceptable.

    Link Function      0.56261 0.4532 Assumptions acceptable.

    Heteroscedasticity0.64178  0.4231 Assumptions acceptable.

    可见新模型在满足OLS假设条件前提下,模型的系数也通过了显著性检验,模型有进一步的提升。

     

     

    展开全文
  • 基于人工智能的模型诊断分析,AI领域其它分支(例如,知识表示,机器学习,定性推理,经典推理,非单调推理,概率推理,模态推理,时态推理,模糊推理,约束问题求解,控制理论,等)的许多研究成果可以在MBD中得到...
  • 利用阀门工作位置和参数的最优抽油杆连续隐马尔可夫模型诊断抽油杆
  • 基于R语言的线性回归模型诊断

    千次阅读 2015-10-13 23:41:04
    一、线性回归模型假设条件我们接着上篇文章《R语言下的线性回归模型》开始讲解线性模型诊断方面的操作。我们说过,线性模型的参数估计采用了最小二乘法的思想,但基于该思想是有前提...

    一、线性回归模型假设条件

    我们接着上篇文章《R语言下的线性回归模型》开始讲解线性模型诊断方面的操作。我们说过,线性模型的参数估计采用了最小二乘法的思想,但基于该思想是有前提假设的:


    1)正态性假设:随机误差项服从均值为0,标准差为sigma的正态分布;

    2)独立性:因变量y之间相互独立,即互不影响;

    3)线性关系:因变量与自变量之间必须满足线性相关;

    4)同方差性:随机误差项满足方差齐性;

    只有线性模型满足以上几个假设条件,通过最小二乘法得到的结果才可能比较准确。


    首先看一下多元线性模型的参数估计:

    0?wx_fmt=png
    该模型除了Income和HS Grad变量没有通过显著性检验以外,剩余变量都是显著的,并且模型也通过检验,5个自变量解释了79%的因变量,似乎模型还能说的过去。接下来就对该模型做进一步的验证。


    1、模型残差的正态性假设

    正态性检验可以使用《定性与定量的单变量正态性检验》中自定义函数norm.test。

    0?wx_fmt=png
    通过定性与定量的结果显示,模型的误差项满足正态性的假设。如果误差项不满足正态性检验,那么可以考虑对因变量采取Box-Cox转换(由于误差项是随机变量,因变量也是随机变量,如果误差项不满足正态性假设,也就意味着因变量也不满足正态性假设)。

    关于Box-Cox转换可以使用car包中的powerTransform()函数。常见的转换形式可见如下表格:

    0?wx_fmt=png
    0?wx_fmt=png
    从上图发现,需要变换的参数估计值为0.6,比较接近常见变换中的0.5,所以可以考虑将因变量Y变换为Y的开根号。但这里没有不建议这样操作,因为模型中的误差项已经服从正态分布了。


    有关norm.test自定义函数的脚本可以到此处下载:

    http://yunpan.cn/cH7dXVnCPRqKs 访问密码 f11e


    2、独立性假设

    对于截面数据,检验个体间是否相互独立,一般通过收集到的数据本身进行验证,无法直接定量得出。例如不同用户的购买习惯、网页浏览情况等。在本例中可以认为美国各洲之间的谋杀率是相互独立的。对于时间序列数据,检验观察间是否相互独立,可以考虑使用杜宾-瓦特森检验(D-W检验)。该检验可以使用car包中的durbinWatsonTest函数实现。为了使用该函数,我们不妨也使用一下该函数,检验观测检的独立性:

    0?wx_fmt=png
    检验结果显示,P值大于0.05,接受独立的原假设,即序列间不存在自相关性。


    3、线性关系

    可以绘制因变量与各个自变量的散点图,确定两者之间是否存在明显的线性关系。如果不存在线性关系,可以考虑变量变换(如对数变换、指数变换、多项式变换等),实现因变量与自变量的线性关系。


    下面对因变量和自变量分别绘制散点图,以显示变量之间是否存在线性关系:

    脚本如下:

    #谋杀率与人口数的散点图

    opar <- par(no.readonly = TRUE)

    par(mfrow =c(1,2))

    plot(my.data$Population, my.data$Murder,

    xlab = 'Population', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data$Population), col = 'red')

    text(15000,4,paste('相关系数为:',

    round(cor(my.data$Population, my.data$Murder),2)),

    col = 'blue')


    #谋杀率与收入的散点图

    plot(my.data$Income, my.data$Murder,

    xlab = 'Income', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data$Income), col = 'red')

    text(5500,3,paste('相关系数为:',

    round(cor(my.data$Income, my.data$Murder),2)),

    col = 'blue')


    #谋杀率与文盲率的散点图

    plot(my.data$Illiteracy, my.data$Murder,

    xlab = 'Illiteracy', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data$Illiteracy), col = 'red')

    text(2,4,paste('相关系数为:',

    round(cor(my.data$Illiteracy, my.data$Murder),2)),

    col = 'blue')


    #谋杀率与寿命的散点图

    plot(my.data[,'Life Exp'], my.data$Murder,

    xlab = 'Life Exp', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data[,'Life Exp']), col = 'red')

    text(69,4,paste('相关系数为:',

    round(cor(my.data[,'Life Exp'], my.data$Murder),2)),

    col = 'blue')


    #谋杀率与高中毕业率的散点图

    plot(my.data[,'HS Grad'], my.data$Murder,

    xlab = 'HS Grad', ylab = 'Murder')

    abline(lm(my.data$Murder~my.data[,'HS Grad']), col = 'red')

    text(43,4,paste('相关系数为:',

    round(cor(my.data[,'HS Grad'], my.data$Murder),2)),

    col = 'blue')

    plot(fit,which = 1)

    par(opar)

    0?wx_fmt=png

    0?wx_fmt=png

    0?wx_fmt=png


    从结果中可以得知只有各洲的文盲率、寿命与谋杀率存在较高的线性相关性。并且文盲率越高,谋杀率越高;老龄化越严重谋杀率越低。其他变量与谋杀率的相关性就显得不明显了。在“残差拟合值”散点图中明显存在一条非线性的曲线,说明某些变量与因变量之间不存在线性关系


    关于因变量与自变量的线性性假设,还可以通过成分残差图来判断各个自变量与因变量之间是否存在线性相关。该图的实现可运用car包的crPlots()函数

    library(car)

    crPlots(fit)

    0?wx_fmt=png
    可见该函数返回的线性相关性检验可视化图与上图中的散点图结论基本一致。


    4、同方差性

    如果模型的残差项不满足方差齐性的话,最小二乘估计将产生严重的错误,如参数估计量的方差不具有最小方差性,那么估计与预测的精度降低。


    对于模型误差项方差齐性的检验可以使用扩展包lmtest中的bptest()函数。或者利用car包中的ncv.test()函数

    library(lmtest)

    bptest(fit)

    library(car)

    ncvTest(fit)

    0?wx_fmt=jpeg


    不论从定性(位置尺度图中的散点随机分布在水平线0.75附近)和定量(P值均大于0.05)的角度,都可以说明模型的误差项符合方差齐性的假设。如果误差项不满足方差齐性的假设也可以考虑Box-Cox变换,使模型的误差项满足方差齐性。


    二、线性回归模型诊断

    自变量之间如果有较强的相关关系,就很难求得较为理想的回归方程;若个别观测点与多数观测点偏离很远或因过失误差(如抄写或输入错误所致),它们也会对回归方程的质量产生极坏的影响。对这两面的问题进行监测和分析的方法,称为回归诊断。前者属于共线性诊断问题;后者属于异常点诊断问题


    1、共线性诊断

    多重共线性是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。一般通过方差膨胀因子(VIF)检验模型中的自变量间是否存在多重共线性。car包中的vif()函数可以实现检验。

    0?wx_fmt=png

    一般方差膨胀因子大于4就可能存在多重共线性问题。从上图中,没有一个变量的方差膨胀因子大于4,可以认为变量间不存在多重共线性。除了vif函数外,还可以使用R自带的kappa()函数检验模型中变量的多重共线性。


    kappa(cor(my.data[,c('Population', 'Income',

    'Illiteracy', 'Life Exp', 'HS Grad')]))

    [1] 8.75853

    一般k<100时,则认为多重共线性可能性很小,100<= k <= 1000时,认为存在中等程度或较强的多重共线性,而k>1000时,认为存在严重的多重共线性。从结果中也说明这5个变量间不存在多重共线性。


    2、异常点诊断

    有关异常点诊断,《统计建模与R语言》中提到了帽子矩阵对角元素检验法、DFFITS准则、Cook统计量和COVRATIO准则。


    帽子矩阵对角元素检验法

    如果帽子矩阵对角元素满足如下条件,则认为第i组样本影响较大,可以结合其他准则,考虑是否将其剔除。

    0?wx_fmt=png

    0?wx_fmt=png


    其中X为自变量值矩阵,p为自变量个数,n为样本量。

    R中hatvalues()函数可以直接求得帽子矩阵的对角元素。


    DFFITS准则

    0?wx_fmt=png
    在满足以上条件时,可以认为第i个样本影响比较大,需要引起注意。R中dffits()函数可以计算得到D统计量。


    Cook统计量

    0?wx_fmt=png
    该统计量的计算可以使用cooks.distance()函数求得。一般来说,Cook统计量越大,说明该点越可能为异常点。但该方法的缺点是无法界定Cook统计量多大才算大,这需要视具体情况而定。


    COVRATIO准则

    0?wx_fmt=png
    有关COVRATIO值的计算可以直接使用covratio()函数得到。判定原则是:COVRATIO值离1越远,则认为样本对模型的的影响越大。


    到此,基本完成了本文的两个任务,即模型的假设检验和模型的诊断,中间使用到了很多的函数来实现模型的检验。R中提供了一个非常便捷的函数可以直接进行模型的假设检验,该函数是gvlma包中的gvlma函数

    0?wx_fmt=png
    从上图中的红框内容显示,数据满足OLS回归模型的所有统计假设。如果“全局统计量”被拒绝,即认为模型不满足统计假设时,可以回到前面的检验过程进行一一验证并修正。


    最后再讲解一下多元线性回归模型中逐步回归的过程,该过程分向前回归、向后回归和向前向后回归。


    向前回归指原始模型不包含任何自变量,在该回归过程中一一向模型添加满足条件的自变量。

    向后回归指原始模型包含所有自变量,在该过程中一一删除某些不满足条件的自变量。

    向前向后回归则是同时考虑向前回归和向后回归,使模型在选择变量时有出有进。


    R中step()函数就是用于实现多元线性模型的逐步回归过程,指定step()函数中direction参数,可以实现向前、向后和向前向后逐步回归


    fit.new <- step(fit,direction = 'both')

    summary(fit.new)

    gvlma(fit.new)

    0?wx_fmt=png

    0?wx_fmt=png

    可见新模型在满足OLS假设条件前提下,模型的系数也通过了显著性检验,模型有进一步的提升。


    参考文献

    http://blog.csdn.net/yujunbeta/article/details/8169475

    R语言实战

    统计建模与R语言


    总结:文中涉及到的R包和函数

    stats包

    lm()

    plot()

    abline()

    kappa()

    hatvalues()

    dffits()

    cooks.distance()

    covratio()

    step()

    car包

    powerTransform()

    durbinWatsonTest()

    crPlots()

    ncvTest()

    lmtest包

    bptest()

    vif()

    gvlma包

    gvlma()

    展开全文
  • 07级吉林大学研究生《基于模型诊断》课件
  • 目前已有的诊断系统一般都默认有完备而可靠的模型,但在实际中常无法实现.因此,在目前已知的对待诊断设备的可靠描述之外,提出了可加入假设性的信息作为对无法完备模型的补充,并且这些假设采用了从规范缺省理论中...
  • 基于模型诊断是为了克服传统故障诊断方法的缺点而兴起的一项新型的智能诊断推理技术,其应用越来越广泛。而混合系统是当前应用较多的动态系统之一,其故障诊断问题是当前研究领域的热门。在此介绍两种对混合系统...
  • R语言回归模型诊断方式有哪些?如何解读这些诊断方式?:残差和样本杠杆值的关系图、比例-位置图、正太QQ图、残差和拟合曲线关系图 目录 R语言回归模型诊断方式有哪些?如何解读这些诊断方式?:残差和样本杠杆...

    R语言回归模型诊断方式有哪些?如何解读这些诊断方式?:残差和样本杠杆值的关系图、比例-位置图、正太QQ图、残差和拟合曲线关系图

     

    目录

    展开全文
  • logistic 回归 模型诊断

    千次阅读 2018-10-03 11:35:14
    有关从模型中删除项的更多信息,请转到模型简化。 如果一个模型项在统计意义上显著,则解释取决于该项的类型。解释如下所示: 如果一个连续预测变量显著,则可以断定响应水平概率取决于该预测变量。 如果一个类别...

    参考 https://support.minitab.com/zh-cn/minitab/18/help-and-how-to/modeling-statistics/regression/how-to/nominal-logistic-regression/interpret-the-results/all-statistics/

    1. p 值
      P 值是一个概率,用来度量否定原假设的证据。概率越低,否定原假设的证据越充分。
      (原假设 H0: 该自变量项与因变量之间的关联在统计意义上不显著)
      解释
      将该特征(因变量)项的 P 值与显著性水平进行比较,可以评估原假设,确定因变量与模型中每个自变量(特征)项之间的关联在统计意义上是否显著。
      原假设声明该项的系数等于零,意味着该项与响应之间没有关联。
      通常,显著性水平(用 α 或 alpha 表示)为 0.05 即可。显著性水平 0.05 指示在实际上不存在关联时得出存在关联的风险为 5%。
      P 值 ≤ α:关联在统计意义上显著
      可以得出响应变量与项之间的关联在统计意义上显著的结论。
      P 值 > α:关联在统计意义上不显著
      无法得出响应变量与该项之间的关联在统计意义上显著的结论。可能希望重新拟合没有该项的模型。
      如果多个预测变量与响应在统计意义上没有显著的关联,则可以通过删除项(一次删除一个)来简化模型。有关从模型中删除项的更多信息,请转到模型简化。
      如果一个模型项在统计意义上显著,则解释取决于该项的类型。解释如下所示:
      如果一个连续预测变量显著,则可以断定响应水平概率取决于该预测变量。
      如果一个类别预测变量显著,则可以断定响应水平的不同概率会出现在因子的相应水平而不是因子的参考水平。
      如果一个交互作用项显著,则可以断定预测变量与响应水平概率之间的关系取决于该项中的其他预测变量。
      如果一个多项式项显著,则可以断定预测变量与响应水平概率之间的关系取决于预测变量的量值。

    展开全文
  • 针对基于模型的故障诊断流程中故障检测和故障识别两个关键问题,提出了一种基于神经网络的实现方法,首先利用BP神经网络进行参数估计,并结合系统模型进行故障检测;然后采用ART2神经网络进行数据聚类,并基于聚类...
  • 利用基于模型诊断理论研究元件的替换问题,提出系统替换修复与重新配置的概念,并利用元件替换对系统观测值的影响刻划了系统的修复与重新配置等相关问题。
  • 四相整流器是一种新型的整流电路,较之传统...针对四相整流电路中常见的晶闸管断路故障,提出了应用参考模型法结合快速傅立叶变换和小波包变换的分析方法,并以此设计了相应的元器件故障诊断系统,在仿真中对其进行了验证。
  • 在回归模型中,常见违背基本假设的情况有异方差、自相关和异常值。 异方差 回归模型中的异方差是指随机误差项的方差不是一个常数,而是随着自变量的取值变化而变化。 由于不满足回归分析中的同方差的前提假设,异...
  • 第2章-回归模型(2)-模型诊断

    千次阅读 2019-01-10 11:32:03
    上一节,我们研究了回归模型的线性定义,假设条件,参数估计,以及基于统计学检验的模型评价。但是这并不是意味着我们的回归模型以及可以投入使用,进行决策了。我们还需要在计量经济学的基础上验证模型,当模型出现...
  • 时间序列拟合模型诊断

    千次阅读 2014-09-08 10:44:07
    法(一)  检验残差:  A), 独立性:  1), 观察每个残差自相关系数是否超出... 2), Ljung-Box检验(对于ARMA(p,q)模型)  将所有残差自相关系数合成一个数Q,考察其是否满足卡放分布(自由度K-p-q);  B), 正态性:
  • 正则化的目的就是防止模型过拟合,现在模型出现了欠拟合,当然可以通过减小正则化参数的方法来避免欠拟合,不需要多解释。   ————————————————分割线————————————————  ...
  • 工作中用到的模型诊断指数

    千次阅读 2015-07-03 11:08:22
    1. 一般统计量 均值、方差、最小值、最大值、1%分位数、5%分位数、 10%分位数、25%分位数、 50%分位数、75%分位数、90%分... 按照模型LR,使用score均值作为变量,带入模型LR中,计算出预测的tag均值
  • 数据准备 1.Fraction Subtraction Data 数据描述: ...536个学生做20道关于分数减法的响应数据集 ... alpha6 column borrow to subtract the second numerator from the ... TIMSS Dataset (介绍了DINA、DINO模型
  • 线性回归,是概率统计学里最重要的统计方法,也是...在任何线性模型中,能够直接“lm”(模型有意义),既要考虑各个参数的t-test所得出的p-value,也要考虑总体模型F-检验得出的p-value。在这之后,还要清楚一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,164
精华内容 24,865
关键字:

模型诊断