如何在矩阵中的多个列上执行ks测试?

时间:2017-12-01 03:01:54

标签: r

(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)

1 个答案:

答案 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);

enter image description here