193
freund61 = function(la = "loge",
176
pbilogis4 = function(q1, q2, loc1 = 0, scale1 = 1, loc2 = 0, scale2 = 1) {
177
if (!is.Numeric(q1)) stop("bad input for 'q1'")
178
if (!is.Numeric(q2)) stop("bad input for 'q2'")
179
if (!is.Numeric(scale1, posit = TRUE)) stop("bad input for 'scale1'")
180
if (!is.Numeric(scale2, posit = TRUE)) stop("bad input for 'scale2'")
183
1 / (1 + exp(-(q1-loc1)/scale1) + exp(-(q2-loc2)/scale2))
188
rbilogis4 = function(n, loc1 = 0, scale1 = 1, loc2 = 0, scale2 = 1) {
189
if (!is.Numeric(n, posit = TRUE,allow = 1,integ = TRUE)) stop("bad input for 'n'")
190
if (!is.Numeric(scale1, posit = TRUE)) stop("bad input for 'scale1'")
191
if (!is.Numeric(scale2, posit = TRUE)) stop("bad input for 'scale2'")
192
y1 = rlogis(n, loc=loc1, scale=scale1)
193
ezedd1 = exp(-(y1-loc1)/scale1)
194
y2 = loc2 - scale2 * log(1/sqrt(runif(n) / (1 + ezedd1)^2) - 1 - ezedd1)
200
freund61 = function(la = "loge",
197
208
ia = NULL, iap = NULL, ib = NULL, ibp = NULL,
198
209
independent = FALSE,
200
if (mode(la) != "character" && mode(la) != "name")
201
la = as.character(substitute(la))
202
if (mode(lap) != "character" && mode(lap) != "name")
203
lap = as.character(substitute(lap))
204
if (mode(lb) != "character" && mode(lb) != "name")
205
lb = as.character(substitute(lb))
206
if (mode(lbp) != "character" && mode(lbp) != "name")
207
lbp = as.character(substitute(lbp))
210
blurb = c("Freund (1961) bivariate exponential distribution\n",
212
namesof("a", la), ", ",
213
namesof("ap", lap), ", ",
214
namesof("b", lb), ", ",
216
constraints = eval(substitute(expression({
217
constraints <- cm.vgam(matrix(c(1,1,0,0, 0,0,1,1),M,2), x,
218
.independent, constraints, intercept.apply = TRUE)
219
constraints = cm.zero.vgam(constraints, x, .zero, M)
220
}), list(.independent=independent, .zero = zero))),
221
initialize = eval(substitute(expression({
222
if (!is.matrix(y) || ncol(y) != 2)
223
stop("the response must be a 2 column matrix")
224
predictors.names = c(namesof("a", .la, short = TRUE),
225
namesof("ap", .lap, short = TRUE),
226
namesof("b", .lb, short = TRUE),
227
namesof("bp", .lbp, short = TRUE))
228
extra$y1.lt.y2 = y[, 1] < y[,2]
229
if (!(arr <- sum(extra$y1.lt.y2)) || arr==n)
230
stop("identifiability problem: either all y1<y2 or y2<y1")
231
if (!length(etastart)) {
232
sumx = sum(y[extra$y1.lt.y2, 1]); sumxp = sum(y[!extra$y1.lt.y2, 1])
233
sumy = sum(y[extra$y1.lt.y2,2]); sumyp = sum(y[!extra$y1.lt.y2,2])
234
if (FALSE) { # Noise:
235
arr = min(arr + n/10, n*0.95)
236
sumx = sumx * 1.1; sumxp = sumxp * 1.2;
237
sumy = sumy * 1.2; sumyp = sumyp * 1.3;
239
ainit = if (length(.ia)) rep(.ia, len = n) else arr / (sumx + sumyp)
240
apinit = if (length(.iap)) rep(.iap,len = n) else (n-arr)/(sumxp-sumyp)
241
binit = if (length(.ib)) rep(.ib, len = n) else (n-arr)/(sumx +sumyp)
242
bpinit = if (length(.ib)) rep(.ibp,len = n) else arr / (sumy - sumx)
243
etastart = cbind(theta2eta(rep(ainit, len = n), .la),
244
theta2eta(rep(apinit, len = n), .lap),
245
theta2eta(rep(binit, len = n), .lb),
246
theta2eta(rep(bpinit, len = n), .lbp))
211
if (mode(la) != "character" && mode(la) != "name")
212
la = as.character(substitute(la))
213
if (mode(lap) != "character" && mode(lap) != "name")
214
lap = as.character(substitute(lap))
215
if (mode(lb) != "character" && mode(lb) != "name")
216
lb = as.character(substitute(lb))
217
if (mode(lbp) != "character" && mode(lbp) != "name")
218
lbp = as.character(substitute(lbp))
220
if (!is.list(ea )) ea = list()
221
if (!is.list(eap)) eap = list()
222
if (!is.list(eb )) eb = list()
223
if (!is.list(ebp)) ebp = list()
226
blurb = c("Freund (1961) bivariate exponential distribution\n",
228
namesof("a", la, earg = ea ), ", ",
229
namesof("ap", lap, earg = eap), ", ",
230
namesof("b", lb, earg = eb ), ", ",
231
namesof("bp", lbp, earg = ebp)),
232
constraints = eval(substitute(expression({
233
constraints <- cm.vgam(matrix(c(1, 1,0,0, 0,0, 1, 1), M, 2), x,
234
.independent, constraints,
235
intercept.apply = TRUE)
236
constraints = cm.zero.vgam(constraints, x, .zero, M)
237
}), list(.independent = independent, .zero = zero))),
238
initialize = eval(substitute(expression({
239
if (!is.matrix(y) || ncol(y) != 2)
240
stop("the response must be a 2 column matrix")
243
c(namesof("a", .la, earg = .ea , short = TRUE),
244
namesof("ap", .lap, earg = .eap, short = TRUE),
245
namesof("b", .lb, earg = .eb , short = TRUE),
246
namesof("bp", .lbp, earg = .ebp, short = TRUE))
247
extra$y1.lt.y2 = y[, 1] < y[, 2]
249
if (!(arr <- sum(extra$y1.lt.y2)) || arr==n)
250
stop("identifiability problem: either all y1<y2 or y2<y1")
252
if (!length(etastart)) {
253
sumx = sum(y[extra$y1.lt.y2, 1]); sumxp = sum(y[!extra$y1.lt.y2, 1])
254
sumy = sum(y[extra$y1.lt.y2, 2]); sumyp = sum(y[!extra$y1.lt.y2, 2])
255
if (FALSE) { # Noise:
256
arr = min(arr + n/10, n*0.95)
257
sumx = sumx * 1.1; sumxp = sumxp * 1.2;
258
sumy = sumy * 1.2; sumyp = sumyp * 1.3;
248
}), list(.la=la, .lap=lap, .lb=lb, .lbp=lbp, .ia=ia, .iap=iap,
250
inverse = eval(substitute(function(eta, extra = NULL) {
251
alpha = eta2theta(eta[, 1], .la)
252
alphap = eta2theta(eta[,2], .lap)
253
beta = eta2theta(eta[,3], .lb)
254
betap = eta2theta(eta[,4], .lbp)
255
cbind((alphap+beta) / (alphap*(alpha+beta)),
256
(alpha+betap) / (betap*(alpha+beta)))
257
}, list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))),
258
last = eval(substitute(expression({
259
misc$link = c("a"= .la, "ap"= .lap, "b"= .lb, "bp"= .lbp)
260
}), list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))),
261
loglikelihood = eval(substitute(
262
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
263
alpha = eta2theta(eta[, 1], .la)
264
alphap = eta2theta(eta[,2], .lap)
265
beta = eta2theta(eta[,3], .lb)
266
betap = eta2theta(eta[,4], .lbp)
267
if (residuals) stop("loglikelihood residuals not ",
268
"implemented yet") else {
269
tmp88 = extra$y1.lt.y2
270
ell1 = log(alpha[tmp88]) + log(betap[tmp88]) -
271
betap[tmp88] * y[tmp88,2] -
272
(alpha+beta-betap)[tmp88] * y[tmp88, 1]
273
ell2 = log(beta[!tmp88]) + log(alphap[!tmp88]) -
274
alphap[!tmp88] * y[!tmp88, 1] -
275
(alpha+beta-alphap)[!tmp88] * y[!tmp88,2]
276
sum(w[tmp88] * ell1) + sum(w[!tmp88] * ell2) }
277
}, list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))),
278
vfamily = c("freund61"),
279
deriv = eval(substitute(expression({
260
ainit = if (length(.ia)) rep(.ia, len = n) else
262
apinit = if (length(.iap)) rep(.iap,len = n) else
263
(n-arr)/(sumxp-sumyp)
264
binit = if (length(.ib)) rep(.ib, len = n) else
265
(n-arr)/(sumx +sumyp)
266
bpinit = if (length(.ib)) rep(.ibp,len = n) else
270
cbind(theta2eta(rep(ainit, len = n), .la, earg = .ea ),
271
theta2eta(rep(apinit, len = n), .lap, earg = .eap ),
272
theta2eta(rep(binit, len = n), .lb, earg = .eb ),
273
theta2eta(rep(bpinit, len = n), .lbp, earg = .ebp ))
275
}), list(.la = la, .lap = lap, .lb = lb, .lbp = lbp,
276
.ea = ea, .eap = eap, .eb = eb, .ebp = ebp,
277
.ia = ia, .iap = iap, .ib = ib, .ibp = ibp))),
278
linkinv = eval(substitute(function(eta, extra = NULL) {
279
alpha = eta2theta(eta[, 1], .la, earg = .ea )
280
alphap = eta2theta(eta[, 2], .lap, earg = .eap )
281
beta = eta2theta(eta[, 3], .lb, earg = .eb )
282
betap = eta2theta(eta[, 4], .lbp, earg = .ebp )
283
cbind((alphap+beta) / (alphap*(alpha+beta)),
284
(alpha+betap) / (betap*(alpha+beta)))
285
}, list(.la = la, .lap = lap, .lb = lb, .lbp = lbp,
286
.ea = ea, .eap = eap, .eb = eb, .ebp = ebp ))),
287
last = eval(substitute(expression({
288
misc$link = c("a"= .la, "ap"= .lap, "b"= .lb, "bp"= .lbp)
289
}), list(.la = la, .lap = lap, .lb = lb, .lbp = lbp))),
290
loglikelihood = eval(substitute(
291
function(mu, y, w, residuals = FALSE, eta, extra = NULL) {
292
alpha = eta2theta(eta[, 1], .la, earg = .ea )
293
alphap = eta2theta(eta[, 2], .lap, earg = .eap )
294
beta = eta2theta(eta[, 3], .lb, earg = .eb )
295
betap = eta2theta(eta[, 4], .lbp, earg = .ebp )
296
if (residuals) stop("loglikelihood residuals not ",
297
"implemented yet") else {
280
298
tmp88 = extra$y1.lt.y2
281
alpha = eta2theta(eta[, 1], .la)
282
alphap = eta2theta(eta[,2], .lap)
283
beta = eta2theta(eta[,3], .lb)
284
betap = eta2theta(eta[,4], .lbp)
285
d1 = 1/alpha - y[, 1]
286
d1[!tmp88] = -y[!tmp88,2]
288
d2[!tmp88] = 1/alphap[!tmp88] - y[!tmp88, 1] + y[!tmp88,2]
290
d3[!tmp88] = 1/beta[!tmp88] - y[!tmp88,2]
291
d4 = 1/betap - y[,2] + y[, 1]
293
c(w) * cbind(d1 * dtheta.deta(alpha, .la),
294
d2 * dtheta.deta(alphap, .lap),
295
d3 * dtheta.deta(beta, .lb),
296
d4 * dtheta.deta(betap, .lbp))
297
}), list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))),
298
weight = eval(substitute(expression({
299
py1.lt.y2 = alpha / (alpha+beta)
300
d11 = py1.lt.y2 / alpha^2
301
d22 = (1-py1.lt.y2) / alphap^2
302
d33 = (1-py1.lt.y2) / beta^2
303
d44 = py1.lt.y2 / betap^2
304
wz = matrix(0, n, M) # diagonal
305
wz[, iam(1,1,M)] = dtheta.deta(alpha, .la)^2 * d11
306
wz[, iam(2,2,M)] = dtheta.deta(alphap, .lap)^2 * d22
307
wz[, iam(3,3,M)] = dtheta.deta(beta, .lb)^2 * d33
308
wz[, iam(4,4,M)] = dtheta.deta(betap, .lbp)^2 * d44
310
}), list(.la=la, .lap=lap, .lb=lb, .lbp=lbp))))
299
ell1 = log(alpha[tmp88]) + log(betap[tmp88]) -
300
betap[tmp88] * y[tmp88, 2] -
301
(alpha+beta-betap)[tmp88] * y[tmp88, 1]
302
ell2 = log(beta[!tmp88]) + log(alphap[!tmp88]) -
303
alphap[!tmp88] * y[!tmp88, 1] -
304
(alpha+beta-alphap)[!tmp88] * y[!tmp88, 2]
305
sum(w[tmp88] * ell1) + sum(w[!tmp88] * ell2) }
306
}, list(.la = la, .lap = lap, .lb = lb, .lbp = lbp,
307
.ea = ea, .eap = eap, .eb = eb, .ebp = ebp ))),
308
vfamily = c("freund61"),
309
deriv = eval(substitute(expression({
310
tmp88 = extra$y1.lt.y2
311
alpha = eta2theta(eta[, 1], .la, earg = .ea )
312
alphap = eta2theta(eta[, 2], .lap, earg = .eap )
313
beta = eta2theta(eta[, 3], .lb, earg = .eb )
314
betap = eta2theta(eta[, 4], .lbp, earg = .ebp )
316
dalpha.deta = dtheta.deta(alpha, .la, earg = .ea )
317
dalphap.deta = dtheta.deta(alphap, .lap, earg = .eap )
318
dbeta.deta = dtheta.deta(beta, .lb, earg = .eb )
319
dbetap.deta = dtheta.deta(betap, .lbp, earg = .ebp )
321
d1 = 1/alpha - y[, 1]
322
d1[!tmp88] = -y[!tmp88, 2]
324
d2[!tmp88] = 1/alphap[!tmp88] - y[!tmp88, 1] + y[!tmp88, 2]
326
d3[!tmp88] = 1/beta[!tmp88] - y[!tmp88, 2]
327
d4 = 1/betap - y[, 2] + y[, 1]
330
c(w) * cbind(d1 * dalpha.deta,
334
}), list(.la = la, .lap = lap, .lb = lb, .lbp = lbp,
335
.ea = ea, .eap = eap, .eb = eb, .ebp = ebp ))),
336
weight = eval(substitute(expression({
337
py1.lt.y2 = alpha / (alpha+beta)
338
d11 = py1.lt.y2 / alpha^2
339
d22 = (1-py1.lt.y2) / alphap^2
340
d33 = (1-py1.lt.y2) / beta^2
341
d44 = py1.lt.y2 / betap^2
342
wz = matrix(0, n, M) # diagonal
343
wz[, iam(1, 1, M)] = dalpha.deta^2 * d11
344
wz[, iam(2, 2, M)] = dalphap.deta^2 * d22
345
wz[, iam(3, 3, M)] = dbeta.deta^2 * d33
346
wz[, iam(4, 4, M)] = dbetap.deta^2 * d44
348
}), list(.la = la, .lap = lap, .lb = lb, .lbp = lbp,
349
.ea = ea, .eap = eap, .eb = eb, .ebp = ebp ))))