R语言期末考试复习题第一天整理内容(自己整理+参考博主:紧到长不胖 )请多关注 紧到长不胖 ,每天有惊喜!


R语言期末考试复习题第一天整理内容


#期末考试例题#

#1.写出函数来计算15,21,39,45,17的和:分别用for循环和while循环。
s=c(15,21,39,45,17)
sum(s)
he=0
for(i in 1:length(s))
{
  he=he+s[i]
}
print(he)

s=c(15,21,39,45,17)
sum(s)
he=0
i=1
while(i<=length(s))
{
  he=he+s[i]
  i=i+1
}
print(he)


#2.用循环程序求出1——15之间能被3整除数的和,并输出结果。
he=0
for(i in 1:15)
{
  if(i%%3==0){
    he=he+i
  }
}
print(he)

#3.写出一个函数计算n的阶乘。
jiecheng=function(n){
  chengji=1
  for(i in 1:n){
    chengji=chengji*i
  }
  return(chengji)
}
#4.给出任意两组数,写出函数通用公式计算两组数的相关系数。
#5.给定一个圆半径(r)>=0,计算并输出圆的面积和周长,否则,输出提示信息。


# 第一次作业内容:写出比较两个总体均值差异显著性检验的函数,
# 要求函数输入参数只有两个,一个为数据文件data,另一个是显著性水平,默认值设置为0.05。
# 输出结果包括两个样本均值,两个两个样本方差,合并方差,检验统计量,t分布临界值和结论


f<-function(data,a){
  x<-data[[1]]
  y<-data[[2]]
  n1<-length(x);n2<-length(y)
  meanx<-mean(x);meany<-mean(y)
  varx<-var(x);vary<-var(y)
  var<-((n1-1)*varx+(n2-1)*vary)/(n1+n2-2)
  t0<-(meanx-meany)/sqrt(var*(1/n1+1/n2))
  t<-qt(p=1-a,df=n1+n2-2)
  Z<-ifelse(t0>=t,"结论为拒绝原假设,即两个总体均值有显著差异!","结论为不拒绝原假设!")
  data.frame(meanx,meany,varx,vary,var,t0,t,Z)
}
A<-c(79.98,80.04,80.02,80.04,80.03,80.03,80.04,79.97,80.05,80.03,80.02,80.00,80.02)
B<-c(80.02,79.94,79.98,79.97,79.97,80.03,79.95,79.97)
data<-list(A,B)
f(data,0.05)


#第二次作业:
# 计算(模拟数据)的平均误差 
# 模拟出5000个Y=beta1*x1+beta2*x2;
k = 100 # 定义实验次数
beta_x1 = c() # 定义空列
beta_x2 = c()
for (i in 1:k) {
  beta1 = 0.8 # 设置真实系数
  beta2 = 1.8
  x1 = rnorm(100,5,3) # 产生随机数
  x2 = rnorm(100,100,10)
  error = rnorm(100,0,1) # 产生随机误差
  y = 1.5+0.8*x1+1.8*x2+error
  data1 = data.frame(x1,x2,y) # 构建数据框
  res = lm(y~x1+x2,data = data1)
  res = summary(res)
  beta1_r = (res$coefficients[2]-beta1)^2 # 取估计的系数
  beta2_r = (res$coefficients[3]-beta2)^2
  beta_x1 = c(beta_x1,beta1_r)# 追加成向量
  beta_x2 = c(beta_x2,beta2_r)
  
}
MSEx1 = sum(beta_x1)/length(beta_x1) # 求MES的公式
MSEx2 = sum(beta_x2)/length(beta_x2)
message('x1的MSE为:',MSEx1)
message('x2的MSE为:',MSEx2)








#第三次作业:
# 计算lnx在5到9上的积分:

# 方法一:蒙特卡洛法
# 在长度为4,高度为ln(9)的矩形上进行随机采点,每个点有对应的x,y坐标。
# 当随机点的y值低于其x值取对数(lnx))时,则该点落入目标区域面积,目标区域采点数+1,
# 最后以:(落入目标区域点数)/(总点数) * 矩形面积,则得到近似的目标区域面积。
decisionCondition = function(a){
  a[2]-log(a[1])
}
# 用于判断在面积内的函数

n = 1000
x = runif(n,5,9)
y = runif(n,0,log(9))
A = cbind(x,y)
A
b = apply(A, 1, decisionCondition)
b
mean(b<0)*4*log(9) # 注意这里,将算出来的面积乘上总面积得到积分区域面积




# 方法二:微元法
# 沿x轴上的5-9区间,将目标区域面积分割为多个曲边梯形,计算出单个曲边梯形的面积并进行加总。
# 对于第i个曲边梯形而言,上底和下底之和为y[i]+y[i+1],对应梯形的高即为分割的单个区间长度
# ,为(9-5)/n,此梯形的面积即为((y[i]+y[i+1])*(9-5)/n)/2。依次递推,将全部n-1个梯形面积进行加总。
n=10000
x = runif(n,5,9)
x
mean(log(x))*4 # 乘以(b-a)

#编写函数计算h(x,n)=1+x+x^2+...+x^n
fun1=function(x,n){
  s=0
  for(i in 0:n){
    s=s+x^i
  }
  message("前n项数的和为:",s)
}
fun1(2,4)#调用函数


# x向量的值为100个5以内(包括5)的随机整数,
# 产生一个长度与x相等的y向量,
# 对于x中值为3的元素,y的对应元素赋值为0,其余赋值为1。
# 计算y中有多少1。
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("y中有",sum(x),"个1")

#(1)读入数据C:/Users/Administrator/Desktop/lm程序/eg2.1用到的数据csv格式"
# 建立y关于x1、x2、x3、x4的线性回归方程。

 - [问题标注 ] #此处导入数据文档有误,故采用复制粘贴手法,但得到程序运行结果仍然有问题。
 - (问题已解决:
 - library(openxlsx)
setwd("C:/Users/Administrator/Desktop/lm程序")
data2=read.xlsx("用到的数据1.xlsx", sheet =1,colNames=TRUE)#
data2=lm(y~x1+x2+x3+x4,data=data2)
summary(data2)
 - )

# library(openxlsx)
# setwd("C:/Users/Administrator/Desktop/lm程序")
# data2=read.xlsx("用到的数据1.xlsx", sheet =1,colNames=TRUE)

data2=read.table("clipboard",header=T)
lm.salary=lm(y~x1+x2+x3+x4,data=data2)
summary(lm.salary)

#(2)采用逐步回归法建立y关于x1、x2、x3、x4的线性回归方程,
# 并对方程和回归系数进行显著性检验。
data.lm1=step(lm.salary,direction='forward')
summary(data.lm1)
data.lm2=step(lm.salary,direction='backward')
summary(data.lm2)
data.lm3=step(lm.salary,direction='both')
summary(data.lm3)


#使用while循环求1+2+...+100的和
i=1
s=0
while(i<=100){
  s=s+i
  i=i+1
}
print(s)

#使用for求1+2+...+100的和
data1.1=c(1:100)
fun=function(data1.1){
  s=0
  for(i in 1:length(data1.1)){
    s=s+data1.1[i]
  }
  message("1到100的和为",s)
}
fun(data1.1)


# 编写函数,对任一个百分制的成绩M,将其转换成对应的等级,
# 具体转换规则如下:
# 90-100为A; 80-89为B; 70-79为C; 60-69为D; 0-59为E;
funj=function(chengji){
  if(90<=chengji){
    print("等级为A")
  }
  else if(80<=chengji){
    print("等级为B")
  }
  else if(70<=chengji){
    print("等级为C")
  }
  else if(60<=chengji){
    print("等级为D")
  }
  else{
    print("等级为E")
  }
}
funj(59)




#编写函数出任意给定x的值,
# 计算正态分布密度函数N()的值。
funN=function(x,u,sigma){
  y=(sqrt(2*pi)*sigma)^(-1)*exp(-(x-u)^2/(2*sigma^2))
  return(y)
}
funN(1,0,1)
#校验
dnorm(1,0,1)
#dnorm(x, mean = 0, sd = 1, log = FALSE) 
# 的返回值是正态分布概率密度函数值,



#用蒙特卡洛法计算sin x从2-3上积分的值
#方法1:
decisionCondition=function(a){
  a[2]-sin(a[1])
}
n=10000
x=runif(n,2,3)
y=runif(n,0,sin(2))
A=cbind(x,y)
A
b=apply(A,1,decisionCondition)
mean(b<=0)*1*sin(2)#将算出来的面积乘上总面积得到积分区域面积

#方法2:
n=10000
x=runif(n,2,3)
mean(sin(x))*(3-2)


#用蒙特卡洛法计算x^2从2-3上的积分
#方法1:
decisionCondition=function(a){
  a[2]-(a[1])^2
}
n=10000
x=runif(n,2,3)
y=runif(n,0,9)
A=cbind(x,y)
A
b=apply(A,1,decisionCondition)
mean(b<=0)*1*9

#方法2:
n=10000
x=runif(n,2,3)
mean(x^2)*(3-2)



#给定一组数,检验其均值等于某一常数(t检验)
# μ0 = 0.5,进行双侧检验,
# X=c(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512)
# μ = 0.5 

data=c(0.497,0.506,0.524,0.518,0.498,0.511,0.520,0.515,0.512)
funt=function(data,alpha,u){
  x_bar=mean(data)
  t_value=(x_bar-u)/(sd(data)/sqrt(length(data)))
  if(abs(t_value)>qt(1-alpha/2,length(data)-1)){
    print('拒绝原假设')
  }
  else{
    print('接受原假设')
  }
}
funt(data,0.975,0.5)

# dnorm(x, mean = 0, sd = 1, log = FALSE) 
# 的返回值是正态分布概率密度函数值,
# 比如dnorm(z)则表示:
# 标准正态分布密度函数f(x)在x=z处的函数值。

# pnorm(n, mean = 0, sd = 1,lower.tail = TRUE, log.p = FALSE)为概率分布函数。pnorm(z)等价于P[x<=z]
# qnorm(n, mean = 0, sd = 1,lower.tail = TRUE, log.p = FALSE)为pnorm的逆运算,返回给定P的下分位点z。
# rnorm(n, mean = 0, sd = 1)生成符合正态分布的随机数



  • 12
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Persie...

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值