第六讲-统计分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• > mod1 Call:lm(formula = y ~ x1 + x2, data = production) Coefficients: (Intercept) x1 x2 0.0122033 2.0094758 -0.0005314 只显示了调用的公式和参数估计结果。 > summary( mod1) • 使用summary()函数可以给出更详尽的结果,包括Call、 Residentials(列出残差的最小值,1/4分位数,中位数, 3/4分位数,最大值)、Coefficients(列出了模型的系数估 计,假设检验统计量和p值)。 • 类似这样的提取信息的函数还有很多,详见后页
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
可见因素是显著的。
统计分析实例(一)
• Forbes数据 • 19世纪四五十年代,苏格兰物理学家James D. Forbes试图通过水的沸点来估计海拔高度。他在 阿尔卑斯山及苏格兰收集数据以后得到一些值, 发表在论文中,下例收集了论文中的17个地方的 数据,进行分析。分析的内容有: • 气压和沸点是如何联系的? • 关系是强还是弱? • 能够根据温度预测气压?如果能,有效性如何?
• > eda.ts=function(x) { oldpar <- par(mfrow=c(2,1),
mar=c(2,2,1,0.2), mgp=c(1.2, 0.2, 0)); plot.ts(x, main="", xlab=""); acf(x, main="", xlab=""); par(oldpar); invisible()} 函数中最后的invisible()表示在命令行调用此函数时不要 显示任何返回值。 变量iqd 计算的是函数的四分位间距。函数density用来 作核密度曲线估计,其width参数为核估计的参数。 plot.ts是对时间序列的对象作图。 acf是画出时间序列的自相关系数和自协方差系数; 现在调用这些函数来研究各数值型变量的分布情况。在 调用前先把数据框cl连接入当前的搜索路径中以直接使 用cl中的变量名:
• > lm.updated <- lm(log100 ~ F, data=forbes, subset=-12); • > summary(lm.updated)
统计分析实例(二)
• 下面我们以那个学生班的情况为例进行一些分析。 我们希望了解体重、身高、年龄、性别等变量的 基本情况及互相之间的关系。 • 一、数据输入 • 我们先把数据读入一个R数据框对象中: • > cl <- read.table("cl.txt", header=T, sep='\t');
探索性数据分析(EDA)
• 首先我们先研究各变量的分布情况,看分布是否 接近正态,有无明显的异常值,有没有明显的序 列相关,等等。 • 研究连续型变量的分布,可以使用直方图、盒形 图、分布密度估计图和正态概率图。研究离散型 变量分布只要画其分布频数条形图即可,分布频 数用table函数计算。研究序列相关性可以作时间 序列图和自相关函数图。因为这些图经常重复使 用,我们把它们定义为函数,在同一页面画出:
y~A+x
y ~ A*By ~ A + B + A:B y ~ B %in% A y ~ A/B y ~ (A + B + C)^2 表示三因素试验,只考虑两两交互作 y ~ A*B*C - A:B:C 用而不考虑三个因素间的交互作用。 两个公式是等价的。 y~A*x 都表示对因子A的每一水平拟合y对x y~A/x 的线型回归,但三个公式的编码方式 y ~ A / (1 + x) - 1 不同。最后一种形式对A的每一水平 都分别估计截距项和斜率项。 y ~ A*B + Error(C) 表示有两个处理因素A和B,误差分层 由因素C确定的设计
提取信息的通用函数
• lm()函数的返回值叫做模型拟合结果对象,本 质上是一个列表,有model 、coefficients、 residuals等成员。lm()的结果显示十分简单,为 了获得更多的拟合信息,可以使用对lm类对象 有特殊操作的通用函数,这些函数包括: add1 coef effects kappa predict residuals alias deviance family labels print summary anova drop1 formula plot proj • 下表给出了lm类(拟合模型类)常用的通用函 数的简单说明。
• 每一项定义了要加入模型矩阵或从模型矩阵中删除 的若干列。一个1表示一个截距项列,除非显式地 删除总是隐含地包括在模型公式中。 • 注意在函数调用的括号内的表达式按普通四则运算 解释。函数I()可以把一个计算表达式封装起来作为 模型的一项使用。 • 注意R的模型表示只给出了因变量和自变量及自变 量间的关系,这样只确定了线性模型的模型矩阵, 而模型参数向量是隐含的,并没有的模型公式中体 现出来。
• > eda.shape=function(x) { oldpar = par(mfrow = c(2, 2), mar=c(2,2,0.2,0.2), mgp=c(1.2,0.2,0)); hist(x, main="", xlab="", ylab=""); boxplot(x) ; iqd = summary(x)[5] - summary(x)[2]; plot(density(x,width=2*iqd), xlab = "x", ylab = "", type = "l", main="") ; qqnorm(x, main="", xlab="", ylab=""); qqline(x); par(oldpar); invisible()}
residuals(对 返回模型残差(矩阵),若有权重则适当加 象) 权。可简写为resid(对象)。 summary(对 可显示较详细的模型拟合结果。 象)
方差分析
• 方差分析是研究取离散值的因素对一个数值型指 标的影响的经典工具。R进行方差分析的函数是 aov(),格式为aov(公式,data=数据框),用法与 lm()类似,提取信息的各通用函数仍有效。 • 我们以“不同牌子木板磨损比较的数据”为例。 假设veneer数据框保存了该数据: • > veneer<-read.table("veneer.txt",header=T)
Forbes理论认为:沸点和气压对数值呈线性关系,但是去log 以后值较小,因此放大100倍
• 将数据整理成Tab分割的txt文档,加载每列标题("F", "h", "log", "100log"),读入R中 • > forbes <- read.table("forbes.txt", header=T, sep='\t'); • 先考察一下散点图,看看F和100log之间的关系 • > plot(forbes$F, forbes$100log)
生成两张图,一张是因变量对拟合值 的图形,一张是残差绝对值对拟合 值的图形。
predict(对 象, newdata= 数据框) prediቤተ መጻሕፍቲ ባይዱt.gam (对象, newdata= 数据框) print(对象)
有了模型拟合结果后对新数据进行预报。指 定的新数据必须与建模时用的数据具有相同 的变量结构。函数结构为对数据框中每一观 测的因变量预报结果(为向量或矩阵)。 predict.gam()与predict()作用相同但适用性更 广,可应用于lm、glm和gam的拟合结果。比 如,当多项式基函数用了正交多项式时,加 入了新数据导致正交多项式基函数改变,用 predict.gam() 函数可以避免由此引起的偏差 简单显示模型拟合结果。一般不用print()而 直接键入对象名来显示。
• 首先我们把每个牌子的木板的磨损情况画盒形图 并且放在同一页面中,作图如下: • > plot(Wear ~ Brand, data=veneer)
Wear 2.0 2.2
2.4
2.6
ACME
AJAX
CHAMP Brand
TUFFY
XTRA
• 这种图可以直观地比较一个变量在多个组的分布,或者 比较几个类似的变量。从图中可以看出,AJAX牌子较 好,TUFFY较差,其它三个牌子差别不明显。 • 为了检验牌子这个因素对指标磨损量有无显著影响,只 要用aov()函数: • > aov.veneer = aov(Wear ~ Brand, data=veneer) • > summary(aov.veneer) Df Sum Sq Mean Sq F value Pr(>F) Brand 4 0.61700 0.15425 7.404 0.001683 ** Residuals 15 0.31250 0.02083 ---
2 j 0 p
• 写成矩阵形式为
Y X
• 在R中模型是一种对象,其表达形式叫做一个公 式,我们先举几个例子来看一看。 • 假定下表中 y,x,x0,x1,x2,…是数值型变量, X是矩阵,A,B,C,…是因子。
y~x y~1+x
y ~ -1 + x y~x-1
两个式子都表示y对x的简单一元线型回 归。第一个式子带有隐含的截距项,而 第二个式子把截距项显式地写了出来(并不代 表截距是1)。 都表示y对x的通过原点的回归,即不带截距项 的回归(-1只是表示不带截距项)。
线性回归模型
• 拟合普通的线性模型的函数为lm(),其简单的用 法为:> fitted.model <- lm( formula, data= data.frame) • 其中formula为模型公式; data.frame为各变量所在 的数据框。 • > mod1 =lm(y ~ x1 + x2, data=production) • 可以拟合一个y对x1和x2的二元回归(带有隐含 的截距项),数据来自数据框production 。拟合 的结果存入了对象mod1中。lm()的基本显示十分 简练:
表示log(y)对x1和x2的二元回归,带有 隐含的截距项。 y ~ poly(x, 2) 表示y对x的一元二次多项式回归。第一 y ~ 1 + x + I(x^2) 种形式使用正交多项式,第二种形式 直接使用x的各幂次。 y ~ X + poly(x,2) 因变量为y的多元回归,模型矩阵包括 矩阵X,以及x的二次多项式的各项。 y~A 一种方式分组的方差分析,指标为y, 分组因素为A。 log(y) ~ x1 + x2
通用函数 anova(对象1,对 象2) coefficients(对象)
返回值或效果 把一个子模型与原模型比较,生成方 差分析表。
deviance(对象) formula(对象) plot(对象)
返回回归系数(矩阵)。可简写为 coef(对象)。 返回残差平方和,如有权重则加权。 返回模型公式。
• > lm.sol <- lm(log100 ~ F, data=forbes); • > summary(lm.sol)
•
> abline(lm.sol)
• • • •
> lm.res <- residuals(lm.sol); > plot(lm.res); > text(locator(1), "abnormal point", adj=0) ; > identify(lm.res) [1] 12
一种方式分组的协方差分析,指标为y, 分组因素为A,带有协变量x。 非可加两因素方差分析模型,指标为y, A,B是两个因素。前两个公式表示相 同的交叉分类设计,后两个公式表示 相同的嵌套分类设计。
在R中~运算符用来定义模型公式。一般的线性模 型的公式形式为 因变量 ~+- 第一项+- 第二项+- 第三项 … 其中因变量可以是向量或矩阵,或者结果为向量 或矩阵的表达式。 加号+或者减号-,表示在模 型中加入一项或去掉一项,第一项前面如果是加 号可以省略。 公式中的各项可以取为: • 一个值为向量或矩阵的表达式,或1。 • 一个因子 • 一个“公式表达式”,由“公式运算符”把因子、 向量、矩阵连接而成。
R的统计分析
授课目的
学习如何应用R软件解决统计问题
授课内容
1、统计模型、方法简介 2、应用实例 3、实验作业
统计模型的线性表示
• 很多统计模型可以用一个线型模型来表示:
yi j xij i , i 1, , n; 1 , 2 , , niid N (0, )