R语言期末试题【二期补充】-重庆工商大学-统计学课程
1、编写函数计算 1 1 + 2 2 + ⋯ + n n 1^{1}+2^{2}+\cdots+n^{n} 11+22+⋯+nn
#####第一题############
fun1 = function(n){
s = 0
for (i in 0:n) {
s = s + i^i
}
message('前n项目和为:',s)
}
fun1(2,4) # 调用函数
2、编写函数计算1到50的和,分别用for循环和while循环
######第二题###############
## for 循环
fun2 = function(n){
s = 0 # 这里设为1来装连乘
for (i in 1:n) {
s = s+i
}
message('最后和为:',s)
}
fun2(50)
###########分割线###############################
## while 仅此条件不同而已
fun3 = function(n){
s = 0
i = 1
while (i<=n) {
s = s + i
i =i + 1 # 需要更新变量
}
message('最后和为:',s)
}
fun3(50)
3、用循环函数求出1-100之间能被3和5整除的数的和,并输出结果。
######第三题###########
k = 100
a = c()
for (i in 1:k) {
if(i%%3==0 & i%%5==0){
a = c(a,i)
}
}
message('能被3和5整除的数:')
print(a)
message('和为:',sum(a))
4、(1)读入文件4.txt中的数据,建立y关于x1 x2 x3 x4的线性回归方程。(2)采用逐步回归法建立y关于x1 x2 x3 x4的线性回归方程,并对方程和回归系数进行显著性检验。
此题不想做,参照前一篇博文
5、编写函数,计算给定任意两个维度相同的一维数组,计算它们之间的欧氏距离。
#########第五题##############
# 先产生两个相同维度的向量
a = c(20,1,56,12,5)
b = c(12,23,45,1,4)
fun5 = function(a,b){
# 先判断向量长度是否一致
if(length(a)!=length(B)){
print('向量长度不一致,请重新输入!')
}else{
dist_sum = 0
for (i in 1:length(a)) {
dist_sum = dist_sum + (a[i]-b[i])^2
}
dist_sum_ = sqrt(dist_sum)
}
print(dist_sum_)
}
fun5(a,b)
6、编写函数,对任一个空气污染指数AQI,将其转换成对应的等级,具体转换规则如下:
0-50为优; 51-100为良; 101-150为轻度污染; 151-200为中度污染; 201-300为重度污染;300以上为重度污染++。
fun4 = function(A){
if(A<=50){
print("优")
} else if (A<=100) {
print("中度污染")
}else if (A<=150) {
print("轻度污染")
}else if (A<=200) {
print("中度污染")
}else if (A<=250) {
print("重度污染")
}else {
print("重度污染++")
}
}
fun4(60)
7、设x服从泊松分布,编写函数,任意给定x=k和参数λ的值,计算x=k的概率。
P ( X = k ) = λ k k ! e − λ , k = 0 , 1 , ⋯ P(X=k)=\frac{\lambda^{k}}{k !} e^{-\lambda}, k=0,1, \cdots P(X=k)=k!λke−λ,k=0,1,⋯
fun5 = function(x,lambda){
y = lambda^x/factorial(x)*exp(-lambda)
return(y)
# 返回概率值
}
fun5(1,1)
# 校验
dpois(1,1) # 验证自编函数是否算对了概率
8、用蒙特卡洛法计算的值。
∫ 3 8 x ln x d x \int_{3}^{8} x \ln x d x ∫38xlnxdx
###########第八题################
# 基于蒙特卡洛求定积分的两种方法
# 47.84837403474825
# 法1
decisionCondition = function(a){
a[2]-a[1]*log(a[1])
}
# 用于判断在面积内的函数
n = 100000
x = runif(n,3,8)
y = runif(n,0,8*log(8))
A = cbind(x,y)
A
b = apply(A, 1, decisionCondition)
# length(which(b<0))
mean(b<=0)*5*(8*log(8))# 注意这里,将算出来的面积乘上总面积得到积分区域面积
# 法2
n=10000
x = runif(n,3,8)
mean(x*log(x))*5 # 乘以(b-a)
9、给定两组数,检验其均值等于某一常数(t检验)
H
0
:
μ
1
=
μ
2
v
s
H
1
:
μ
1
≠
μ
2
\boldsymbol{H}_{0}: \mu_{1}=\mu_{2} \quad \boldsymbol{v} \boldsymbol{s} \quad \boldsymbol{H}_{1}: \mu_{1} \neq \mu_{2}
H0:μ1=μ2vsH1:μ1=μ2
检验统计量为:
t
=
x
ˉ
1
−
x
ˉ
2
s
pooled
1
n
1
+
1
n
2
,
其中
s
pooled
=
(
n
1
−
1
)
s
1
2
+
(
n
2
−
1
)
s
2
2
n
1
+
n
2
−
2
t=\frac{\bar{x}_{1}-\bar{x}_{2}}{s_{\text {pooled}} \sqrt{\frac{1}{n_{1}}+\frac{1}{n_{2}}}}, \text { 其中 } s_{\text {pooled}}=\sqrt{\frac{\left(n_{1}-1\right) s_{1}^{2}+\left(n_{2}-1\right) s_{2}^{2}}{n_{1}+n_{2}-2}}
t=spooledn11+n21xˉ1−xˉ2, 其中 spooled=n1+n2−2(n1−1)s12+(n2−1)s22
拒绝域为
∣
t
∣
>
t
α
(
n
1
+
n
2
−
2
)
|\boldsymbol{t}|>\boldsymbol{t}_{\alpha}\left(n_{1}+n_{2}-2\right)
∣t∣>tα(n1+n2−2) 。
x
1
=
c
(
5.5
,
6.3
,
5.1
,
7.8
,
10.2
,
6.8
,
5.3
)
x
2
=
c
(
5.9
,
4.0
,
7.3
,
9.5
,
6.1
,
5.7
,
9.0
,
8.1
,
4.3
)
\begin{array}{l} x_{1}=\mathrm{c}(5.5,6.3,5.1,7.8,10.2,6.8,5.3) \\ x_{2}=\mathrm{c}(5.9,4.0,7.3,9.5,6.1,5.7,9.0,8.1,4.3) \end{array}
x1=c(5.5,6.3,5.1,7.8,10.2,6.8,5.3)x2=c(5.9,4.0,7.3,9.5,6.1,5.7,9.0,8.1,4.3)
# 检验函数编写
# 法1 自写函数t.test检验函数
# 这里传入数据的列名为a,b
t_test_fun = function(A,B,alph=0.05){
# 列数据作为计算对象
a = A
b = B
# 1.计算基本量
# 1.1向量a,b长度
n1 = length(a)
n2 = length(b)
# 1.2计算a,b均值
a_bar = mean(a)
b_bar = mean(b)
message('a组均值:',a_bar,'\n')
message('b组均值:',b_bar,'\n')
# 计算a,b方差
var1 = var(a)
var2 = var(b)
message('a组方差:',var1,'\n')
message('b组方差:',var2,'\n')
# 求合并方差(方差齐性)
concat_vars = (var1*(n1-1)+var2*(n2-1))/(n1+n2-2)
message('联合方差为:',concat_vars,'\n')
# 计算t统计量
t_statistic = (a_bar-b_bar)/sqrt(concat_vars*(1/n1+1/n2))
message('t统计量为:',t_statistic,'\n')
# 计算自由度
v = (n1+n2-2)
message('自由度为:',v,'\n')
#t分布临界值
t_value = qt(alph,v)
if (abs(t_statistic) > abs(t_value)){
print('拒绝原假设,两组数据之间存在显著性差异')
}else{
print('接受原假设,两组数据之间不存在显著性差异')
}
}
# 产生随机数
A = c(5.5,6.3,5.1,7.8,10.2,6.8,5.3)
B = c(5.9,4.0,7.3,9.5,6.1,5.7,9.0,8.1,4.3)
# data1 = data.frame(a = A,b = B)
t_test_fun(A,B,alph = 0.05)
# 法2 验证
t.test(A,B,alternative = 'two.sided',
conf.level = 0.95)