多元统计分析及R语言建模(第五版)部分课后习题代码演示_多元统计分析及r语言建模第五版课后答案_Mio猛的博客-程序员宅基地

技术标签: r语言  开发语言  

前言:我是lst,这是本学期课程内容,根据上课内容、参考书本、CSDN社区等来源,完成的部分课程习题代码。如有问题,欢迎大家批评指正


library(openxlsx)                                     #加载读取Excel数据包

#【输出设置】
#setwd("C:/Users/lst89/Documents/mvexer5") #设置目录
options(digits=4)
par(mar=c(4,4,2,1))

#第二章p57-2-1
R=matrix(c(1,0.8,0.26,0.67,0.34,0.8,1,0.33,0.59,0.34,0.26,0.33,1,0.37,0.21,0.67,0.59,0.37,1,0.35,0.34,0.34,0.21,0.35,1),nrow = 5,ncol = 5);
R                                                              #输入数据
solve(R)                                                   #求逆矩阵
R.e=eigen(R,symmetric=T)                     #symmetric是判断是否为对称阵,
R.e                                                           #求矩阵的特诊值
R.e $ vectors%*%diag(R.e $ values)%*%t(R.e $ vectors)#特征向量

#第二章p57-2-2
library(openxlsx)                                      #加载读取Excel数据包
E2.2=read.xlsx('mvexer5.xlsx','E2.2');    
E2.2                                                         #读取mvexer5.xlsx表格E2.2数据
breaks = seq(0,3000,by = 300)               #按组距为300编制频数表
breaks
hist(E2.2 $ X,breaks,col = 1:7,xlab = "工资(元)",ylab = "频数")#以工资x为横轴,频数y为纵轴,将数据划分为0-3000并以300为度量,绘制7列的彩色直方图
hist(E2.2 $ X ,breaks,freq = F,col = 1:7,xlab = "工资(元)",ylab = "频率")
Cumsum <- cumsum(E2.2 $ X)
cumsum
M <- seq(0,96000,by = 3000)

hist(Cumsum,M,freq = F,col = 1:12,las = 3,xlab = "工资(元)",ylab = "累积频率")#绘制出累计频率直方图
H = hist(E2.2 $ X,breaks = seq(900,3000,300))#正态概率图
names(H)
data.frame('组中距' = H $ mids,'频数' = H $ counts,'频率' = H $ density*300,'累积频率' = cumsum(H $ density*300))#


#第二章p57-2-3
library(openxlsx)                                             #加载读取Excel数据包
E2.3=read.xlsx('mvexer5.xlsx','E2.3');          
E2.3                                                                #读取mvexer5.xlsx表格E2.2数据
str(E2.3)                                       
summary(E2.3)                                                #对数据进行基本统计分析


#第三章P84-2.1
library(openxlsx)
E3.2 = read.xlsx('mvexer5.xlsx',sheet = 'E3.2',rowNames = TRUE)          
#设定参数rowNames=TRUE,即可将第一列字符变量变成数据框的行名,供后期使用
E3.2
#在Excel文件中mvexer5.xlsx的表单d3.2中选择A1:E22,并复制到剪切板
dat = read.table("clipboard",header = T)               #将剪切板数据读入数据框dat中
dat
#数据框标记转换函数
msa.X <- function(df){                                          #将数据框第一列设置为数据框行名
  X = df[,-1]                                                          #删除数据框df的第一列并赋给X
  rownames(X) = df[,1]                                       #将df的第一列值赋给X的行名
  X                                                                      #返回新的数值数据框=return(X)
}
E3.2 = msa.X(dat)
E3.2
barplot(apply(E3.2,2,mean))                              #按行作均值条形图
barplot(apply(E3.2,1,mean),las = 3)                  #修改横坐标标记
barplot(apply(E3.2,2,mean))                             #按列作均值条图
barplot(apply(E3.2,2,median))                          #按列作中位数条图
barplot(apply(E3.2,2,median),col = 1:8)           #按列取色
boxplot(E3.2)                                                    #按列作箱尾图
boxplot(E3.2,horizontal = T)                             #箱尾图中图形按水平放置


#四p119-2-1
library(openxlsx)                                               #加载读取Excel数据包
E4.1=read.table("clipboard",header = T)
E4.1

plot(x,y,main = '散点图',xlab = '每周加班时间(小时)',ylab = '每周签发的新保单数目(张)')                                                             #绘制散点图

cor(E4.1)                                                          #相关系数
lm4.1 <- lm(E4.1)
lm4.1

#估计值
square_sigma <- t(E4.1)/(10-1-1)#square_sigma <- t(x_hat - y)%*%(x_hat - y)/(10-1-1)
square_sigma                                    

y = c(3.5,1,4,2,1,3,4.5,1.5,3,5)
x = c(825,215,1070,550,480,920,1350,325,670,1215)
y_hat <- 46.15 + 251.17*y
s <- t(y_hat - x)%*%(y_hat - x)/(10-1-1)
s
(summary(lm4.1) $ s)^2

#求方差分析
SR <- t(y_hat - mean(x))%*%(y_hat - mean(x))
ST <- t(x - mean(x))%*%(x - mean(x))
s_R <- SR/ST
s_R                                       
(summary(lm4.1) $ r.squared)
anova(lm4.1)                              

#对回归方程作残差图分析
res <- residuals(lm4.1)
res
plot(y,res,main='残差散点图',xlab='每周签发的新保单数目',ylab='残差')
plot(lm4.1)            

#计算1000张要加班的时间
lm4.1_1 <- lm(x ~ y,data = ee4.1)
predict(lm4.1_1,newdata = data.frame(y = 1000))
lm4.1_1 <- lm(y ~ x,data = ee4.1)
predict(lm4.1_1,newdata = data.frame(x = 1000))     


#四p119-2-2
library(openxlsx)
E4.2 = read.xlsx('mvexer5.xlsx',sheet = 'E4.2',rowNames = T)
(lm4.2 = lm(y ~ x1 + x2,data = E4.2))                 #显示多元线性回归模型


library(openxlsx)                                                 #加载读取Excel数据包
E4.2=read.table("clipboard",header = T)
E4.2
(lm4.2=lm(y~x1+x2,data=E4.2))
coef.sd <- function(lm4.2){                                 #标准回归系数
  b = lm4.2 $ coef
  b
  si = apply(lm4.2 $ model,2,sd)
  si
  bs = b[-1] * si[-1]/si[1]
  bs
}

coef.sd(lm4.2)
                                                  #在5%的显著水平下确定每一解释变量与依赖变量是否呈线性关系
summary(lm4.2)
                                                  #计算简单相关系数和复相关系数
cor(E4.2)


#四119-2-3
#回归模型并解释各系数
E4.3 = read.table("clipboard",header = T)
E4.3
#确定学生的GPA和年龄是否能真正用来解释起始工资样本的变化
(lm4.3 = lm(起始工资~ GPA + 年龄,data = E4.3))
summary(lm4.3)
R4.3 = summary(lm4.3) $ r.sq
R4.3
R_2_4.3 = sqrt(R4.3)
R_2_4.3
#预测某GPA为3.00,年龄为24岁的毕业生的起始工资
predict(lm4.3,newdata = data.frame(GPA = 3,年龄 = 24))

#四120-2-4
#计算y,x1,x2,x3的相关系数矩阵并绘制矩阵散点图

library(openxlsx)
E4.4 = read.xlsx('mvexer5.xlsx',sheet = 'E4.4')
cor4.4 <- cor(E4.4[,-1])      #去除第一列编号数据后剩余的样本计算相关系数矩阵
cor4.4

pairs(E4.4)#绘制散点图

#求y关于x1,x2,x3的多元线性回归方程
lm4.4 <- lm(y ~ x1 + x2 + x3,data = E4.4)      #建立回归方程
summary(lm4.4)
#所求得的方程做拟合优度检验
summary(lm4.4)
(R4.4 = summary(lm4.4)$r.sq)
(R_2_4.4 = sqrt(R4.4))

#对回归方程做显著性检验,对每一个回归系数做显著性检验
summary(lm4.4)
#如果有的回归系数没通过显著性检验,将其剔除,重新建立回归方程,再做回归方程的显著性检验和回归系数的显著性检验
lm4.4_drop3 <- lm(y ~ x1 + x2,data = E4.4)
lm4.4_drop3
summary(lm4.4_drop3)

#对每一个回归系数做显著性检验
summary(lm4.4_drop3)
t1 <- 1.942
t2 <- 2.465
t3 <- 1.178
qt(1-0.05,7)

#使用逐步回归分析的逐步筛选方法获得一个最优的回归模型
lm.step = step(lm4.4,direction = 'forward')           #向前引入法变量选择结果

lm.step = step(lm4.4,direction = 'backward')       #向后剔除法变量选择结果

lm.step = step(lm4.4,direction = 'both')               #逐步筛选法变量选择结果


#五p144-2-1
library(openxlsx)
E5.1 = read.xlsx('mvexer5.xlsx',sheet = 'E5.1')
E5.1
anova(lm(S ~ factor(F),data = E5.1))

#五p145-2-2
library(openxlsx)
E5.2 = read.xlsx('mvexer5.xlsx',sheet = 'E5.2')
E5.2
summary(E5.2)
anova(lm(P ~ factor(A)+factor(B),data=E5.2))

#五p145-2-3
library(openxlsx)
E5.3 <- read.xlsx('mvexer5.xlsx',sheet = 'E5.3')
E5.3
summary(E5.3)
logit.glm = glm(G ~ x1 + x2,data = E5.3)
summary(logit.glm)

logit.step <- step(logit.glm,direction = 'both')    #逐步筛选法变量选择
summary(logit.step)
pre1 <- predict(logit.glm,data.frame(x1 = 131,x2 = -2))
pre1

#第七章p212-2
library(openxlsx)
E7.2=read.xlsx("mvexer5.xlsx",sheet = 'E7.2',rowNames = T)
E7.2
plot(E7.2,gap=0)                                   #绘制散点图
D =dist(E7.2)                                        #计算距离矩阵
D
hc = hclust(D,"single")                          #聚类 最短距离法
hc
names(hc)
data.frame(hc $ merge,hc $ height)
plot(hc)

hc = hclust(D)                                      #聚类 最长距离法
hc
names(hc)
data.frame(hc $ merge,hc $ height)
plot(hc)

plot(hclust(D,"median"))                     #聚类 中间距离法
plot(hclust(D,"average"))
plot(hclust(D,"centroid"))
plot(hclust(D,"ward.D"))
plot(hclust(D,"ward.D2"))
plot(hc)
rect.hclust(hc,k = 4,border = 'pink')    #综上 认为平均距离好。分四类

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lsttttt/article/details/128150702

智能推荐

AttributeError: module ‘gym.envs.box2d‘ has no attribute ‘CarRacing‘ 解决_attributeerror: module 'gym.envs.box2d' has no att_Dear Lee的博客-程序员宅基地

AttributeError: module ‘gym.envs.box2d’ has no attribute ‘CarRacing’在使用OpenAI gym功能时,CarRacing一直安装不好查了很多攻略重新安装gym和bod2d-py都没用但是查看gym内部文件是存在CarRacing的因此,尝试直接运行CarRacing,发现pyglet包没安装导致无法运行安装pygletpip install pyglet随后可以正常运行,也不再出现报错。故 AttributeError:_attributeerror: module 'gym.envs.box2d' has no attribute 'carracing

函数信号发生器-程序员宅基地

函数信号发生器是一种能能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。现在我们通过对函数信号发生器的原理以及构成设计一个能变换出三角波、正弦波、方波的简易发生器。我们通过对电路的分析,参数的确定选择出一种最适合本课题的方案。在达到课题要求的前提下保证最经济、最方便、最优化的设计策略..._信号发生器

java项目之高校毕业生就业满意度调查统计系统(ssm+mysql+jsp)-程序员宅基地

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的高校毕业生就业满意度调查统计系统。技术交流和部署相关看文章末尾!

myeclipse项目红叉问题解决经验_myeclipse项目有红叉-程序员宅基地

用myeclipse 8.5 开发时遇到如下问题:_myeclipse项目有红叉

Python学习10:集合的用法与初识Python函数_<class 'set'>-程序员宅基地

笔者:风起怨江南出处:https://blog.csdn.net/JackMengJin笔者原创,文章欢迎转载,如果喜欢请点赞+关注,感谢支持!目录一、集合1.1 集合的定义1.2 有序无序的区别1.3 集合的使用场景二、初识函数2.1 什么是函数?2.2 函数的使用2.3 函数的调用2.4 return和print区别集合的用法和..._

BeanUtils.copyProperties_技术性健忘的博客-程序员宅基地

/** * 对象属性拷贝 <br> * 将源对象的属性拷贝到目标对象 * * @param source 源对象 * @param target 目标对象 */ public static void copyProperties(Object source, Object target) { try { BeanUtils.copyProperties(source, target);

随便推点

apache之虚拟服务器的配置-程序员宅基地

配置apache本地服务器(localhost访问)步骤:1、打开apache安装目录下的conf文件夹的httpd.conf文件,修改Listen 80为未被占用的端口号。2、更改映射根目录,找到如下代码修改引号内容为自己指定的目录即可。DocumentRoot "e:/webs"配置apache本地虚拟服务器(域名访问,需配置虚拟服务器文件)步骤:1、打开apa

[推荐]ORACLE SQL:经典查询练手(不懂装懂,永世饭桶!)-程序员宅基地

[推荐]ORACLE SQL: 经典查询练手(不懂装懂,永世饭桶!) ——通过知识共享树立个人品牌。 本文与大家共同讨论与分享ORACLE SQL的一些常用经典查询,欢迎大家补充,同时你认为有那些经典的也可分享出来。在本文中,对每一个问题,你要是认为有什么更好的解决方法也欢迎你及时提出。交流与分享才能共同进步嘛,感谢! 本文使用...

C++文件操作:fopen / fread / fwrite函数介绍及参数说明_fwrite ab+-程序员宅基地

fopen( )打开文件包含头文件: #include<stdio.h>格式:FILE * fopen(const char * path,const char * mode) 参数: path:需要打开的文件路径 mode:文件打开方式mode functionr 以只读方式打开文件,该文件必须存在。r+ 以可读写方式打开文件,该文件必须存在。rb+ 读..._fwrite ab+

Spring SpEL表达式_spring spel表达式规则-程序员宅基地

定义Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。从Spring3引入了Spring表达式语言(Spring Expression Language,SpEL)。SpEL是一种强大的、简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中。语法类似于 EL:SpEL 使用 #{...} 作为定界符 , 所有在大括..._spring spel表达式规则

数组存储大数阶乘_大数储存算阶乘-程序员宅基地

题目描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入文件第一行有一个整数n(1≤n≤50),以下n行每行有个整数k(k>0且k<500)。 输出 输出文件有n行,各包含一个结果。 样例输入 2 5 50 样例输出 120 304140932017133780436126081660647688443776415689605_大数储存算阶乘

JavaScript对象扩展(Object.is(), assign(), 对象遍历keys, es6原型介绍)-程序员宅基地

对象创建新方法ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 上面代码表明,ES6允许在对象之中,只写属性名,不写属性值。这时,属性值等于属性名所代表的变量。//例1: var foo = 'bar'; var baz1 = {foo}; console.log(baz1);// Object {foo: "bar"}; var baz2