我想对我的数据是否符合特定的分布函数进行视觉评估。为此,我使用 R 生成分位数-分位数 (QQ) 图。分布函数非常具体,不在概率分布的标准列表中,所以我编写了自己的 R 函数来描述它。它在下面的代码中称为“DistFunc”,由两个伽马函数的比率组成。
简而言之,我在代码中所做的是从包含两列的文件“DistributionEstimate.txt”中读取数据。第 1 列是 x 值,第 2 列是 y 值。变量“a”和“b”是我之前在另一个程序中使用此分布函数与数据的最小二乘拟合确定的最佳拟合参数。然后我定义 DistFunc 并尝试使用 qqmath 函数绘制 QQ 图。
问题出现在这一点上。R 继续给我很多警告,说 DistFunc 返回的值超出了 'gammafn' 的范围,并且无法绘制任何内容。这很公平,因为我知道该函数包含一个靠近原点的极点。正如您在代码中看到的那样,我尝试规范化 DistFunc 以尝试将其转换为概率分布(我认为这是使用 qqmath 所必需的吗?),但是,这没有帮助。
你们中是否有人知道如何克服这个问题 - 例如,通过使用不需要归一化的不同绘图函数,或者将其转换为伪概率分布,而不会对结果造成太大影响?
我将非常感谢任何有用的输入!
install.packages('lattice')
library(lattice)
x<-read.table("C:/DistributionEstimate.txt", colClasses = c(rep("NULL",1),rep("numeric",1)), header = FALSE)
y<-read.table("C:/DistributionEstimate.txt", colClasses = c(rep("numeric",1),rep("NULL",1)), header = FALSE)
x<-sapply(x, as.numeric)
y<-sapply(y, as.numeric)
a<-16359727025.407821410;
b<-198838619.13262583836;
DistFunc <- function(k,ampl=a,stretch=b) {
fdist<-ampl*gamma(k*stretch-1/2)/gamma(k*stretch+1)
fnorm<-fdist/sum(fdist)
}
qqmath(DistFunc(x), y, col="blue", envelope=.95, xlab="Quantiles of the best-fit model", ylab="Quantiles of the data")
abline(0,1, col="red", lwd=2)
grid()