Skip to content

Commit 438dae6

Browse files
committed
Update pb-infinite-NaN-gof-metrics.R
1 parent ebbab5a commit 438dae6

File tree

1 file changed

+46
-18
lines changed

1 file changed

+46
-18
lines changed

share/pb-infinite-NaN-gof-metrics.R

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ mygof <- function(gof, echo=FALSE)
77
{
88
n <- length(obs)
99
s <- sort(obs)
10-
theop <- do.call(pdistnam,c(list(s),as.list(par),as.list(fix.arg)))
10+
theop <- do.call(pdistnam, c(list(s), as.list(par), as.list(fix.arg)))
1111
1/(12*n) + sum( ( theop - (2 * 1:n - 1)/(2 * n) )^2 )
1212
}
1313
}else if (gof == "KS")
@@ -18,70 +18,90 @@ mygof <- function(gof, echo=FALSE)
1818
s <- sort(obs)
1919
obspu <- seq(1,n)/n
2020
obspl <- seq(0,n-1)/n
21-
theop <- do.call(pdistnam,c(list(s),as.list(par),as.list(fix.arg)))
22-
max(pmax(abs(theop-obspu),abs(theop-obspl)))
21+
theop <- do.call(pdistnam, c(list(s), as.list(par), as.list(fix.arg)))
22+
max(pmax(abs(theop-obspu), abs(theop-obspl)))
2323
}
2424
}else if (gof == "AD")
2525
{
2626
fnobj <- function(par, fix.arg, obs, pdistnam)
2727
{
2828
n <- length(obs)
2929
s <- sort(obs)
30-
theop <- do.call(pdistnam,c(list(s),as.list(par),as.list(fix.arg)))
30+
theop <- do.call(pdistnam, c(list(s), as.list(par), as.list(fix.arg)))
3131
if(echo)
3232
print(cbind(2 * 1:n - 1, s, theop, 1-rev(theop), log(theop) + log(1 - rev(theop)), (2 * 1:n - 1) * (log(theop) + log(1 - rev(theop))) ),
3333
digit=22)
34-
- n - mean( (2 * 1:n - 1) * (log(theop) + log(1 - rev(theop))) )
34+
ilogpi <- log(theop * (1 - rev(theop))) * (2 * 1:n - 1)
35+
idx <- is.finite(ilogpi)
36+
- sum(idx) - mean( ilogpi[idx] )
3537
}
3638
}else if (gof == "ADR")
3739
{
3840
fnobj <- function(par, fix.arg, obs, pdistnam)
3941
{
4042
n <- length(obs)
4143
s <- sort(obs)
42-
theop <- do.call(pdistnam,c(list(s),as.list(par),as.list(fix.arg)))
44+
theop <- do.call(pdistnam, c(list(s), as.list(par), as.list(fix.arg)))
4345
if(echo)
4446
print(cbind(2 * 1:n - 1, s, 1-rev(theop), log(1 - rev(theop)), (2 * 1:n - 1) * log(1 - rev(theop)) ))
45-
n/2 - 2 * sum(theop) - mean ( (2 * 1:n - 1) * log(1 - rev(theop)) )
47+
48+
ilogpi <- log(1 - rev(theop)) * (2 * 1:n - 1)
49+
idx <- is.finite(ilogpi)
50+
sum(idx)/2 - 2 * sum(theop[idx]) - mean ( ilogpi[idx] )
4651
}
4752
}else if (gof == "ADL")
4853
{
4954
fnobj <- function(par, fix.arg, obs, pdistnam)
5055
{
5156
n <- length(obs)
5257
s <- sort(obs)
53-
theop <- do.call(pdistnam,c(list(s),as.list(par),as.list(fix.arg)))
54-
-3*n/2 + 2 * sum(theop) - mean ( (2 * 1:n - 1) * log(theop) )
58+
theop <- do.call(pdistnam, c(list(s), as.list(par), as.list(fix.arg)))
59+
ilogpi <- (2 * 1:n - 1) * log(theop)
60+
idx <- is.finite(ilogpi)
61+
-3*sum(idx)/2 + 2 * sum(theop[idx]) - mean ( ilogpi[idx] )
5562
}
5663
}else if (gof == "AD2R")
5764
{
5865
fnobj <- function(par, fix.arg, obs, pdistnam)
5966
{
6067
n <- length(obs)
6168
s <- sort(obs)
62-
theop <- do.call(pdistnam,c(list(s),as.list(par),as.list(fix.arg)))
63-
2 * sum(log(1 - theop)) + mean ( (2 * 1:n - 1) / (1 - rev(theop)) )
69+
theop <- do.call(pdistnam, c(list(s), as.list(par), as.list(fix.arg)))
70+
71+
logpi <- log(1 - theop)
72+
i1pi2 <- (2 * 1:n - 1) / (1 - rev(theop))
73+
idx <- is.finite(logpi) & is.finite(i1pi2)
74+
75+
2 * sum(logpi[idx]) + mean( i1pi2[idx] )
6476
}
6577
}else if (gof == "AD2L")
6678
{
6779
fnobj <- function(par, fix.arg, obs, pdistnam)
6880
{
6981
n <- length(obs)
7082
s <- sort(obs)
71-
theop <- do.call(pdistnam,c(list(s),as.list(par),as.list(fix.arg)))
72-
2 * sum(log(theop)) + mean ( (2 * 1:n - 1) / theop )
83+
theop <- do.call(pdistnam, c(list(s), as.list(par), as.list(fix.arg)))
84+
logpi <- log(theop)
85+
i1pi <- (2 * 1:n - 1) / theop
86+
idx <- is.finite(logpi) & is.finite(i1pi)
87+
2 * sum( logpi[idx] ) + mean ( i1pi[idx] )
7388
}
7489
}else if (gof == "AD2")
7590
{
7691
fnobj <- function(par, fix.arg, obs, pdistnam)
7792
{
7893
n <- length(obs)
7994
s <- sort(obs)
80-
theop <- do.call(pdistnam,c(list(s),as.list(par),as.list(fix.arg)))
95+
theop <- do.call(pdistnam, c(list(s), as.list(par), as.list(fix.arg)))
8196
if(echo)
8297
print(cbind(theop, log(theop), log(1-theop), log(theop) + log(1 - theop), ((2 * 1:n - 1) / (1 - rev(theop)))))
83-
2 * sum(log(theop) + log(1 - theop) ) +
84-
mean ( ((2 * 1:n - 1) / theop) + ((2 * 1:n - 1) / (1 - rev(theop))) )
98+
99+
logpi <- log(theop * (1 - theop))
100+
i1pi <- (2 * 1:n - 1) / theop
101+
i1pi2 <- (2 * 1:n - 1) / (1 - rev(theop))
102+
idx <- is.finite(logpi) & is.finite(i1pi) & is.finite(i1pi2)
103+
104+
2 * sum( logpi[idx] ) + mean ( i1pi[idx] + i1pi2[idx] )
85105
}
86106
}else
87107
fnobj <- NULL
@@ -90,7 +110,7 @@ mygof <- function(gof, echo=FALSE)
90110
}
91111

92112
pdistnam <- pweibull
93-
x <- c(rep(1, 13), 10)
113+
x <- c(rep(1, 14), 10)
94114
par <- fitdistrplus:::startarg_transgamma_family(x, "weibull")
95115
fix.arg <- NULL
96116

@@ -100,7 +120,15 @@ mygof("AD", TRUE)(par, fix.arg, x, pdistnam)
100120
mygof("ADR", TRUE)(par, fix.arg, x, pdistnam)
101121
mygof("AD2", TRUE)(par, fix.arg, x, pdistnam)
102122

123+
optim(par, function(theta) mygof("AD", FALSE)(theta, fix.arg, x, pdistnam), control=list(trace=1, REPORT=1))
103124

104125
optim(par, function(theta) mygof("AD2", FALSE)(theta, fix.arg, x, pdistnam), control=list(trace=1, REPORT=1))
105126

106-
abs(mygof("AD")(as.list(unlist(par)+eps), fix.arg, x, pdistnam) - mygof("AD")(par, fix.arg, x, pdistnam))/eps
127+
optim(par, function(theta) mygof("ADR", FALSE)(theta, fix.arg, x, pdistnam), control=list(trace=1, REPORT=1))
128+
129+
optim(par, function(theta) mygof("AD2R", FALSE)(theta, fix.arg, x, pdistnam), control=list(trace=1, REPORT=1))
130+
131+
optim(par, function(theta) mygof("AD2L", FALSE)(theta, fix.arg, x, pdistnam), control=list(trace=1, REPORT=1))
132+
133+
134+

0 commit comments

Comments
 (0)