利用python获取核密度估计的累积概率分布

核密度估计简介

核密度估计是一种非参数的统计方法,用于估计随机变量的概率密度函数。它的基本思想是在数据点附近放置一些核函数(例如高斯核函数),然后对这些核函数进行加权求和,得到对概率密度函数的估计。核密度估计的优点在于它不需要假设数据的分布形式,能够更灵活地适应数据的特点。核密度估计的核心思想是考察每个数据点的附近区域内的数据点密度,从而得到整体的密度估计。通常使用窗宽参数来控制核函数的宽窄,影响估计的准确性和偏差。核密度估计在数据分布不规则或者多峰情况下表现较好,可以用于数据的可视化和分析

主要依赖的函数

Python里面有很多的函数可以对变量的分布进行核密度估计,我这里只介绍我自己使用的一种方法,可能存在一些错误或者比较繁琐,仅供参考。

1、用于进行核密度估计的函数,代码有缺,仅用于说明函数作用

from scipy.interpolate import interp1d

kde = sm.nonparametric.KDEUnivariate(data) # data表示用于估计的一维变量数据
kde.fit(kernel=kernel, bw = bw) # kerner表示选择的核函数,bw表示窗宽
p = kde.evaluate(x_values) # 表示根据估计的样本分布,在x_values样本下计算得到的概率密度值

2、累积概率分布计算函数 ,本人没在KDEUnivariate这个类中找到计算累积概率分布的函数,可能有,我决定自己写一个。核心思想就是累积概率分布函数实际上就是概率密度函数在变量可行域上的定积分,计算核密度函数的公式已经有了,因此只需要采用定积分的一些基本定义:本文采用梯形积分,基于将区间内的曲线分割成若干个小梯形,然后计算每个小梯形的面积并将它们相加得到总的近似积分值。

    def calculateKdeCDF(self, low, high, scatter=10):
        """
        采用梯形进行近似积分,计算累计非参数核密度估计的累积概率
        """
        kde = sm.nonparametric.KDEUnivariate(self.data)
        kde.fit(kernel=self.kernel, bw=self.bw)  # bw为核密度估计的窗宽
        x_values = np.linspace(low, high, scatter)
        x_values_start = x_values[:-1]
        x_values_end = x_values[1:]
        y_values_start = kde.evaluate(x_values_start)
        y_values_end = kde.evaluate(x_values_end)
        s = (y_values_start + y_values_end) * (x_values_start[1] - x_values_start[0]) / 2
        return np.sum(s)


    def getKdeCDFF(self, low, high, scatter1=1000, scatter2=10):
        """
        获取kde的cdf关系
        :param low: 积分下限
        :param high: 积分上限
        :param scatter1: 样本点
        :param scatter2: 离散份数
        """
        x = np.linspace(low, high, scatter1)
        cdfArray = np.linspace(np.nan, np.nan, scatter1)
        for i in range(scatter1):
            if i == 0:
                cdfArray[i] = 0
            else:
                cdfArray[i] = self.calculateKdeCDF(low=x[i-1], high=x[i], scatter=scatter2)+cdfArray[i-1]
        return x, cdfArray

代码中low,high分别表示积分上下界,scatter2则表示在该积分区间内的离散份数,最后返回的就是以scatter1为长度的样本点和累积概率分布值对应的数组:x,cdfArray

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知情人士黄某

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值