python - 如何在 python 中使用形状、位置和比例参数绘制 GEV 分布曲线
问题描述
对于给定的数据集,我们使用 R 计算了 GEV 参数 - 形状、位置和比例。过去有人使用相同的参数使用matlab绘制GEV曲线 - 结果是这样发布的:
我需要使用 matplotlib 绘制 GEV 曲线——但是计算出的形状、位置和比例参数不会产生相同的曲线——我可能会遗漏什么吗?可能我计算y
不正确,因为y
仅介于 0 和 1 之间,而原始数据介于 20 和 55 之间。
在 R 中计算的参数(仅供参考 - 无需查看 R 代码)
library(extRemes)
library(boot)
dataset <- read.table("table.csv")
GEVfit <- fevd(dataset$MAXTEMP,type = "GEV", method = "MLE")
用 Python 绘图
from scipy.stats import genextreme
import numpy as np
import matplotlib.pyplot as plt
shape = -0.168374
loc = 25.649717
scale = 2.37303
x = np.linspace(2, 11000, 100000)
y = genextreme.cdf(x, shape, loc, scale)
plt.xscale('log')
plt.plot(x, y)
解决方案
我不相信你有合适的配合,特别是关于scale
和shape
参数。
R使用负数形状,而在 scipy 形状参数中c
必须是非负数,详见此处。
你的比例参数太小了,你必须有数千个,如果不是更多的话,毕竟你的 X 轴高达 10 4。Fe,如果我运行具有正形状和大比例尺的修改代码,我会得到如下图所示的内容
from scipy.stats import genextreme
import numpy as np
import matplotlib.pyplot as plt
shape = 0.168374
scale = 2000.0
loc = 2.37303
x = np.linspace(1, 11000, 100000)
y = 20 + (55-20)*genextreme.cdf(x, shape, loc, scale)
plt.xscale('log')
plt.plot(x, y)
当然,这是不对的,但看起来更接近原版。故事的寓意 - 检查您的适合度和/或您的数据
推荐阅读
- node.js - node.js - Archiving folder using archiver generate an empty zip
- wifi - How can you tell if someone is cutting you off from a wifi connection on your laptop or is it just a weak wifi signal?
- java - 排序列表的分配
- swift - 如何使用标签通过该单元格内的按钮删除单个集合视图单元格
- regex - 如何更改保留所有其他行的文件中包含的特定行中的字符串?
- google-deployment-manager - 谷歌部署管理器使用 --properties 参数访问嵌套属性
- javascript - 如何将 Base64 编码图像传递到 WCF REST 端点
- vba - 如何将通配符添加到组合框选定的值以扩大以多项形式返回的值
- python - Python方法尝试另一种任意方法,直到它运行没有错误?
- r - 如何将数据框转换为镶木地板文件并上传到 R 中的 Azure Blob 存储?任何工作示例?