(a)生成1000个样本,其中每个样本由50个独立的指数随机变量组成 平均值1.估算每个样本的平均值。绘制均值的直方图。 (b)针对零假设对每个样本进行KS检验,证明它们是指数的 随机变量,其均值与数据集的均值相匹配。绘制直方图 1000个D值。
我参与了这段代码
set.seed(0)
simdata = rexp(50000, 1)
matrixdata = matrix(simdata,nrow=50,ncol=1000)
means.exp = apply(matrixdata,2,mean)
means.exp
hist(means.exp)
但我坚持部分(b)
答案 0 :(得分:0)
您可以在列索引上使用lapply
:
# KS test on every column
# H0: pexp(rate = 1/mean(column))
lst.ks <- lapply(1:ncol(matrixdata), function(i)
ks.test(matrixdata[, i], "pexp", 1.0/means.exp[i]))
或者直接而不必依赖means.exp
:
lst.ks <- lapply(1:ncol(matrixdata), function(i)
ks.test(matrixdata[, i], "pexp", 1.0/mean(matrixdata[, i])))
此处1.0/means.exp[i]
对应于指数分布的速率。
PS。使用means.exp = colMeans(matrixdata)
比apply(matrixdata, 2, mean)
更快,请参阅例如here for a relevant SO post
提取测试统计数据并将其存储在KI测试结果中的sapply
矢量中:
# Extract test statistic as vector
Dstat <- sapply(lst.ks, function(x) x$statistic);
# (gg)plot Dstat
ggplot(data.frame(D = Dstat), aes(D)) + geom_histogram(bins = 30);