y,X1,X2,X3 分别表示第 t 年各项税收收入(亿元),某国生产总值GDP(亿元),财政支出(亿元)和商品零售价格指数(%).

(1) 建立线性模型

① 自己编写函数:

> library(openxlsx)
> data = read.xlsx("22_data.xlsx",sheet = 1)
> x = data[,-c(1,2)]
> x = cbind(rep(1,17),x)
> x_mat = as.matrix(x)
> y =matrix(data[,2],ncol = 1)
> res = solve(t(x_mat)%*%x_mat)%*%t(x_mat)%*%y
> res
[,1]
rep(1, 17) 19412.8597818
X1 0.2679605
X2 -0.2874013
X3 -297.3653736

所以各参数的估计值分别为

② lm函数

> lm(y~x_mat)

Call:
lm(formula = y ~ x_mat) Coefficients:
(Intercept) x_matrep(1, 17) x_matX1
19412.859781545 NA 0.267960511
x_matX2 x_matX3
-0.287401287 -297.365373557

于是各参数的估计值分别为

这两个方法的结果是一样的。

(2)要求实验报告中画出矩阵散点图,给出参数的点估计、区间估计、t检验值、判定系数和模型F检验的方差分析表

绘制矩阵散点图。

library(graphics)
pairs(data[,-1]pch = 21,bg = c('red','green3','blue'))
# pch参数是控制点的形状,bg是控制点的颜色

下面代码给出参数的点估计,t检验值,判定系数

> summary(lm(y~x_mat+1))

Call:
lm(formula = y ~ x_mat + 1) #调用 Residuals: #残差统计量,残差第一四分位数(1Q)和第三分位数(3Q)有大约相同的幅度,意味着有较对称的钟形分布
Min 1Q Median 3Q Max
-4397.9 -1102.4 153.8 1184.4 2934.6 Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.941e+04 3.524e+04 0.551 0.591
x_matrep(1, 17) NA NA NA NA
x_matX1 2.680e-01 4.466e-02 6.000 4.45e-05 ***
x_matX2 -2.874e-01 1.668e-01 -1.723 0.109
x_matX3 -2.974e+02 3.688e+02 -0.806 0.435
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#标记为Estimate的列包含由最小二乘法计算出来的估计回归系数。
#标记为Std.Error的列是估计的回归系数的标准误差。
#从理论上说,如果一个变量的系数是0,那么该变量将毫无贡献。然而,这里显示的系数只是估计,它们不会正好为0.
#因此,我们不禁会问:从统计的角度而言,真正的系数为0的可能性有多大?这是t统计量和P值的目的,在汇总中被标记为t value和Pr(>|t|)
#P值估计系数不显著的可能性,有较大P值的变量是可以从模型中移除的候选变量 Residual standard error: 2013 on 13 degrees of freedom
Multiple R-squared: 0.9982, Adjusted R-squared: 0.9977
F-statistic: 2348 on 3 and 13 DF, p-value: < 2.2e-16 #Residual standard error 表示残差的标准差,F-statistic 表示F的统计量

  区间估计?方差分析表?

#参数的区间估计
fm = lm(y~x_mat)
confint(fm,level = 0.95)
anova(fm) #方差分析

(3)保留模型中线性关系显著的预测变量确定最后的模型,并利用R软件中的"predict"语句预测2017年的税收收入

根据回归分析结果,只有变量X1具有显著性。所以模型中仅保留变量X1。

构造模型:

x_mat = cbind(rep(1,17),data[,3])
y = data[,2]
res = lm(y~x_mat)
res
> res Call:
lm(formula = y ~ x_mat) Coefficients:
(Intercept) x_mat1 x_mat2
-6213.0189 NA 0.1915

该模型为:Y = -6213.0189 + 0.1915 X1

接下来预测2017年的税收收入,先根据数据data对 t 和 y 之间的关系进行回归分析

t = data[,1]
y = data[,2]
res = lm(y~t)
res > res Call:
lm(formula = y ~ t) Coefficients:
(Intercept) t
-16428607 8213

所以 t 与 y 的关系为:y  = -16428607 + 8213 t

预测 2017 年的税收收入:

> newdata = data.frame(t = 2017)
> pre = predict(res,newdata,interval = "prediction",level = 0.95)
> pre
fit lwr upr
1 136337.8 116018.1 156657.4

  

(4)方差齐性检验,正态性检验,误差相关性的DW检验

rm(list = ls())
library(openxlsx)
data = read.xlsx("22_data.xlsx",sheet = 3)
data
attach(data) #执行此命令之后,直接用列名引用数据
fm = lm(y~X1+X2+X3)
summary(fm)

  

#残差图:方差齐性检验
ei = resid(fm) #残差
X = cbind(1,as.matrix(data[,3:5])) #创建设计阵,注意as.matrix的对象
t = ti(ei,X) #外部学生化残差
r = ri(ei,X) #学生化残差
plot(fitted(fm),t,xlab = "y估计值",ylab = "学生化残差",ylim = c(-4,4))
abline(h = 0)

  

1)上图表示,围绕x轴上下波动,不是均匀分布,方差不齐,但是这个残差图代表什么呢?
2)第17个点是异常点

#正态概率图:正态性检验
plot_ZP(t)

  

除了17号点,其他的点基本在一条直线。

plot_ZP(t[1:16])

  

#误差相关性的DW检验
library(lmtest)
dw = dwtest(fm) #DW检验函数

> dw

Durbin-Watson test

data: fm
DW = 0.90086, p-value = 0.0006763
alternative hypothesis: true autocorrelation is greater than 0

p值远小于0.05,拒绝原假设ρ=0,所以误差是自相关的

plot(ei) #绘制时间序列中的残差图
abline(h = 0)

  

图像表明:误差是正自相关的。
正自相关:如果前一个残差大于0,那么后一个残差大于0的概率较大
负自相关:富国前一个残差大于0,那么后一个残差小于0的概率较大

(4)强影响点分析,异常点分析

#强影响点分析
#方法:手指律、刀切法、cook距离、deffits
#influence.measures(fm)
influence.measures(fm)
# 函数得到的回归诊断共有9列,
# 其中1,2,3,4列是dfbetas值(对应常数与变量x),
# 第5列是dffits的准则值,
# 第6列是covratio的准则值,
# 第7列是cook值,第8列是帽子值(高杠杆值),
# 第9列是影响点的标记,
# inf表明16,17号是强影响点。

  

#cook距离判断强影响点
res = cooks.distance(fm)
> res[res>4/(17-3-1)]
17
1.266196
> #17号是强影响点

  

#异常点
#方法:dfbetas、F统计量、outlierTest()
library(car)
outlierTest(fm)
    rstudent unadjusted p-value Bonferroni p
17 -4.277398 0.0010739 0.018257

Bonferroni p < 0.05 , 结果显示17号点是异常点

  

#使用influencePlot()将异常点绘入图中
influencePlot(fm)

  

#F统计量page88
calcu_F = function(p,r) #p回归参数个数,r学生化残差
{
n = length(r)
ans = (n-p-2)*(r**2)/(n-p-1-r**2)
return(ans)
}
ff = calcu_F(3,r)
#与自由度为1,n-p-2,显著性水平为α的F值比较
df_val = qf(1-0.05,1,12)
ff[ff>df_val] #检验显著性
17
18.29613

  

(6)模型失拟检测

模型失拟检测
1.有重复值用失拟检测的正规检验《线性回归导论》
2.无重复值
1)当模型的预测变量个数多余1时,考虑偏残差法
2)无论预测变量个数,近邻点估计纯误差方法都可以

# 偏残差:
data
beta = coef(fm)
beta1 = beta[2]
beta2 = beta[3]
beta3 = beta[4]
#第一个预测变量:
par(mfrow = c(2,2))
cancha1 = ei + beta1*(data$X1)
plot(data$X1,cancha1)
#第二个预测变量:
cancha2 = ei + beta2*(data$X2)
plot(data$X2,cancha2)
#第三个预测变量:
cancha3 = ei + beta3*(data$X3)
plot(data$X3,cancha3)
#通过图像,第三个预测变量不

R语言 线性回归分析实例 《回归分析与线性统计模型》page72的更多相关文章

  1. R语言各种假设检验实例整理(常用)

    一.正态分布参数检验 例1. 某种原件的寿命X(以小时计)服从正态分布N(μ, σ)其中μ, σ2均未知.现测得16只元件的寿命如下: 159 280 101 212 224 379 179 264  ...

  2. 【R语言进行数据挖掘】回归分析

    1.线性回归 线性回归就是使用下面的预测函数预测未来观测量: 其中,x1,x2,...,xk都是预测变量(影响预测的因素),y是需要预测的目标变量(被预测变量). 线性回归模型的数据来源于澳大利亚的C ...

  3. R语言 逐步回归分析

    逐步回归分析是以AIC信息统计量为准则,通过选择最小的AIC信息统计量,来达到删除或增加变量的目的. R语言中用于逐步回归分析的函数 step()    drop1()     add1() #1.载 ...

  4. R 再也不用愁变量太多跑回归太麻烦!R语言循环常用方法总结

    在高维数据分析过程中,为了筛选出与目标结局相关的变量,通常会用到回归分析,但是因为自变量较多,往往要进行多次回归.这就是统计编程语言发挥作用的时候了 有些大神们认为超过3次的复制粘贴就可以考虑使用循环 ...

  5. $用python玩点有趣的数据分析——一元线性回归分析实例

    Refer:http://python.jobbole.com/81215/ 本文参考了博乐在线的这篇文章,在其基础上加了一些自己的理解.其原文是一篇英文的博客,讲的通俗易懂. 本文通过一个简单的例子 ...

  6. 用R语言 做回归分析

    使用R做回归分析整体上是比较常规的一类数据分析内容,下面我们具体的了解用R语言做回归分析的过程. 首先,我们先构造一个分析的数据集 x<-data.frame(y=c(102,115,124,1 ...

  7. R语言︱线性混合模型理论与案例探究(固定效应&随机效应)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 线性混合模型与普通的线性模型不同的地方是除了有 ...

  8. R语言中的线性判别分析_r语言 线性判别分析

    R语言中的线性判别分析_r语言 线性判别分析 在R语言中,线性判别分析(Liner Discriminant Analysis,简称LDA),依靠软件包MASS中有线性判别函数lqa()来实现.该函数 ...

  9. R语言建立回归分析,并利用VIF查看共线性问题的例子

    R语言建立回归分析,并利用VIF查看共线性问题的例子 使用R对内置longley数据集进行回归分析,如果以GNP.deflator作为因变量y,问这个数据集是否存在多重共线性问题?应该选择哪些变量参与 ...

  10. R语言进行机器学习方法及实例(一)

    版权声明:本文为博主原创文章,转载请注明出处   机器学习的研究领域是发明计算机算法,把数据转变为智能行为.机器学习和数据挖掘的区别可能是机器学习侧重于执行一个已知的任务,而数据发掘是在大数据中寻找有 ...

随机推荐

  1. redhat 7.6 VI编辑操作

    模式一: 浏览模式 0 : 光标到行首 $ : 光标到行尾 gg:光标到首行 G:光标到尾行 yy:复制光标所在行 dd:剪切光标所在行,删除行 y11y:复制光标所在行,往下数,一共10行 p:粘贴 ...

  2. 117、Java中String类之去掉左右空格

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  3. 按钮UIButton的使用

    一.使用概要 当添加一个按钮到你的界面,执行以下步骤: 1.在创建时设置按钮的类型. 2.提供一个标题字符串或图像,为您的内容适当调整按钮的大小. 3.连接一个或多个操作按钮的方法. 4.设置自动布局 ...

  4. 「学习笔记」Treap

    「学习笔记」Treap 前言 什么是 Treap ? 二叉搜索树 (Binary Search Tree/Binary Sort Tree/BST) 基础定义 查找元素 插入元素 删除元素 查找后继 ...

  5. vue导航守卫和axios拦截器的区别

    在Vue项目中,有两种用户登录状态判断并处理的情况,分别为:导航守卫和axios拦截器. 一.什么是导航守卫? vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.(在路由跳转时 ...

  6. luogu P2761 软件补丁问题

    网络流(x) 状压(√) 初始状态为全1,合法状态为(state&b1)&(state|b1) == state && (state&b2)&(stat ...

  7. IDEA代码检验出错

    该软件功能过于强大,会自动检验执行所需要的代码,所以会报错,但实际上我们有写 例如 解决方法 File-->setting 将error改为warning

  8. asp.net获取时间日期插入数据库

    //获取日期+时间 DateTime.Now.ToString(); // 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToString(); // 20 ...

  9. 八: IO流,数据的读写传输

    IO流概括图: IO流的分类:  按流: 输入流(InputStream和Reader):从硬盘或者别的地方读入内存 输出流(OutputStream和Writer):从内存里向硬盘或别的地方输出 按 ...

  10. 【转】深入分析JAVA IO(BIO、NIO、AIO)

    IO的基本常识 1.同步 用户进程触发IO操作并等待或者轮询的去查看IO操作是否完成 2.异步 用户触发IO操作以后,可以干别的事,IO操作完成以后再通知当前线程继续处理 3.阻塞 当一个线程调用 r ...