# Example 1: fit a multinomial logit model to Edgar Anderson's iris data
data(iris)
fit = vglm(Species ~ ., multinomial, iris)
coef(fit, matrix=TRUE)
# Example 2a: a simple example
ymat = t(rmultinom(10, size = 20, prob=c(0.1,0.2,0.8))) # Counts
fit = vglm(ymat ~ 1, multinomial)
head(fitted(fit)) # Proportions
fit@prior.weights # Not recommended for extraction of prior weights
weights(fit, type="prior", matrix=FALSE) # The better method
fit@y # Sample proportions
constraints(fit) # Constraint matrices
# Example 2b: Different reference level used as the baseline
fit2 = vglm(ymat ~ 1, multinomial(refLevel=2))
coef(fit2, matrix=TRUE)
coef(fit , matrix=TRUE) # Easy to reconcile this output with fit2
# Example 2c: Different input to Example 2a but same result
w = apply(ymat, 1, sum) # Prior weights
yprop = ymat / w # Sample proportions
fitprop = vglm(yprop ~ 1, multinomial, weights=w)
head(fitted(fitprop)) # Proportions
weights(fitprop, type="prior", matrix=FALSE)
fitprop@y # Same as the input
# Example 3: The response is a factor.
nn = 10
dframe3 = data.frame(yfactor = gl(3, nn, labels=c("Control","Trt1","Trt2")),
x = runif(3 * nn))
myrefLevel = with(dframe3, yfactor[12])
fit3a = vglm(yfactor ~ x, multinomial(refLevel=myrefLevel), data=dframe3)
fit3b = vglm(yfactor ~ x, multinomial(refLevel=2), data=dframe3)
coef(fit3a, matrix=TRUE) # "Treatment1" is the reference level
coef(fit3b, matrix=TRUE) # "Treatment1" is the reference level
margeff(fit3b)
# Example 4: Fit a rank-1 stereotype model
data(car.all)
fit4 = rrvglm(Country ~ Width + Height + HP, multinomial, car.all, Rank=1)
coef(fit4) # Contains the C matrix
constraints(fit4)$HP # The A matrix
coef(fit4, matrix=TRUE) # The B matrix
Coef(fit4)@C # The C matrix
ccoef(fit4) # Better to get the C matrix this way
Coef(fit4)@A # The A matrix
svd(coef(fit4, matrix=TRUE)[-1,])$d # This has rank 1; = C %*% t(A)
# Example 5: The use of the xij argument (aka conditional logit model)
set.seed(111)
nn = 100 # Number of people who travel to work
M = 3 # There are M+1 models of transport to go to work
ymat = matrix(0, nn, M+1)
ymat[cbind(1:nn, sample(x=M+1, size=nn, replace=TRUE))] = 1
dimnames(ymat) = list(NULL, c("bus","train","car","walk"))
gotowork = data.frame(cost.bus = runif(nn), time.bus = runif(nn),
cost.train= runif(nn), time.train= runif(nn),
cost.car = runif(nn), time.car = runif(nn),
cost.walk = runif(nn), time.walk = runif(nn))
gotowork = round(gotowork, dig=2) # For convenience
gotowork = transform(gotowork,
Cost.bus = cost.bus - cost.walk,
Cost.car = cost.car - cost.walk,
Cost.train = cost.train - cost.walk,
Cost = cost.train - cost.walk, # for labelling
Time.bus = time.bus - time.walk,
Time.car = time.car - time.walk,
Time.train = time.train - time.walk,
Time = time.train - time.walk) # for labelling
fit = vglm(ymat ~ Cost + Time,
multinomial(parall=TRUE ~ Cost + Time - 1),
xij = list(Cost ~ Cost.bus + Cost.train + Cost.car,
Time ~ Time.bus + Time.train + Time.car),
form2 = ~ Cost + Cost.bus + Cost.train + Cost.car +
Time + Time.bus + Time.train + Time.car,
data=gotowork, trace=TRUE)
head(model.matrix(fit, type="lm")) # LM model matrix
head(model.matrix(fit, type="vlm")) # Big VLM model matrix
coef(fit)
coef(fit, matrix=TRUE)
constraints(fit)
summary(fit)
max(abs(predict(fit)-predict(fit, new=gotowork))) # Should be 0
Run the code above in your browser using DataLab