2

为了找到适合数据集的最佳分布,我需要将可能分布的字符向量中的一个分量(在此示例中故意缩短)作为参数传递给ks.test() R 函数。所以,我的问题与统计有关,更一般地说,与 R 编程有关。

install.packages("ISLR")
library(ISLR)
attach(Credit)
distr.list <- c("pbeta","pbinom","pcauchy","pchisq")
p.val <- double(length(distr.list))
for (i in 1:length(distr.list))
   {
    p.val[i] <- ks.test(Income,distr.list[i])$p.value 
   }

我得到:

Error in y(sort(x), ...) : argument "shape1" is missing, with no default

这是什么意思?我的错误在哪里?提前谢谢了。

sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)
4

1 回答 1

1

使用显式分布函数,

distr.list <- list(
  pbeta = function(x) pbeta(x, 1, 2),
  pbinom = function(x) pbinom(x, 8, 3),
  pcauchy = pcauchy,
  pchisq = function(x) pchisq(x, 4)
)
p.val <- double(length(distr.list))
for (i in 1:length(distr.list))
{
  p.val[i] <- ks.test(Income,distr.list[[i]])$p.value 
}
# Optional:
names(p.val) <- names(distr.list)

注意[[循环中列表的索引。此示例中的实际参数值纯属虚构——您需要提供适合您的目的和假设的值。


尽管这将使您的代码运行,但它在统计上并不正确,但这是一组不同的问题。特别是,使用像二项式这样的离散分布、像 Beta 这样的连续有界分布以及像 Cauchy 这样的连续无界分布作为评估给定数据集的参考分布有什么意义?

将一组分布与数据进行广泛比较(通过一些分布测试,如 KS),如此代码所示,通常不是拟合分布的好方法。分布拟合通常是估计一组参数以在一系列假设的分布模型中确定合理的分布范围。如何做到这一点是统计数据的重要组成部分。

于 2020-12-07T19:57:20.290 回答