Exam1.1 {StroupGLMM} | R Documentation |
Example1.1 from Generalized Linear Mixed Models: Modern Concepts, Methods and Applications by Walter W. Stroup(p-5)
Description
Exam1.1 is used for inspecting probability distribution and to define a plausible process through linear models and generalized linear models.
Author(s)
Muhammad Yaseen (myaseen208@gmail.com)
Adeela Munawar (adeela.uaf@gmail.com)
References
Stroup, W. W. (2012). Generalized Linear Mixed Models: Modern Concepts, Methods and Applications. CRC Press.
See Also
Examples
#-------------------------------------------------------------
## Linear Model and results discussed in Article 1.2.1 after Table1.1
#-------------------------------------------------------------
data(Table1.1)
Exam1.1.lm1 <-
lm(
formula = y/Nx~x
, data = Table1.1
# , subset
# , weights
# , na.action
, method = "qr"
, model = TRUE
, x = FALSE
, y = FALSE
, qr = TRUE
, singular.ok = TRUE
, contrasts = NULL
# , offset
# , ...
)
summary(Exam1.1.lm1 )
#-------------------------------------------------------------
## GLM fitting with logit link (family=binomial)
#-------------------------------------------------------------
Exam1.1.glm1 <-
glm(
formula = y/Nx~x
, family = binomial(link = "logit")
, data = Table1.1
, weights = NULL
# , subset
# , na.action
, start = NULL
# , etastart
# , mustart
# , offset
# , control = list(...)
# , model = TRUE
, method = "glm.fit"
, x = FALSE
, y = TRUE
, contrasts = NULL
# , ...
)
## this glm() function gives warning message of non-integer success
summary(Exam1.1.glm1)
#-------------------------------------------------------------
## GLM fitting with logit link (family=Quasibinomial)
#-------------------------------------------------------------
Exam1.1.glm2 <-
glm(
formula = y/Nx~x
, family = quasibinomial(link = "logit")
, data = Table1.1
, weights = NULL
# , subset
# , na.action
, start = NULL
# , etastart
# , mustart
# , offset
# , control = list(...)
# , model = TRUE
, method = "glm.fit"
, x = FALSE
, y = TRUE
, contrasts = NULL
# , ...
)
## problem of "warning message of non-integer success" is overome by using quasibinomial family
summary(Exam1.1.glm2)
#-------------------------------------------------------------
## GLM fitting with survey package(produces same result as using quasi binomial family in glm)
#-------------------------------------------------------------
library(survey)
design <-
svydesign(
ids = ~1
, probs = NULL
, strata = NULL
, variables = NULL
, fpc = NULL
, data = Table1.1
# , nest = FALSE
# , check.strata = !nest
, weights = NULL
, pps = FALSE
# , ...
)
Exam1.1.svyglm <-
svyglm(
formula = y/Nx~x
, design = design
# , ...
, family = quasibinomial(link="logit")
)
# summary(Exam1.1.svyglm)
#-------------------------------------------------------------
## Figure 1.1
#-------------------------------------------------------------
Newdata <-
data.frame(
Table1.1
, LM = Exam1.1.lm1$fitted.values
, GLM = Exam1.1.glm1$fitted.values
, QB = Exam1.1.glm2$fitted.values
, SM = Exam1.1.svyglm$fitted.values
)
#-------------------------------------------------------------
## One Method to plot Figure1.1
#-------------------------------------------------------------
library(ggplot2)
Figure1.1 <-
ggplot(
data = Newdata
, mapping = aes(x=x,y=y/Nx)
) +
geom_point (
mapping = aes(colour="black")
) +
geom_point (
data = Newdata
, mapping = aes(x=x,y=LM,colour="blue"),shape=2
) +
geom_line(
data = Newdata
, mapping = aes(x=x,y=LM,colour="blue")
) +
geom_point (
data = Newdata
, mapping = aes(x=x,y=GLM,colour="red"),shape=3
) +
geom_smooth (
data = Newdata
, mapping = aes(x=x,y=GLM,colour="red")
, stat = "smooth"
) +
theme_bw() +
scale_colour_manual (
values=c("black","blue","red"),
labels=c("observed","LM","GLM")
) +
guides (
colour = guide_legend(title="Plot")
) +
labs (
title = "Linear Model vs Logistic Model"
) +
labs (
y = "p"
)
print(Figure1.1)
#-------------------------------------------------------------
## Another way to plot Figure 1.1
#-------------------------------------------------------------
newdata <-
data.frame(
P = c(
Table1.1$y/Table1.1$Nx
, Exam1.1.lm1$fitted.values
, Exam1.1.glm1$fitted.values
)
, X = rep(Table1.1$x, 3)
, group = rep(c('Obs','LM','GLM'), each = length(Table1.1$x))
)
Figure1.1 <-
ggplot(
data = newdata
, mapping = aes(x = X , y = P)
) +
geom_point(
mapping = aes(x = X , y = P, colour = group , shape=group)
) +
geom_smooth(
data = subset(x = newdata, group == "LM")
, mapping = aes(x=X,y=P)
, col = "green"
) +
geom_smooth(
data = subset(x = newdata, group=="GLM")
, mapping = aes(x = X , y = P)
, col = "red"
) +
theme_bw() +
labs(
title = "Linear Model vs Logistic Model"
)
print(Figure1.1)
#-------------------------------------------------------------
## Correlation among p and fitted values using Gaussian link
#-------------------------------------------------------------
(lmCor <-
cor(
Table1.1$y/Table1.1$Nx,Exam1.1.lm1$fitted.values)
)
#-------------------------------------------------------------
## Correlation among p and fitted values using quasi binomial link
#-------------------------------------------------------------
(glmCor <-
cor(
Table1.1$y/Table1.1$Nx,Exam1.1.glm1$fitted.values)
)
[Package StroupGLMM version 0.1.0 Index]