6.已知CDF图形,怎么利用这个图形计算均值和方差

1. 理论知识

如果已经有了一个累积分布函数(CDF)的图形,函数图形为 F ( x ) F(x) F(x),可以通过以下步骤计算其均值和方差:

1). 计算均值(Mean)

  • 在CDF图形中,均值对应于横轴上使得CDF值等于0.5的那个点。这个点表示随机变量落在该值以下的概率为0.5,即中位数。用函数计算为:
    μ = ∫ − ∞ ∞ [ x ∗ F ′ ( x ) ] d x μ = \int_{-\infty}^{\infty}[x * F'(x)] dx μ=[xF(x)]dx
  • 如果CDF是以离散值给出的,则中位数是距离0.5最近的那个值。

2). 计算方差(Variance)

  • 方差是对数据分布的离散程度的一种度量。在一维情况下,方差定义为每个数据点与均值之间的平方差的平均值。
  • 对于CDF图形,可以使用下面的公式计算方差:
    V a r ( X ) = σ 2 = ∫ [ ( x − μ ) 2 ∗ F ′ ( x ) ] d x Var (X)=\sigma^2 = ∫[(x - μ)^2 * F'(x)] dx Var(X)=σ2=[(xμ)2F(x)]dx
  • 如果只有离散值的CDF,可以使用下面的公式来近似计算方差:
    V a r = ∑ i = 1 N ( x i − μ ) 2 ⋅ P ( x i ) Var = \sum_{i=1}^{N} (x_i - \mu)^2 \cdot P(x_i) Var=i=1N(xiμ)2P(xi)
    其中, x i x_i xi 是第 i i i 个数据点, P ( x i ) P(x_i) P(xi) 是数据点 x i x_i xi 的概率。

通过这些步骤,可以利用CDF图形计算出均值和方差。

但是若知道概率密度函数PDF图形,函数图形为$f(x)$,

μ = ∫ − ∞ ∞ [ x ∗ f ( x ) ] d x ; μ = \int_{-\infty}^{\infty}[x * f(x)] dx ; μ=[xf(x)]dx;
σ 2 = ∫ − ∞ ∞ ( x − μ ) 2 ⋅ f ( x ) d x \sigma^2= \int_{-\infty}^{\infty} (x - \mu)^2 \cdot f(x) dx σ2=(xμ)2f(x)dx
其中, μ \mu μ是均值, f ( x ) f(x) f(x)是概率密度函数(PDF),如果只有CDF,可以通过对CDF进行微分来获取PDF。 如前面所写: μ = ∫ − ∞ ∞ [ x ∗ F ′ ( x ) ] d x \mu= \int_{-\infty}^{\infty}[x * F'(x)] dx μ=[xF(x)]dx; σ 2 = ∫ [ ( x − μ ) 2 ∗ F ′ ( x ) ] d x \sigma^2 = ∫[(x - μ)^2 * F'(x)] dx σ2=[(xμ)2F(x)]dx.

2.代码实现

import sympy as sp
import scipy.integrate as spi
import matplotlib.pyplot as plt
import numpy as np

'''
这段代码的目的是计算一个累积分布函数(CDF)在某个区间内的均值和方差
然后使用matplotlib库来绘制图形
'''

# 定义变量 x
x = sp.Symbol('x')

# 定义累积分布函数
def cdf(x):
    return (1/10)*x - 4.8

# 求导
cdf_diff = cdf(x).diff(x)

# 积分上下限
dowm_limit = 48
up_limit = 58

# 使用lambdify函数,将sympy的Symbol类型转换为Python的函数类型(function类型),以便进行数值计算
x_lambda = sp.lambdify(x, x * cdf_diff)
# 使用scipy的quad函数,计算x * cdf_diff在给定的上下限之间的定积分,该积分即为均值
mean, error = spi.quad(lambda x: x_lambda(x), dowm_limit, up_limit)
print("均值为:", round(mean, 2))

# 定义一个函数m_lambda,用于计算(x-均值)^2 * cdf_diff的值
m_lambda = sp.lambdify(x, ((x - mean) ** 2) * cdf_diff)
# 使用scipy的quad函数,计算(x-均值)^2 * cdf_diff在给定的上下限之间的定积分,该积分即为方差
variance, error = spi.quad(lambda x: m_lambda(x), dowm_limit, up_limit)
print("方差为:", round(variance, 2))

# 定义累积分布函数cdf(x)
cdf = (1/10)*x - 4.8
# 使用matplotlib绘制cdf图形
X = np.linspace(48, 58, 100)
Y = [cdf.subs(x, xx).evalf() for xx in X]

plt.plot(X, Y)
plt.xlabel('x')
plt.ylabel('CDF(x)')
plt.title('CDF figure')
plt.show()

在这里插入图片描述

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用MATLAB画.mat CDF曲线,可以按照以下步骤进行: 1. 在MATLAB中加载.mat文件。使用load函数加载.mat文件,并将数据保存到一个变量中。例如,假设.mat文件中的变量名为data,可以使用以下代码加载数据: data = load('filename.mat'); 2. 对数据进行排序。使用sort函数对数据进行排序,以便能够生成CDF曲线。例如,可以使用以下代码对数据进行排序: sortedData = sort(data); 3. 计算CDF值。使用cumsum函数计算数据的累积和,并除以数据总数得到CDF值。例如,可以使用以下代码计算CDF值: cdf = cumsum(sortedData) / length(sortedData); 4. 绘制CDF曲线。使用plot函数绘制CDF曲线。在绘制曲线时,将排好序的数据作为x轴,CDF值作为y轴。例如,可以使用以下代码绘制CDF曲线: plot(sortedData, cdf); 5. 添加标签和标题。使用xlabel和ylabel函数为x轴和y轴添加标签,使用title函数添加标题。例如,可以使用以下代码添加标签和标题: xlabel('Data'); ylabel('CDF'); title('CDF Curve'); 6. 显示图形。使用grid函数添加网格线,使用legend函数添加例(如果需要),并使用xlim和ylim函数设置x轴和y轴的显示范围。最后,使用show函数显示绘制的图形。例如,可以使用以下代码显示图形: grid on; legend('CDF Curve'); xlim([min(sortedData), max(sortedData)]); show; 以上步骤可以帮助您使用MATLAB绘制.mat文件的CDF曲线。您只需要将上述代码中的'filename.mat'替换为您的.mat文件的路径和文件名,并根据需求调整其他参数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值