题目&答案
答案仅供参考
# 投掷一枚不均匀硬币1000次,硬币正面朝上的概率为0.6
# 编写R代码模拟计算出现正面次数小于600次的概率
data = c(0, 1)
cnt = 1; a = 0
while(cnt <= 10000){ # 多次重复试验
# 实验1000次
x = sample(x = data, size = 1000, prob = c(0.4, 0.6), replace = TRUE)
if(sum(x) <= 600)
a = a + 1
cnt = cnt + 1
}
a / 10000
# 坛子中有8个红球,4个白球,我们无放回的取出两个球
# 假定球的质量不同,每个红球的质量为10g,白球的质量为15g
# 假设每次抽到一给定球的概率是除以当时坛子中球的总质量
# 编写R代码模拟计算两次取出的都为红球的概率
cnt = 1
a = 0
while(cnt <= 10000){
total_weight = 8 * 10 + 4 * 15 # 总质量
nr = 8 # 红球数
nw = 4 # 白球数
# first take
f_t = sample(x = c(0,1), prob = c(15 * nw / total_weight, 10 * nr / total_weight), size = 1, replace = TRUE)
if(f_t[1] == 1){ # 抽到红球 对应总质量和球的个数减少
total_weight = total_weight - 10
nr = nr - 1
} else { # 抽到白球 对应总质量和球的个数减少
total_weight = total_weight - 15
nw = nw - 1
}
# second take 这里和上面代码相似度较高,可以一起封装成函数,这里就不展示了
s_t = sample(x = c(0,1), prob = c(15 * nw / total_weight, 10 * nr / total_weight), size = 1, replace = TRUE)
if(s_t[1] == 1){ # 同上
total_weight = total_weight - 10
nr = nr - 1
} else {
total_weight = total_weight - 15
nw = nw - 1
}
# 这里可以判断红球或白球的个数,也可判断质量
# 这里判断质量
if (total_weight == 6 * 10 + 15 * 4) # 两次都取出为红球,说明剩下6红4白,计算当前总质量即可
a = a + 1
cnt = cnt + 1
}
a / 10000 # 计算概率
# 编写R代码随机生成10000个服从均值为0.2的指数分布的随机数
# 并画出这组数据的直方图(含核密度曲线)、箱线图
# 同时计算这组随机数的均值,方差,最大值,最小值
set.seed(time(0)) # 随机数种子,可要可不要
rm = rexp(10000,0.2) # 生成随机数
hist(rm, freq = FALSE) # 绘制直方图
lines(density(rm)) # 绘制核密度曲线
boxplot(rm) # 绘制箱线图(这两个图只能显示一个不知道怎么解决,分布运行分别查看吧
mean(rm) # 均值
var(rm) # 方差
sd(x) # 标准差
max(rm) # 最大值
min(rm) # 最小值
# 后面几题都是套公式,就没有什么注释好写的啦~
# 区间估计:编写R代码计算两个独立分布方差比值的0.95的置信区间
# 可用rnorm函数生成具有不同方差的样本数据
x = rnorm(10, 0, 4) # 10是个数,0是均值,4是方差
y = rnorm(10, 0, 8)
n1 = length(x)
n2 = length(y)
Sx = var(x)
Sy = var(y)
k = Sx/Sy
alpha = 0.95 # 置信区间
right = k / qf(1 - alpha / 2, nx - 1, ny - 1)
left = k / qf(alpha / 2, nx - 1, ny - 1)
data.frame(S_1 = Sx, S_2 = Sy, a = left, b=right)
# 分别编写R代码(不用t.test函数)和用t.test函数完成第八章习题7的假设检验
X = c(6,4,5,5,6,5,5,6,4,6,7,4)
Y = c(2,1,2,2,1,0,3,2,1,0,1,3)
alpha = 0.05
mx = mean(X)
my = mean(Y)
nx = length(X)
ny = length(Y)
Sx = var(X)
Sy = var(Y)
S_w = ((nx - 1) * Sx + (ny - 1) * Sy) / (nx + ny -2)
t = (mx - my -2) / sqrt(S_w) / sqrt(1 / nx + 1 / ny)
t >= qt(alpha, nx + ny -2, lower.tail = FALSE)
# 结果为TRUE 即拒绝原假设
t.test(X, Y, alternative = "greater", mu = 2)
《基于R的概率统计》上机测试题
(2021年6月6日上午8:00到9:50,每题20分)
学号: 姓名:
一、坛子中有10个黑球与6个蓝球,我们无放回地取出两个球,假定每次取球时,坛子中各个球被取中的可能性是一样的,编写R代码模拟计算两个球都为黑球的概率?
(此处黏贴代码)
data = 1:16
cnt = 1
a = 0
while(cnt <= 10000){
x = sample(x = data, size = 2, replace = FALSE)
if(x[1] <= 10 && x[2] <= 10) a = a + 1
cnt = cnt + 1
}
a / 10000
二、设X,Y是(0,1)区间均匀分布的独立随机变量,且已知P(X2+Y2≤1)=π/4 ,编写R代码模拟计算π的值。
(此处黏贴代码)
x = c(0, 1)
plot(x, x, type = 'o')
abline(v = 0)
abline(v = 1)
abline(h = 0)
abline(h = 1)
s = 100
a = 0
cnt <- 1
while (cnt <= 100000) {
xx = runif(1)
yy = runif(1)
if( xx^2 + yy^2 <= 1) {
a = a + 1
points(x = xx, y = yy, pch = 20, cex = 1, col = "red")
}
else
points(x = xx, y = yy, pch = 20, cex = 1, col = "green")
cnt = cnt + 1
}
(a / 100000) * 4
三、编写R代码随机生成10000个服从均值为20的Poission分布的随机数,并画出这组数据的直方图(含核密度曲线)、箱线图,同时计算这组随机数的均值,方差、最大值、最小值。
(此处黏贴代码)
set.seed(time(0)) # 随机数种子
rm = rpois(10000,20)
hist(rm, freq = FALSE) # 直方图
lines(density(rm)) # 核密度函数
boxplot(rm) # 箱线图
mean(rm) # 均值
var(rm) # 方差
max(rm) # 最大值
min(rm) # 最小值
四、区间估计:假设两组样本分别来自两个独立的方差相同但未知的正态分布,编写R代码计算两个正态分布均值差的0.95的置信区间(可用rnorm函数生成样本数据)。
(此处黏贴代码)
x = rnorm(10,2,4)
y = rnorm(10,2,4)
n1 = length(x)
n2 = length(y)
Sw = (((n1 - 1) * var(x) + (n2 - 1) * var(y)) / (n1 + n2 - 2))^2
(mean(x) - mean(y) + qt(0.025, n1+n2-2, lower.tail = FALSE) * sqrt(Sw) * sqrt(1/n1 + 1/n2))
(mean(x) - mean(y) - qt(0.025, n1+n2-2, lower.tail = FALSE) * sqrt(Sw) * sqrt(1/n1 + 1/n2))
五、分别编写R代码(不用t.test函数)和用t.test函数完成第八章习题9的假设检验。
(此处黏贴代码)
X = c(6.6,7.0,8.3,8.2,5.2,9.3,7.9,8.5,7.8,7.5,6.1,8.9,6.1,9.4,9.1)
Y = c(7.4,5.4,8.8,8.0,6.8,9.1,6.3,7.5,7.0,6.5,4.4,7.7,4.2,9.4,9.1)
n = length(X)
d = rep(0,n)
for(i in 1:n)
d[i] = X[i] - Y[i]
m = mean(d)
s_d = sd(d)
t = m / s_d * sqrt(n)
t > qt(0.05, n-1, lower.tail = FALSE)
《基于R的概率统计》上机测试题
(2021年6月6日上午10:00到11:50,每题20分)
学号: 姓名:
一、投掷一枚不均匀硬币1000次,硬币正面朝上的概率为0.6,编写R代码模拟计算出现正面次数小于等于600次的概率。
(此处黏贴代码)
data = c(0, 1)
cnt = 1; a = 0
while(cnt <= 10000){ # 多次重复试验
# 实验1000次
x = sample(x = data, size = 1000, prob = c(0.4, 0.6), replace = TRUE)
if(sum(x) <= 600)
a = a + 1
cnt = cnt + 1
}
a / 10000
二、坛子中有8个红球与4个白球,我们无放回地取出两个球,假定球的质量不同,每个红球的质量为10克,每个白球的质量为15克,假设每次抽到一给定球的概率是其质量除以当时坛子中球的总质量,编写R代码模拟计算两次取出的都为红球的概率?
(此处黏贴代码)
cnt = 1
a = 0
while(cnt <= 10000){
total_weight = 8 * 10 + 4 * 15 # 总质量
nr = 8 # 红球数
nw = 4 # 白球数
# first take
f_t = sample(x = c(0,1), prob = c(15 * nw / total_weight, 10 * nr / total_weight), size = 1, replace = TRUE)
if(f_t[1] == 1){ # 抽到红球 对应总质量和球的个数减少
total_weight = total_weight - 10
nr = nr - 1
} else { # 抽到白球 对应总质量和球的个数减少
total_weight = total_weight - 15
nw = nw - 1
}
# second take 这里和上面代码相似度较高,可以一起封装成函数,这里就不展示了
s_t = sample(x = c(0,1), prob = c(15 * nw / total_weight, 10 * nr / total_weight), size = 1, replace = TRUE)
if(s_t[1] == 1){ # 同上
total_weight = total_weight - 10
nr = nr - 1
} else {
total_weight = total_weight - 15
nw = nw - 1
}
# 这里可以判断红球或白球的个数,也可判断质量
# 这里判断质量
if (total_weight == 6 * 10 + 15 * 4) # 两次都取出为红球,说明剩下6红4白,计算当前总质量即可
a = a + 1
cnt = cnt + 1
}
a / 10000 # 计算概率
三、编写R代码随机生成10000个服从均值为0.2的指数分布的随机数,并画出这组数据的直方图(含核密度曲线)、箱线图,同时计算这组随机数的均值,方差、最大值、最小值。
(此处黏贴代码)
set.seed(time(0)) # 随机数种子,可要可不要
rm = rexp(10000,0.2) # 生成随机数
hist(rm, freq = FALSE) # 绘制直方图
lines(density(rm)) # 绘制核密度曲线
boxplot(rm) # 绘制箱线图(这两个图只能显示一个不知道怎么解决,分布运行分别查看吧
mean(rm) # 均值
var(rm) # 方差
sd(x) # 标准差
max(rm) # 最大值
min(rm) # 最小值
四、区间估计:编写R代码计算两个独立正态分布方差比值的0.95的置信区间(可用rnorm函数生成具有不同方差的样本数据)。
(此处黏贴代码)
x = rnorm(10, 0, 4) # 10是个数,0是均值,4是方差
y = rnorm(10, 0, 8)
n1 = length(x)
n2 = length(y)
Sx = var(x)
Sy = var(y)
k = Sx/Sy
alpha = 0.95 # 置信区间
right = k / qf(1 - alpha / 2, nx - 1, ny - 1)
left = k / qf(alpha / 2, nx - 1, ny - 1)
data.frame(S_1 = Sx, S_2 = Sy, a = left, b=right)
五、分别编写R代码(不用t.test函数)和用t.test函数完成第八章习题7的假设检验。
(此处黏贴代码)
X = c(6,4,5,5,6,5,5,6,4,6,7,4)
Y = c(2,1,2,2,1,0,3,2,1,0,1,3)
alpha = 0.05
mx = mean(X)
my = mean(Y)
nx = length(X)
ny = length(Y)
Sx = var(X)
Sy = var(Y)
S_w = ((nx - 1) * Sx + (ny - 1) * Sy) / (nx + ny -2)
t = (mx - my -2) / sqrt(S_w) / sqrt(1 / nx + 1 / ny)
t >= qt(alpha, nx + ny -2, lower.tail = FALSE)
# 结果为TRUE 即拒绝原假设
# t.test结果
t.test(X, Y, alternative = "greater", mu = 2)