car

2023-11-15

本篇介绍如何检验回归结果是否符合模型假设,以及样本中是否存在异常点。本篇使用的主要工具包是car,包名是Companion to Applied Regression的缩写,该包提供了许多用于模型检验的函数。

初始模型如下:

library(car)
library(dplyr)
DATA <- mtcars[, c("mpg", "wt", "qsec", "drat")]
model <- lm(mpg ~ wt + qsec, data = DATA)

4 残差分析

残差是因变量未被自变量解释的部分,线性模型要求残差服从独立同分布,且分布类型为正态分布。通过一系列方法判断残差是否符合这一要求,可以达到检验模型是否符合相应假设的目的。

4.1 模型残差的几种形式

帽子矩阵

帽子矩阵记为 ,有 。对于线性模型来说,

所以,

  • 帽子矩阵只与设计矩阵 有关。

帽子矩阵是行数和列数都与样本数量相同的方阵,其对角线的元素称为对应样本的帽子值,记为

stats中计算帽子值的函数有hatvalueshat

## S3 method for class 'lm'
hatvalues(model, infl = lm.influence(model, do.coef = FALSE), ...)

hat(x, intercept = TRUE)
  • hatvalues函数直接对模型对象使用;

  • hat函数对 使用。

hatvalues(model) %>% head()

##         Mazda RX4     Mazda RX4 Wag        Datsun 710    Hornet 4 Drive 
##        0.06925986        0.04436414        0.06072636        0.05761138 
## Hornet Sportabout           Valiant 
##        0.03890382        0.09571739

X = cbind(c(rep(1, 32)), DATA$wt, DATA$qsec)
hat(X)

##  [1] 0.06925986 0.04436414 0.06072636 0.05761138 0.03890382 0.09571739
##  [7] 0.07290940 0.07910987 0.29502367 0.03576473 0.04604739 0.05607697
## [13] 0.04018415 0.04306089 0.17681412 0.20008504 0.18444635 0.08363669
## [19] 0.11801654 0.12264373 0.08877914 0.04244725 0.03524115 0.09660408
## [25] 0.04825977 0.09094506 0.09356216 0.15232675 0.14923442 0.10267260
## [31] 0.13793379 0.04159134

普通残差

普通残差的计算函数为:

residuals(object, ...)

标准化残差

由于模型的残差来自样本,而非总体,因此标准化残差不能由scale函数得到。

因为,

使用残差的标准差 代替 ,则标准化残差

stats中计算标准化残差的函数为rstandard

## S3 method for class 'lm'
rstandard(model, infl = lm.influence(model, do.coef = FALSE),
          sd = sqrt(deviance(model)/df.residual(model)),
          type = c("sd.1", "predictive"), ...)
  • sd参数为残差的标准差,该函数默认的计算公式为总残差平方和除以残差自由度再开方。

deviance(model)

## [1] 195.4636

sum((fitted(model) - DATA$mpg)^2)

## [1] 195.4636

df.residual(model)

## [1] 29

rstandard(model) %>% head()

##         Mazda RX4     Mazda RX4 Wag        Datsun 710    Hornet 4 Drive 
##       -0.32543724       -0.01900129       -1.00443793       -0.07164647 
## Hornet Sportabout           Valiant 
##        0.19797699       -1.20244126

scale(residuals(model)) %>% head()

##                          [,1]
## Mazda RX4         -0.32461106
## Mazda RX4 Wag     -0.01920486
## Datsun 710        -1.00647043
## Hornet 4 Drive    -0.07191039
## Hornet Sportabout  0.20066887
## Valiant           -1.18221865

学生化残差

学生化残差的计算公式:

  • 是去除第 个样本后估计的模型残差的标准差;

  • 分别为样本个数和自变量个数。

stats中计算学生化残差的函数为rstudent

## S3 method for class 'lm'
rstudent(model, infl = lm.influence(model, do.coef = FALSE),
         res = infl$wt.res, ...)
  • res:模型残差。

rstudent(model) %>% head()

##         Mazda RX4     Mazda RX4 Wag        Datsun 710    Hornet 4 Drive 
##       -0.32036255       -0.01867092       -1.00459752       -0.07040658 
## Hornet Sportabout           Valiant 
##        0.19466525       -1.21213082

4.2 使用plot函数对模型进行诊断

基础绘图系统的plot函数输入对象为回归模型时,返回对象是四幅模型诊断图。

par(mfrow = c(2,2))
plot(model)
  • 四幅图依次为残差-拟合图、正态Q-Q图、尺度-位置图、残差-杠杆图;

  • 除残差-杠杆图用于检验异常点外,其余三幅图均用于检验模型结果是否符合假设。

残差-拟合图

模型拟合值与残差之间的散点图,红色线条表示二者关系的平滑曲线。若满足线性假设,二者应该不存在任何趋势性的关系,即红色线条应该与y = 0基本重合。但从图中观察,残差与拟合值可能具有二次函数关系,因此原模型线性假设可能不成立,可以考虑加入变量的二次项。

分别在模型中加入变量wtqsec的二次项:

model.1 <- update(model, .~. + I(wt^2))
plot(model.1, 1) # 仅输出残差-拟合图
model.2 <- update(model, .~. + I(qsec^2))
plot(model.2, 1) # 仅输出残差-拟合图
  • 可以看出,model.1的残差-拟合图显示拟合值与残差无关,而model.2的结果显示二者仍然存在二次函数关系。因此,在模型中加入wt变量的二次项能使模型满足线性假设。

残差-拟合图的三种情况(薛毅,陈立萍. 统计建模与R软件[M]):

下文以model.1代替model:

model2 <- model.1

正态Q-Q图

Q-Q图可以检验数据序列是否满足某种概率分布,它将对应分布的概率分位数作为横坐标、数据序列的分位数作为纵坐标作成散点图,若该数据序列满足该概率分布,则散点的趋势线应该与某条直线基本重合。

这里正态Q-Q图检验的是标准化残差是否服从

plot(model2, 2) # 只输出正态Q-Q图
  • 图中有文本标注的散点是与对应的标准分布的分位数相差较远的样本;

  • 总体上看,model的残差能够满足正态分布。

尺度-位置图

若模型满足同方差假设,则拟合值处于不同位置时残差的分布范围应该基本相同,即没有明显的集聚性或离散性,这一点可以通过观察残差-拟合图散点的离散程度,但更直观地是通过观察尺度-位置图。该图的纵坐标为标准化残差绝对值的平方根。若满足假设,则趋势线应该基本呈水平状。

plot(model2, 3) # 只输出尺度-位置图
  • 观察model的尺度-位置图可以发现,模型基本满足同方差性。

除了使用plot函数外,还可以使用car工具包的一些函数对线性模型进行诊断。

4.3 成分残差图——线性假设

成分残差图用于检验模型的线性假设,它描述的是自变量 和偏残差 之间的关系,又称偏残差图。偏残差的计算公式为:

式中 表示自变量标识, 表示样本标识。

偏残差实际上是将每个样本对应的残差分解给各个自变量。car工具包中偏残差图的绘制函数为crPlots

绘制所有自变量的偏残差图:

crPlots(model2)

绘制指定自变量的偏残差图:

crPlot(model2, "wt")
  • 若模型符合线性假设,图中的紫红色曲线应该接近为一条直线;

  • 由图可以看出,加入二次项后,wtwt^2与因变量基本满足线性关系。

未加入wt变量二次项的模型的偏残差图:

crPlots(model)

4.4 Q-Q图——正态性假设

car工具包的qqPlot函数以线性模型为输入对象,可以输出Q-Q图。与plot函数不同的是,它是通过检验学生化残差是否服从t分布:

## S3 method for class 'lm'
qqPlot(x, xlab=paste(distribution, "Quantiles"),
    ylab=paste("Studentized Residuals(",
                deparse(substitute(x)), ")", sep=""),
    main=NULL, distribution=c("t", "norm"),
    line=c("robust", "quartiles", "none"), las=par("las"),
    simulate=TRUE, envelope=.95,  reps=100,
    col=carPalette()[1], col.lines=carPalette()[2], lwd=2, pch=1, cex=par("cex"),
    id=TRUE, grid=TRUE, ...)
  • 相比于plot函数,该函数绘制的Q-Q图还带有置信区间,由envelope参数控制置信水平,默认为95%。

qqPlot(model2)
  • 横坐标为t分布的分位数;纵坐标为学生化残差。

该函数也可以以数据序列为输入对象:

## Default S3 method:
qqPlot(x, distribution="norm", groups, layout,
    ylim=range(x, na.rm=TRUE), ylab=deparse(substitute(x)),
    xlab=paste(distribution, "quantiles"), glab=deparse(substitute(groups)),
    main=NULL, las=par("las"),
    envelope=.95, col=carPalette()[1], col.lines=carPalette()[2],
    lwd=2, pch=1, cex=par("cex"),
    line=c("quartiles", "robust", "none"), id=TRUE, grid=TRUE, ...)
  • distribution:待检验的概率分布类型。

检验普通残差是否符合正态分布:

qqPlot(residuals(model2), envelope = 0.99)

stats包也有相关函数可以绘制Q-Q图:

  • qqnorm函数:专门绘制正态Q-Q散点图;

  • qqline函数:专门绘制Q-Q直线图,默认为正态分布;

  • qqplot函数:绘制两个序列之间的Q-Q散点图。

qqnorm(y, ylim, main = "Normal Q-Q Plot",
       xlab = "Theoretical Quantiles", ylab = "Sample Quantiles",
       plot.it = TRUE, datax = FALSE, ...)

qqline(y, datax = FALSE, distribution = qnorm,
       probs = c(0.25, 0.75), qtype = 7, ...)

qqplot(x, y, plot.it = TRUE, xlab = deparse(substitute(x)),
       ylab = deparse(substitute(y)), ...)
  • qqnorm已经指定了横坐标为正态分布的分位数,因此只有y参数,而没有x参数;

  • qqline通过distribution参数指定分布类型,也不需要x参数;

  • qqplot没有指定的分布类型,同时有x和y两个参数。

qqnorm(residuals(model2))
qqline(residuals(model2))
set.seed(234)
qqplot(x = rnorm(32), y = rstandard(model2))
qqline(rstandard(model2))
set.seed(234)
qqplot(x = rt(32, 29), y = rstudent(model2))
qqline(rstudent(model2))

除了通过Q-Q图外,还可以使用shapiro.test函数检验残差的正态性。该函数使用的是Shapiro-Wilk检验:

shapiro.test(residuals(model2))

## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model2)
## W = 0.95504, p-value = 0.2001
  • 检验的原假设为样本分布服从正态分布。W和p值越大,越无法拒绝原假设。

4.5 异方差检验——同方差假设

car工具包中的ncvTest函数可以用来检验模型残差的方差是否为常数:

ncvTest(model, var.formula, ...)
ncvTest(model)

## Non-constant Variance Score Test 
## Variance formula: ~ fitted.values 
## Chisquare = 0.590986, Df = 1, p = 0.44204
  • 检验的原假设为方差是常数,备选假设为方差随拟合值而变化。

  • 由于p > 0.05,可以认为原假设成立,模型符合同方差假设。

4.6 Durbin-Watson检验——独立性假设

car工具包中的durbinWatsonTest函数使用D-W检验判断残差是否存在一阶自相关,即检验模型是否符合独立性假设:

durbinWatsonTest(model2)

##  lag Autocorrelation D-W Statistic p-value
##    1      -0.1568836       2.30422    0.59
##  Alternative hypothesis: rho != 0

4.7 方差膨胀系数——多重共线性假设

方差膨胀系数(VIF)可以用来检验自变量之间是否具有多重共线性。自变量对应的VIF越大,说明其越有可能与其他自变量存在多重共线性。car工具包中的函数为vif

vif(model2)

##        wt      qsec   I(wt^2) 
## 27.076669  1.039145 26.896784
  • wtwt^2之间具有较大的共线性。

5 异常点检验

异常点有如下三类:

  • 离群点:模型残差的绝对值较平均水平大的点;

  • 高杠杆点:对应的帽子值较大的点;

  • 强影响点:对模型的估计结果会产生较大影响的点。

使用plot函数绘制的残差-杠杆图即用来检验以上异常点,实际上该函数可以绘制出3副用于检验异常点的图形:

plot(model2, c(4,5,6))
  • 第2副图为残差-杠杆图,其横坐标为样本的杠杆值,纵坐标为标准化残差,红色实线为二者的趋势线,红色虚线表示等Cook距离线;横坐标过大的点为高杠杆点,纵坐标过大的为离群点,红色虚线外的点为强影响点。

  • 第1副图为各样本对应的Cook距离;

  • 第3副图为杠杆和Cook距离之间的关系图。

判断强影响点有很多种方式,plot采用的是Cook距离法,Cook距离越大,样本越有可能是强影响点。单独计算Cook距离的函数为cooks.distance

## S3 method for class 'lm'
cooks.distance(model, infl = lm.influence(model, do.coef = FALSE),
               res = weighted.residuals(model),
               sd = sqrt(deviance(model)/df.residual(model)),
               hat = infl$hat, ...)
cooks.distance(model2) %>% head()

##         Mazda RX4     Mazda RX4 Wag        Datsun 710    Hornet 4 Drive 
##       0.001462204       0.001070445       0.028330950       0.004065321 
## Hornet Sportabout           Valiant 
##       0.007191579       0.024914520

使用influence.measures函数可以查看更多对强影响点的判断方法:

influence.measures(model, infl = influence(model))
  • 该函数输出对象的数据结构为list。

influence.measures(model)$infmat %>% data.frame() %>% head()

##                         dfb.1_       dfb.wt     dfb.qsec        dffit    cov.r
## Mazda RX4         -0.066746016  0.045198462  0.053535052 -0.087391326 1.180659
## Mazda RX4 Wag     -0.002387037  0.001500934  0.001828698 -0.004022867 1.162549
## Datsun 710        -0.017983327  0.159314504 -0.050256031 -0.255437492 1.063638
## Hornet 4 Drive     0.010086430 -0.002027881 -0.011775541 -0.017408140 1.178309
## Hornet Sportabout  0.015324605  0.005310827 -0.015357764  0.039165267 1.151306
## Valiant            0.300358415 -0.111592643 -0.318621040 -0.394359983 1.053858
##                         cook.d        hat
## Mazda RX4         2.627038e-03 0.06925986
## Mazda RX4 Wag     5.587076e-06 0.04436414
## Datsun 710        2.174253e-02 0.06072636
## Hornet 4 Drive    1.046036e-04 0.05761138
## Hornet Sportabout 5.288512e-04 0.03890382
## Valiant           5.101445e-02 0.09571739
  • dfb.*为去除该样本后的相应自变量的模型估计结果,如dfb.1_的第一行数值是去掉第一个样本后对模型截距的估计结果;

  • dffit为基于拟合值的判断方法;

  • cov.r为基于协方差比值的判断方法。

通过输出对象的is.inf元素查看对应样本是否为强影响点:

influence.measures(model)$is.inf %>% head()

##                   dfb.1_ dfb.wt dfb.qsec dffit cov.r cook.d   hat
## Mazda RX4          FALSE  FALSE    FALSE FALSE FALSE  FALSE FALSE
## Mazda RX4 Wag      FALSE  FALSE    FALSE FALSE FALSE  FALSE FALSE
## Datsun 710         FALSE  FALSE    FALSE FALSE FALSE  FALSE FALSE
## Hornet 4 Drive     FALSE  FALSE    FALSE FALSE FALSE  FALSE FALSE
## Hornet Sportabout  FALSE  FALSE    FALSE FALSE FALSE  FALSE FALSE
## Valiant            FALSE  FALSE    FALSE FALSE FALSE  FALSE FALSE
  • TRUE表示该方法认为该样本是强影响点,FALSE表示认为该样本不是强影响点。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

car 的相关文章

  • 如何在多进程系统中实现锁定?

    我们正在并行运行许多詹金斯项目 我们使用 python 并且选择使用 pyenv 管理虚拟环境 不幸的是 pyenv 有一个众所周知的竞争条件 https github com yyuu pyenv issues 174 为了解决这个问题
  • Python 切片对象和 __getitem__

    python 中是否有内部的东西来处理传递给的参数 getitem 不同 并自动转换start stop step构造成切片 这是我的意思的演示 class ExampleClass object def getitem self args
  • 如何使用 Python 3 绕过 HTTP Error 403: Forbidden with urllib.request

    您好 不是每次都这样 但有时在尝试访问 LSE 代码时 我会收到每一个烦人的 HTTP 错误 403 禁止消息 任何人都知道我如何仅使用标准 python 模块来克服这个问题 遗憾的是没有漂亮的汤 import urllib request
  • 稀有对象的 python 类型注释,例如 psycopg2 对象

    我了解内置类型 但是我如何指定稀有对象 例如数据库连接对象 def get connection and cursor gt tuple psycopg2 extensions cursor psycopg2 extensions conn
  • 如何返回 cost, grad 作为 scipy 的 fmin_cg 函数的元组

    我怎样才能使 scipy 的fmin cg使用一个返回的函数cost and gradient作为元组 问题是有f对于成本和fprime对于梯度 我可能必须执行两次操作 非常昂贵 grad and cost被计算 此外 在它们之间共享变量可
  • 如何过滤 Pandas GroupBy 对象并获取 GroupBy 对象?

    当对 Pandas groupby 操作的结果执行过滤时 它返回一个数据帧 但假设我想执行进一步的分组计算 我必须再次调用 groupby 这似乎有点绕 有更惯用的方法吗 EDIT 为了说明我在说什么 我们无耻地从 Pandas 文档中窃取
  • 创建上下文后将 jar 文件添加到 pyspark

    我正在笔记本上使用 pyspark 并且不处理 SparkSession 的创建 我需要加载一个包含一些我想在处理 rdd 时使用的函数的 jar 您可以使用 jars 轻松完成此操作 但在我的特定情况下我无法做到这一点 有没有办法访问sp
  • 协程从未被等待

    我正在使用一个简单的上下文管理器 其中包含一个异步循环 class Runner def init self self loop asyncio get event loop def enter self return self def e
  • Python Tkinter 模块不显示输出

    我正在尝试学习 Python 并尝试使用 Python 中的 GUI 并遇到了这个 Tkinter 模块 我的代码运行 但运行时窗口没有出现 我的代码如下 from Tkinter import to create a root windo
  • AttributeError:“模块”对象没有属性[重复]

    这个问题在这里已经有答案了 我有两个 python 模块 a py import b def hello print hello print a py print hello print b hi b py import a def hi
  • python 中的 <> 运算符有什么作用?

    我刚刚遇到这个here http www feedparser org feedparser py 总是这样使用 if string1 find string2 lt gt 1 pass 什么是 lt gt 运算符这样做 为什么不使用通常的
  • Python将文本文件解析为嵌套字典

    考虑以下数据结构 HEADER1 key value key value HEADER2 key value key value HEADER3 key value HEADER4 key value key value 原始数据中没有缩进
  • 根据其他单元格值更改多个单元格值

    我想更改包含的单元格moving to movingToOpenor movingToClose基于下一个单元格中给出的状态 有时循环会被中断并且不会从open to close or close to open 这是我当前的数据框 Dat
  • Paste.httpserver 并通过 HTTP/1.1 Keep-alive 减慢速度;使用 httperf 和 ab 进行测试

    我有一个基于paste httpserver 的Web 服务器作为HTTP 和WSGI 之间的适配器 当我使用 httperf 进行性能测量时 如果每次使用 num conn 启动一个新请求 我每秒可以执行超过 1 000 个请求 如果我使
  • 如何查找或安装适用于 Python 的主题 tkinter ttk

    过去 3 个月我一直在制作一个机器人 仅用代码就可以完美运行 现在我的下一个目标是为它制作一个 GUI 但是我发现了一些障碍 主要的一个是能够看起来不像一个 30 年前的程序 我使用的是 Windows 7 我仅使用 Python 3 3
  • 是否需要关闭没有引用它们的文件?

    作为一个完全的编程初学者 我试图理解打开和关闭文件的基本概念 我正在做的一项练习是创建一个脚本 允许我将内容从一个文件复制到另一个文件 in file open from file indata in file read out file
  • 为什么 __dict__ 和 __weakref__ 类从未在 Python 中重新定义?

    类创建似乎从来没有re 定义 dict and weakref class属性 即 如果它们已经存在于超类的字典中 则它们不会添加到其子类的字典中 但始终re 定义 doc and module class属性 为什么 gt gt gt c
  • 使用 PIL 在 Tkinter 中显示动画 GIF

    我正在尝试制作一个程序来使用 Tkinter 显示动画 GIF 这是我最初使用的代码 from future import division Just because division doesn t work right in 2 7 4
  • Django 管理器链接

    我想知道是否有可能 如果可以的话 如何 将多个管理器链接在一起以生成受两个单独管理器影响的查询集 我将解释我正在研究的具体示例 我有多个抽象模型类 用于为其他模型提供小型的特定功能 其中两个模型是DeleteMixin 和GlobalMix
  • 无法安装最新版本的 Numpy (1.22.3)

    我正在尝试安装最新版本的 numpy 即 1 22 3 但看起来 pip 无法找到最后一个版本 我知道我可以从源代码本地安装它 但我想了解为什么我无法使用 pip 安装它 PS 我有最新版本的pip 22 0 4 ERROR Could n

随机推荐

  • 初时Python博大精深

    Python是解释型语言 编译型vs解释型 编译型优点 编译器一般会有预编译的过程对代码进行优化 因为编译只做一次 运行时不需要编译 所以编译型语言的程序执行效率高 可以脱离语言环境独立运行 缺点 编译之后如果需要修改就需要整个模块重新编译
  • 卸载阿里云的mysql_阿里云linux上,记一次mysql重装——卸载,安装 mysql 5.7

    上一次的挖矿病毒可是搞惨我了 虽然勉强清掉了 但是不知道为什么mysql后来无法登录了 找了一切办法来解决 from百度 然并卵 好吧 重装 1 备份 备份原来的数据库 里面有我的所有数据库脚本文件 一一拷出来 root jun cd us
  • ABTest灰度发布

    ABtest一个总的目的和意图是 判断哪种种UI或rerank策略更优 通过事实的依据 CTR或下单率 判断哪种策略更符合用户的习惯和需求 我们经常会面临多个设计方案的选择 比如app或pc端某个界面的某个按钮是用红色还是用蓝色 是放左边还
  • mysql生成随机时间,随机整数

    SELECT FLOOR 7 RAND 6 取7到12的随机整数 包括7到12 SELECT FLOOR 12 rand 13 取12到24的随机整数 包括12到24 LPAD FLOOR 0 RAND 23 2 0 取0 24之间的随机数
  • JUC-13. JMM

    想了解更多JUC的知识 JUC并发编程合集 1 Java内存模型 JMM Java内存模型Java Memory Model 简称JMM 本身是一种抽象的概念 并不真实存在 它描述的是一组规则或规范 通过规范定制了程序中各个变量 包括实例字
  • 凌乱的日期

    import java util ArrayList import java util Arrays import java util Collections import java util HashSet import java uti
  • ubuntu安装驱动 USB转转串口 232串口 PL2303 DB9

    ubuntu安装驱动 USB转串口 RS232串口 PL2303 DB9 工具 安装软件minicom minicom功能快捷键 minicom的使用 cutecom软件安装 cutecom使用 工具 因为我使用的是rs232串口设备芯片为
  • 6.Docker容器底层实现了解与安全机制

    原文地址 点击直达 文章目录 0x00 底层实现 基本架构 简述I O设备 1 命名空间 2 控制组 子系统之Devices 子系统之cpuset 子系统之cpu 子系统之cpuacct 子系统之memory 子系统之blki
  • 一看就懂TCP/IP协议族全析

    TCP IP协议族 计算机与网络设备要相互通信 双方就必须基于相同的方法 如何探测到通信目标 由那一边现发起通信 使用哪种语言 使用那种操作系统 怎样结束通信等都需要事先确定 不同的硬件 操作系统之间的相互通信 所有的这一切都需要一种规则
  • QDialog、QWidget、QMainWindow的区别

    QDialog QWidget QMainWindow的区别 dialog有exec函数 如果是dialog窗口 后边的窗口是不可选的 widget和dialog都有show函数 如果通过这个函数显示这两种类型的窗口 则两个窗口都是可选的
  • 国际带宽市场的发展趋势和前景

    随着全球互联网的不断普及和云计算 人工智能等新技术的迅猛发展 国际带宽市场在不断扩大 成为了全球信息通信领域的重要组成部分 本文将就国际带宽市场的发展趋势和前景进行探讨 一 市场概况 国际带宽是指一个国家或地区连接国际互联网所拥有的带宽资源
  • VMware Workstation Pro 16.2.4安装教程

    VMware Workstation Pro 16 2 4 安装教程 文章目录 VMware Workstation Pro 16 2 4 安装教程 下载最新版VMware 双击打开 自定义安装位置 把 去掉 点击下一步 等待安装 点击许可
  • 主从服务器 共用文件,Docker+keepalived+nginx实现主从热备的方法示例

    前言 为解决单点故障 我们需要配置主从热备方案 服务器数量有限 故使用Docker模拟安装配置 本次配置默认已经安装了Docker 配置环境 centos7 64位 docker版本 Docker version 17 12 1 ce bu
  • Apache Storm之集群安装

    1 环境 storm 1 2 1 Java 7 storm 1 x对java 7 和 java 8均进行了测试 Pytho 2 6 6 Python 3 x理论上也可以 但是并不作为storm的测试 以上是storm的环境 如果不匹配的ja
  • python-异常处理汇总

    1 需求 当程序遇到问题时 不让程序结束 而越过错误继续向下执行 格式 try 语句t except 错误码 语句1 except 错误码 语句2 except 错误码 语句3 except 错误码 语句n else 语句e 注意 else
  • 数字IC秋招面试专题(二)verilog的signed和unsigned

    数字IC秋招面试专题 二 verilog的signed和unsigned 前言 一 右值按signed还是unsigned 二 signed的自动扩位 三 系统函数 signed 和 unsigned 总结 声明 未经作者允许 禁止转载 推
  • ​【UI界面】Foobar2000 FlatLite 整合版

    Foobar2000 是一款本地音乐播放器 这里我就不再做介绍了 不懂的请自行了解 此 Foobar2000 FlatLite 主题包为整合版本 下载既可用 主题界面是模块化的 JS 面板 每个面板都是独立的 面板里的图标也是由 JS 脚本
  • JAVA字符串的两种定义方式的区别

    关于JAVA中两种字符串定义方式的区别 第一次写 就当复习总结一下 希望能帮到需要的人吧 我们知道在JAVA中 对于字符串的实例化方式有两种 直接赋值 String str Hello World 构造方法实例化 String str ne
  • 编写dylib_如何使用第三方的dylib

    展开全部 所谓dylib 就是bsd风格的动态库 基本可以认为等价于e5a48de588b63231313335323631343130323136353331333339663331windows的dll和linux的so mac基于bs
  • car

    本篇介绍如何检验回归结果是否符合模型假设 以及样本中是否存在异常点 本篇使用的主要工具包是car 包名是Companion to Applied Regression的缩写 该包提供了许多用于模型检验的函数 初始模型如下 library c