【问题标题】:how do i perform ks test on multiple columns in a matrix?如何对矩阵中的多个列执行 ks 测试?
【发布时间】:2018-05-15 02:57:03
【问题描述】:

(a) 生成 1000 个样本,每个样本由 50 个独立的指数随机变量组成 mean 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) 部分

【问题讨论】:

  • 第 (b) 部分有什么问题吗?

标签: r


【解决方案1】:

您可以在列索引上使用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.


要提取测试统计数据并将其存储在向量中,只需 sapply 覆盖 KS 测试结果:

# 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);

【讨论】:

  • 我怎样才能得到 D 统计数据以便我可以用它们绘制直方图?
  • @PeterTan 请看看我更新的解决方案。
  • @PeterTan 如果这回答了您的问题,请考虑通过接受答案来结束问题。
猜你喜欢
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
  • 2020-05-15
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多