当前位置: 首页 > 面试题库 >

使用Scipy的stats.kstest模块进行拟合优度测试

洪浩波
2023-03-14
问题内容

我已经阅读了有关此模块(和Scipy文档)的现有文章,但是当您拥有数据集和可调用函数时,我仍然不清楚如何使用Scipy的kstest模块进行拟合优度测试。

我要针对其进行数据测试的PDF并不是标准的scipy.stats发行版之一,因此我不能仅使用以下方式进行调用:

kstest(mydata,'norm')

其中mydata是一个Numpy数组。相反,我想做类似的事情:

kstest(mydata,myfunc)

其中“ myfunc”是可调用函数。这是行不通的,这不足为奇,因为kstest无法知道“ mydata”数组的横坐标是什么,以便使用“
myfunc”生成相应的理论频率。假设“ mydata”中的频率对应于随机变量的值为数组“横坐标”。然后我想也许我可以使用stats.ks_2samp:

ks_2samp(mydata,myfunc(abscissa))

但我不知道这在统计上是否有效。(旁注:kstest和ks_2samp是否期望将频率阵列归一化,还是希望绝对频率?)

无论如何,由于应该将单样本KS测试用于拟合优度测试,因此我必须假设有某种方法可以直接通过kstest进行。你怎么做到这一点?


问题答案:

一些示例可能会阐明如何使用scipy.stats.kstest。让我们首先设置一些测试数据,例如均值5和标准偏差10的正态分布:

>>> data = scipy.stats.norm.rvs(loc=5, scale=10, size=(1000,))

kstest对这些数据运行,我们需要一个函数f(x),该函数采用一个分位数数组,并返回累积分布函数的相应值。如果我们重用我们的cdf功能,scipy.stats.norm我们可以做:

>>> scipy.stats.kstest(data, lambda x: scipy.stats.norm.cdf(x, loc=5, scale=10))
(0.019340993719575206, 0.84853828416694665)

上面的代码通常以更方便的形式运行:

>>> scipy.stats.kstest(data, 'norm', args=(5, 10))
(0.019340993719575206, 0.84853828416694665)

如果我们有均匀分布的数据,那么手工构建cdf很容易:

>>> data = np.random.rand(1000)
>>> scipy.stats.kstest(data, lambda x: x)
(0.019145675289412523, 0.85699937276355065)


 类似资料:
  • 问题内容: 对于使用6阶多项式插值非线性数据,我有一个非常具体的要求。我看过numpy / scipy例程(scipy.interpolate.InterpolatedUnivariateSpline),这些例程最多只能进行5级插值。 即使没有直接函数可以执行此操作,是否有办法在Python中复制Excel的LINEST线性回归算法?LINEST允许进行6度曲线拟合,但是我不希望将Excel用于任

  • 问题内容: 我知道这个问题已经被问过很多次了,而且我知道在大多数情况下人们会丢失文件。 我遇到了同样的问题,试图在模块上测试工厂。不幸的是,我一直遇到测试方面的问题(为什么要使用Angular,为什么要假设和对象?),未定义模块的状态。我很茫然。我也尝试过使用angular.mocks.module,但随后收到一条消息,提示未定义Angular。我究竟做错了什么? 值得注意的是,我正在使用gulp

  • 问题内容: 我有一组近似于2D曲线的点。我想将Python与numpy和scipy配合使用,以找到近似适合这些点的三次贝塞尔曲线路径,在该路径中,我指定两个端点的确切坐标,并返回其他两个控制点的坐标。 我最初以为可以做我想做的事,但是似乎迫使曲线穿过每个数据点(因为我想您希望进行插值)。我以为我走错了路。 我的问题与此相似:如何将贝塞尔曲线拟合到一组数据?,除了他们说他们不想使用numpy。我的偏

  • 我有一个文件,其中包含以下几个helper函数,这些函数在不同的组件中使用。 下面是一个组件,它使用了文件中定义的函数。我正在为组件编写测试,我想模拟这里调用的外部函数。 我对jest/enzyze是新手,我不知道如何模拟外部函数buildoptions。我不知道如何模拟外部的buildOptions功能。有人能帮我做这个吗。下面是我的测试代码:

  • 我的目标是建立一个环境,让CircleCI在不同的浏览器中运行BrowserStack上的e2e测试。 我的测试假设有一个模拟服务器在运行。(例如,测试正在检查是否已对模拟服务器进行了某个调用。)

  • 我很困惑于嘲笑如何对实现进行单元测试。问题是我想嘲笑不同的预期行为。 有没有办法做到这一点?由于导入只能在文件的顶部,并且为了能够模拟某些内容,必须在导入之前声明它。我也试图传递一个本地函数,这样我就可以覆盖行为,但jest抱怨你不允许传递任何本地的东西。 在内部,可以想象使用

  • 问题内容: 如何模拟使用PowerMock进行测试的专用方法?我有一个类,我想使用一个调用私有方法的公共方法进行测试。我想假设私有方法可以正常工作。例如,我想要类似的东西。我发现有使用PowerMock的解决方案,但该解决方案对我不起作用。怎么做?有人有这个问题吗? 问题答案: 我在这里没有问题。使用Mockito API的以下代码,我做到了: 这是JUnit测试:

  • 问题内容: 我正在尝试使用Swift 2的新声明将我的类暴露给测试目标。但是我收到此编译器错误: 是包含我要公开的类的模块。如何摆脱这个错误? 问题答案: 在主要目标中,您需要将构建选项设置为“是”。 根据下面@earnshavian的评论,应仅根据苹果发行说明在调试版本中使用此选项:“启用可测试性版本设置应仅在Debug配置中使用,因为它禁止不依赖于不从内部导出内部符号的优化应用或框架” htt