R语言期末试题-重庆工商大学-统计学课程

总结和更正

#-------------------第一套--------------------------#
###第一题######
## 编写函数计算h(x,n)=1+x+x^2
#####第一题############
fun1 = function(x,n){
  s = 0 # 定义一个变量接受求和
  for (i in 0:n) {
    s = s + x^i
  }
  message('前n项目和为:',s) # 打印结果
}
fun1(2,4) # 调用函数

######第二题###############
## 编写函数计算15,21,39,45,17的乘积,分别用for循环和while循环
######第二题###############
data1 = c(15,21,39,45,17)  #定义数据
## for 循环
fun2 = function(data1){
  m = 1 # 这里设为1来装连乘
  for (i in 1:length(data1)) {
    m =  m*data1[i]
  }
  message('最后乘积为:',m) # 打印结果
}
fun2(data1)

###########分割线###############################

## while 仅此条件不同而已
fun3 = function(data1){
  m = 1
  i = 1 # 这里需要先定义i
  while (i<=length(data1)) {
    m = m * data1[i]
    i =i + 1 # 需要更新变量
  }
  message('最后乘积为:',m)
}

#######第三题#########
#用循环函数求出1-20之间能被4整除的数的和,并输出结果。
n = 20 # 20结尾的数
s = 0
a = c()# 定义空列装符合条件的值
for (i in 1:n){
  if(i %% 4 == 0){
    a = c(a,i)
}
}
print(sum(a))
########第四题#########
# x向量的值为100个5以内(包括5)的随机整数,
# 产生一个长度与x相等的y向量,对于x中值为3的元素,
# y的对应元素赋值为0,其余赋值为1。计算y中有多少1。
set.seed(0)
x = round(runif(100,0,5.1)) # 产生100个0-5的整数
y = c(1:length(x)) # 产生空向量
x
y[which(x!=3)]=1
y
y[which(x==3)]=0
y

############第五题############
## (1)读入文件5.txt中的数据,建立y关于x1 x2 x3 x4的线性回归方程。
# 读取数据
data5 = read.csv('./5.txt',sep = '\t',header = TRUE)
# 建立模型
ress = lm(y~x1+x2+x3+x4,data = data5)
summary(ress)
## (2)采用逐步回归法建立y关于x1 x2 x3 x4的线性回归方程,并对方程和回归系数进行显著性检验。
data5.lm1 = step(ress,direction = 'both')
data5.lm1 
data5.lm2 = step(ress,direction = 'backward')
data5.lm2
data5.lm3 = step(ress,direction = 'forward')
data5.lm3

#############第六题############
# 使用while循环求1+2+3+…+100的和
# for循环
s = 0
for (i in 1:100) {
  s = s + i
}
print(s)
# while循环
i = 1
s = 0
while(i<=100){
  s = s + i
  i = i + 1
}
print(s)


#############第七题############
fun7 = function(score){
  if(score>=90){
    print('等级A')
  } else if(score>=80){
    print('等级B')
  } else if(score>=70){
    print('等级C')
  } else if(score>=60){
    print('等级D')
  } else{
    print('等级E')
  }
}
fun7(23)

######第八题######
fun8 <- function(x,u,sigma) {
  y = 1/(sqrt(2*pi)*sigma)*exp(-(x-u)^2/(2*sigma^2))
  return(y)
}

fun8(1,0,1)
# 校验
dnorm(1,0,1)

#####第九题######
# 用内置函数计算得到
fun99 = function(x){
  sin(x)
}
# 计算2-3的积分
integrate(fun99,2,3)


# 先定义一个函数用于判断随机抽取的点在积分区域内或者外
fun9 = function(a){# a是一个矩阵
  a[2]-sin(a[1]) # y-y_count 第一个y是随机产生的y,y_count是x计算得到的
}
n = 100000 # 抽取10万次
x = runif(n,2,3)
y = runif(n,0,sin(2))
A = cbind(x,y)
b = apply(A, 1,fun9)
mean(b<=0)*(3-2)*(sin(2)-0)# 通过比例计算积分区域面积

# 第九题补充 计算误差
i = 1
list_a = c()
while (i<=1000) {
  fun9 = function(a){# a是一个矩阵
    a[2]-sin(a[1]) # y-y_count 第一个y是随机产生的y,y_count是x计算得到的
  }
  n = 1000 # 抽取10万次
  x = runif(n,2,3)
  y = runif(n,0,sin(2))
  A = cbind(x,y)
  b = apply(A, 1,fun9)
  squre = mean(b<=0)*(3-2)*(sin(2)-0)# 通过比例计算积分区域面积
  error_9 = 0.5738426-squre
  list_a = c(list_a,error_9)
  i = i + 1
  # print(mean(list_a))
}
aa = c(1:1000)
plot(aa,list_a)

# 法2
n = 100000
x = runif(n,2,3)
mean(sin(x))*(3-2)


#######第十题######
data=c(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512)
fun6 = function(data,alph,u){
  x_bar = mean(data)
  t_value = (x_bar-u)/(sd(data)/sqrt(length(data)))
  print(t_value)
  if(abs(t_value)>= qt(1-alph/2,length(data)-1)){
    print('拒绝原假设')
  }else{
    print('接受原假设')
  }
  # dnorm为概率密度函数,返回给定x下的概率值。dnorm(z)等价于f(x=z)
  # pnorm为概率分布函数。pnorm(z)等价于P[x<=z]
  # qnorm为pnorm的逆运算,返回给定P下的z。
  # rnorm生成符合正太分布的随机数。
}

fun6(data,alph = 0.05,u = 0.5)

1、编写函数计算 h ( x , n ) = 1 + x + x ∧ 2 + ⋯ ⋯ + x ∧ n h(x, n)=1+x+x^{\wedge} 2+\cdots \cdots+x^{\wedge} n h(x,n)=1+x+x2++xn

#####第一题############
fun1 = function(x,n){
  s = 0 
  for (i in 0:n) {
    s = s + x^i
  }
  message('前n项目和为:',s)
}
fun1(2,4) # 调用函数

2、编写函数计算15,21,39,45,17的乘积,分别用for循环和while循环

######第二题###############
data1 = c(15,21,39,45,17)
## for 循环
fun2 = function(data1){
  m = 1 # 这里设为1来装连乘
  for (i in 1:length(data1)) {
   m =  m*data1[i]
  }
  message('最后乘积为:',m)
}
fun2(data1)

###########分割线###############################

## while 仅此条件不同而已
fun3 = function(data1){
  m = 1
  i = 1
  while (i<=length(data1)) {
    m = m * data1[i]
    i =i + 1 # 需要更新变量
  }
  message('最后乘积为:',m)
}

3、用循环函数求出1-20之间能被4整除的数的和,并输出结果。

n = 20
s = 0
a = c() # 用来装能被4整除的数
for (i in 1:n) {
  if(i %% 4 == 0)
    a = c(a,i)
}
print(sum(a))

4、x向量的值为100个5以内(包括5)的随机整数,产生一个长度与x相等的y向量,对于x中值为3的元素,y的对应元素赋值为0,其余赋值为1。计算y中有多少1。


###########第四题###########
# 考察which函数使用
# 第一步产生x向量的值为100个5以内(包括5)的随机整数
x = round(runif(100,0,5.1))
y = c() # 产生空向量
x[which(x!=3)]=1 # x其余赋值为1
x[which(x==3)]=0# x中值为3的元素,y的对应元素赋值为0
x
# 注意这里的顺序一定不能乱 
message("有",sum(x)) 

5、

(1)读入文件5.txt中的数据,建立y关于x1 x2 x3 x4的线性回归方程。

(2)采用逐步回归法建立y关于x1 x2 x3 x4的线性回归方程,并对方程和回归系数进行显著性检验。

############第五题############
## (1)读入文件5.txt中的数据,建立y关于x1 x2 x3 x4的线性回归方程。
# 读取数据
data5 = read.csv('./5.txt',sep = '\t',header = TRUE)
# 建立模型
ress = lm(y~x1+x2+x3+x4,data = data5)
summary(ress)
## (2)采用逐步回归法建立y关于x1 x2 x3 x4的线性回归方程,并对方程和回归系数进行显著性检验。
data5.lm1 = step(ress,direction = 'both')
data5.lm1 
data5.lm2 = step(ress,direction = 'backward')
data5.lm2
data5.lm3 = step(ress,direction = 'forward')
data5.lm3

6、使用while循环求1+2+3+…+100的和。

i = 1
s = 0
while (i<=100) {
  s = i + s 
  i = i+1 # 更新变量
}
print(s)

7、编写函数,对任一个百分制的成绩M,将其转换成对应的等级,具体转换规则如下:

90-100为A; 80-89为B; 70-79为C; 60-69为D; 0-59为E;

#########第七题###############
#########第七题###############
# print('请输入一个0-100的数,enter两次结束')
# A = scan() # enter两次结束
fun4 = function(A){
  if(90<=A) {
    print("等级A")
  } else if (80<=A) {
    print("等级B")
  }else if (70<=A) {
    print("等级C")
  }else if (60<=A) {
    print("等级D")
  }else {
    print("等级E")
  }
  
}
fun4(60)


8、编写函数出任意给定x的值,计算正态分布密度函数N()的值。

f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 ( − ∞ < x < + ∞ ) f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{-\frac{(x-\mu)^{2}}{2 \sigma^{2}}} \quad(-\infty<x<+\infty) f(x)=2π σ1e2σ2(xμ)2(<x<+)

##########第八题##################
fun5 = function(x,u,sigma){
  y = 1/(sqrt(2*pi)*sigma)*(exp(-(x-u)^2/(2*sigma^2)))
  return(y)
}
fun5(1,0,1)
# 校验
dnorm(1,0,1)

9、用蒙特卡洛法计算 的值。

∫ 2 3 sin ⁡ x d x \int_{2}^{3} \sin x d x 23sinxdx
在这里插入图片描述
在这里插入图片描述

###########第九题################
# 基于蒙特卡洛求定积分的两种方法
# 法1
decisionCondition = function(a){
  a[2]-sin(a[1])
}
# 用于判断在面积内的函数

n = 100000
x = runif(n,2,3)
y = runif(n,0,sin(2)) # 看图像改数据
A = cbind(x,y)
A
b = apply(A, 1, decisionCondition)
# length(which(b<0))
mean(b<=0)*1*sin(2) # 注意这里,将算出来的面积乘上总面积得到积分区域面积

# 法2
n=10000
x = runif(n,2,3)
mean(sin(x))*1 # 乘以(b-a)

10、给定一组数,检验其均值等于某一常数(t检验)

μ0 = 0.5
H 0 : μ = μ 0  vs  H 1 : μ ≠ μ 0 H_{0}: \mu=\mu_{0} \text { vs } H_{1}: \mu \neq \mu_{0} H0:μ=μ0 vs H1:μ=μ0
检验统计量为:
t = x ˉ − μ 0 s / n t=\frac{\bar{x}-\mu_{0}}{s / \sqrt{n}} t=s/n xˉμ0
拒绝域为 ∣ t ∣ > t c ( n − 1 ) |t|>t_{c}(n-1) t>tc(n1)
X = c ( 0.497 , 0.506 , 0.524 , 0.518 , 0.498 , 0.511 , 0.520 , 0.515 , 0.512 ) \mathrm{X}=\mathrm{c}(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512) X=c(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512)
μ 0 = 0.5 \mu_{0}=0.5 μ0=0.5

##########第十题########
data=c(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512)
fun6 = function(data,alph,u){
  x_bar = mean(data)
  t_value = (x_bar-u)/(sd(data)/sqrt(length(data)))
  if(abs(t_value)>= qt(1-alph/2,length(data)-1)){
    print('拒绝原假设')
  }else{
    print('接受原假设')
  }
  # dnorm为概率密度函数,返回给定x下的概率值。dnorm(z)等价于f(x=z)
  # pnorm为概率分布函数。pnorm(z)等价于P[x<=z]
  # qnorm为pnorm的逆运算,返回给定P下的z。
  # rnorm生成符合正太分布的随机数。
}
  
fun6(data,0.975,0.5)
  • 6
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wency(王斯-CUEB)

我不是要饭的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值