Nothing
library(aster2)
##### parm.type = "theta"
data(echinacea)
cmat <- constancy(echinacea, parm.type = "theta")
nrow(cmat) == 0
data(test1)
fred <- asterdata(test1,
vars = c("m1", "m2", "m3", "n1", "n2", "b1", "p1", "z1"),
pred = c(0, 0, 0, 1, 1, 2, 3, 6), group = c(0, 1, 2, 0, 4, 0, 0, 0),
code = c(1, 1, 1, 2, 2, 3, 4, 5),
families = list(fam.multinomial(3), "normal.location.scale",
"bernoulli", "poisson", "zero.truncated.poisson"))
is.validasterdata(fred)
cmat <- constancy(fred, parm.type = "theta")
multinomial.ind <- sort(unique(fred$redata$id[fred$recode == 1]))
mycmat <- matrix(NA, nrow = length(multinomial.ind), ncol = nrow(fred$redata))
for (ind in seq(along = multinomial.ind))
mycmat[ind, ] <- as.numeric(fred$redata$id == ind & fred$recode == 1)
mycmat <- mycmat[rev(multinomial.ind), ]
identical(cmat, Matrix(mycmat))
sally <- fred
y <- sally$redata[[sally$response.name]]
v <- as.character(sally$redata$varb)
ind <- sally$redata$id
ind.save <- numeric(0)
cmat.extra <- NULL
is.zero <- rep(FALSE, length(y))
i.buddy <- sally$regroup
i.buddy[i.buddy == 0] <- NA
i.buddy.buddy <- sally$regroup[i.buddy]
i.buddy.buddy[i.buddy.buddy == 0] <- NA
y.buddy <- y[i.buddy]
y.buddy.buddy <- y[i.buddy.buddy]
# find an individual for whom to constrain m1 == 0
ok <- y == 0 & v == "m1"
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m2 == 0
ok <- y == 0 & v == "m2" & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m3 == 0
ok <- y == 0 & v == "m3" & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m1 == 0 and m2 == 0
ok <- y != 0 & y.buddy == 0 & y.buddy.buddy == 0 & (! (ind %in% ind.save))
ok[is.na(ok)] <- FALSE
if (any(ok)) {
k <- seq(along = ok)[ok]
k <- k[1]
j <- i.buddy[k]
i <- i.buddy.buddy[k]
sally$redelta[i] <- (-1)
sally$redelta[j] <- (-1)
is.zero[i] <- TRUE
is.zero[j] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
foo <- rep(0, length(y))
foo[j] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m1 == 0 and m3 == 0
ok <- y == 0 & y.buddy != 0 & y.buddy.buddy == 0 & (! (ind %in% ind.save))
ok[is.na(ok)] <- FALSE
if (any(ok)) {
k <- seq(along = ok)[ok]
k <- k[1]
j <- i.buddy[k]
i <- i.buddy.buddy[k]
sally$redelta[i] <- (-1)
sally$redelta[k] <- (-1)
is.zero[i] <- TRUE
is.zero[k] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
foo <- rep(0, length(y))
foo[k] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m2 == 0 and m3 == 0
ok <- y == 0 & y.buddy == 0 & y.buddy.buddy != 0 & (! (ind %in% ind.save))
ok[is.na(ok)] <- FALSE
if (any(ok)) {
k <- seq(along = ok)[ok]
k <- k[1]
j <- i.buddy[k]
i <- i.buddy.buddy[k]
sally$redelta[j] <- (-1)
sally$redelta[k] <- (-1)
is.zero[j] <- TRUE
is.zero[k] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[j] <- 1
cmat.extra <- rbind(cmat.extra, foo)
foo <- rep(0, length(y))
foo[k] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain b1 == 0
ok <- y == 0 & v == "b1" & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain b1 == 1
ok <- y == 1 & v == "b1" & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (+1)
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain p1 == 0
ok <- y == 0 & v == "p1" & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain z1 == 1
ok <- y == 1 & v == "z1" & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
is.validasterdata(sally)
i.pred <- sally$repred
i.pred[i.pred == 0] <- NA
anc.is.zero <- rep(FALSE, length(y))
repeat {
anc.is.zero.save <- anc.is.zero
anc.is.zero <- is.zero[i.pred] | anc.is.zero[i.pred]
anc.is.zero[is.na(anc.is.zero)] <- FALSE
if (identical(anc.is.zero, anc.is.zero.save)) break
}
cmat.extra.extra <- matrix(0, sum(anc.is.zero), length(y))
j <- seq(along = anc.is.zero)[anc.is.zero]
for (i in 1:nrow(cmat.extra.extra)) {
cmat.extra.extra[i, j[i]] <- 1
}
dimnames(cmat.extra) <- NULL
cmat.sally <- constancy(sally, parm.type = "theta")
mycmat.sally <- rbind(cmat, cmat.extra, cmat.extra.extra)
cmat.sally.char <- apply(cmat.sally, 1, paste, collapse = "*")
mycmat.sally.char <- apply(mycmat.sally, 1, paste, collapse = "*")
identical(sort(cmat.sally.char), sort(mycmat.sally.char))
##### is.same parm.type = "theta"
theta1 <- rnorm(length(fred$repred))
theta2 <- rnorm(length(fred$repred))
! is.same(theta1, theta2, fred)
theta2 <- theta1 + t(cmat) %*% rnorm(nrow(cmat))
theta2 <- as.numeric(theta2)
is.same(theta1, theta2, fred)
##### parm.type = "phi"
rm(list = ls())
data(echinacea)
cmat <- constancy(echinacea, parm.type = "phi")
nrow(cmat) == 0
data(test1)
fred <- asterdata(test1,
vars = c("m1", "m2", "m3", "n1", "n2", "b1", "p1", "z1"),
pred = c(0, 0, 0, 1, 1, 2, 3, 6), group = c(0, 1, 2, 0, 4, 0, 0, 0),
code = c(1, 1, 1, 2, 2, 3, 4, 5),
families = list(fam.multinomial(3), "normal.location.scale",
"bernoulli", "poisson", "zero.truncated.poisson"))
is.validasterdata(fred)
cmat <- constancy(fred, parm.type = "phi")
multinomial.ind <- sort(unique(fred$redata$id[fred$recode == 1]))
mycmat <- matrix(NA, nrow = length(multinomial.ind), ncol = nrow(fred$redata))
for (ind in seq(along = multinomial.ind))
mycmat[ind, ] <- as.numeric(fred$redata$id == ind & fred$recode == 1)
mycmat <- mycmat[rev(multinomial.ind), ]
identical(cmat, Matrix(mycmat))
# (from the help page for the R function asterdata) "note that the
# conditional canonical parameter vector is always used here [for delta and
# redelta], regardless of whether conditional or unconditional canonical
# affine submodels are to be used
sally <- fred
y <- sally$redata[[sally$response.name]]
v <- as.character(sally$redata$varb)
ind <- sally$redata$id
ind.save <- numeric(0)
cmat.extra <- NULL
is.zero <- rep(FALSE, length(y))
i.buddy <- sally$regroup
i.buddy[i.buddy == 0] <- NA
i.buddy.buddy <- sally$regroup[i.buddy]
i.buddy.buddy[i.buddy.buddy == 0] <- NA
y.buddy <- y[i.buddy]
y.buddy.buddy <- y[i.buddy.buddy]
i.pred <- sally$repred
i.pred[i.pred == 0] <- NA
y.pred <- y[i.pred]
y.pred[is.na(y.pred)] <- 1
# find an individual for whom to constrain m1 == 0
ok <- y == 0 & v == "m1"
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m2 == 0
ok <- y == 0 & v == "m2" & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m3 == 0
ok <- y == 0 & v == "m3" & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m1 == 0 and m2 == 0
ok <- y != 0 & y.buddy == 0 & y.buddy.buddy == 0 & (! (ind %in% ind.save))
ok[is.na(ok)] <- FALSE
if (any(ok)) {
k <- seq(along = ok)[ok]
k <- k[1]
j <- i.buddy[k]
i <- i.buddy.buddy[k]
sally$redelta[i] <- (-1)
sally$redelta[j] <- (-1)
is.zero[i] <- TRUE
is.zero[j] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
foo <- rep(0, length(y))
foo[j] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m1 == 0 and m3 == 0
ok <- y == 0 & y.buddy != 0 & y.buddy.buddy == 0 & (! (ind %in% ind.save))
ok[is.na(ok)] <- FALSE
if (any(ok)) {
k <- seq(along = ok)[ok]
k <- k[1]
j <- i.buddy[k]
i <- i.buddy.buddy[k]
sally$redelta[i] <- (-1)
sally$redelta[k] <- (-1)
is.zero[i] <- TRUE
is.zero[k] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
foo <- rep(0, length(y))
foo[k] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain m2 == 0 and m3 == 0
ok <- y == 0 & y.buddy == 0 & y.buddy.buddy != 0 & (! (ind %in% ind.save))
ok[is.na(ok)] <- FALSE
if (any(ok)) {
k <- seq(along = ok)[ok]
k <- k[1]
j <- i.buddy[k]
i <- i.buddy.buddy[k]
sally$redelta[j] <- (-1)
sally$redelta[k] <- (-1)
is.zero[j] <- TRUE
is.zero[k] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[j] <- 1
cmat.extra <- rbind(cmat.extra, foo)
foo <- rep(0, length(y))
foo[k] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain b1 == 0
ok <- y == 0 & v == "b1" & y.pred > 0 & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain b1 == 1
ok <- y == 1 & v == "b1" & y.pred > 0 & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- 1
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
foo[i.pred[i]] <- (-1)
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain p1 == 0
ok <- y == 0 & v == "p1" & y.pred > 0 & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
is.zero[i] <- TRUE
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
cmat.extra <- rbind(cmat.extra, foo)
}
# find another individual for whom to constrain z1 == 1
ok <- y == 1 & v == "z1" & y.pred > 0 & (! (ind %in% ind.save))
if (any(ok)) {
i <- seq(along = ok)[ok]
i <- i[1]
sally$redelta[i] <- (-1)
ind.save <- c(ind.save, ind[i])
foo <- rep(0, length(y))
foo[i] <- 1
foo[i.pred[i]] <- (-1)
cmat.extra <- rbind(cmat.extra, foo)
}
is.validasterdata(sally)
anc.is.zero <- rep(FALSE, length(y))
repeat {
anc.is.zero.save <- anc.is.zero
anc.is.zero <- is.zero[i.pred] | anc.is.zero[i.pred]
anc.is.zero[is.na(anc.is.zero)] <- FALSE
if (identical(anc.is.zero, anc.is.zero.save)) break
}
cmat.extra.extra <- matrix(0, sum(anc.is.zero), length(y))
j <- seq(along = anc.is.zero)[anc.is.zero]
for (i in 1:nrow(cmat.extra.extra)) {
cmat.extra.extra[i, j[i]] <- 1
}
dimnames(cmat.extra) <- NULL
cmat.sally <- constancy(sally, parm.type = "phi")
mycmat.sally <- rbind(cmat, cmat.extra, cmat.extra.extra)
cmat.sally.char <- apply(cmat.sally, 1, paste, collapse = "*")
mycmat.sally.char <- apply(mycmat.sally, 1, paste, collapse = "*")
identical(sort(cmat.sally.char), sort(mycmat.sally.char))
##### is.same parm.type = "phi"
phi1 <- rnorm(length(fred$repred))
phi2 <- rnorm(length(fred$repred))
! is.same(phi1, phi2, fred, parm.type = "phi")
phi2 <- phi1 + t(cmat) %*% rnorm(nrow(cmat))
phi2 <- as.numeric(phi2)
is.same(phi1, phi2, fred, parm.type = "phi")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.