データが特定の分布関数に適合しているかどうかを視覚的に評価したいと考えています。これを行うために、R を使用して分位 - 分位 (QQ) プロットを生成しています。分布関数は非常に特殊で、確率分布の標準リストには含まれていないため、独自の R 関数を記述して記述しました。以下のコードでは「DistFunc」と呼ばれ、2 つのガンマ関数の比率で構成されます。
簡単に言うと、私のコードで行っていることは、2 つの列を含むファイル '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()