We are dealing with the same data set as last session, but now in a multifactorial way. Specifically, we are asking, does the choice of a genitive construction (of vs. s) vary as a function of
POR_LENGTH
), but
how the length of the possessor compares to the length of the possessum
(PUM_LENGTH
); since such a comparison variable doesn’t
exist yet in our data set, we need to create it first;POR_ANIMACY
: animate vs. collective
vs. inanimate vs. locative
vs. temporal);SPEAKER
: nns vs. ns);rm(list=ls(all.names=TRUE))
library(car); library(effects)
source("helpers/202_R2.r"); source("helpers/202_C.score.r") # load small helper functions
summary(d <- read.delim( # summarize d, the result of loading
file="inputfiles/202_04-05_GENs.csv", # this file
stringsAsFactors=TRUE)) # change categorical variables into factors
## CASE GENITIVE SPEAKER MODALITY POR_LENGTH
## Min. : 2 of:2720 nns:2666 spoken :1685 Min. : 1.00
## 1st Qu.:1006 s : 880 ns : 934 written:1915 1st Qu.: 8.00
## Median :2018 Median : 11.00
## Mean :2012 Mean : 14.58
## 3rd Qu.:3017 3rd Qu.: 17.00
## Max. :4040 Max. :204.00
## PUM_LENGTH POR_ANIMACY POR_FINAL_SIB POR_DEF
## Min. : 2.00 animate : 920 absent :2721 definite :2349
## 1st Qu.: 6.00 collective: 607 present: 879 indefinite:1251
## Median : 9.00 inanimate :1671
## Mean : 10.35 locative : 243
## 3rd Qu.: 13.00 temporal : 159
## Max. :109.00
Let’s already compute the baselines for what will be the response
variable, GENITIVE
:
(baselines <- c(
"baseline 1"=max( # make baselines[1] the highest
prop.table( # proportion in the
table(d$GENITIVE))), # frequency table of the response
"baseline 2"=sum( # make baselines[2] the sum of the
prop.table( # proportions in the
table(d$GENITIVE))^2))) # frequency table of the response squared
## baseline 1 baseline 2
## 0.7555556 0.6306173
Let’s compute the deviance of the null model:
m.00 <- glm(GENITIVE ~ 1, family=binomial, data=d, na.action=na.exclude)
deviance(m.00)
## [1] 4004.273
sum(residuals(m.00)^2)
## [1] 4004.273
Some exploration of the relevant variables:
# the predictor(s)/response on its/their own
hist(d$LEN_PORmPUM_LOG <- log2(d$POR_LENGTH)-log2(d$PUM_LENGTH), main="")
table(d$POR_ANIMACY)
##
## animate collective inanimate locative temporal
## 920 607 1671 243 159
table(d$SPEAKER)
##
## nns ns
## 2666 934
# the predictor(s) w/ the response
spineplot(d$GENITIVE ~ d$LEN_PORmPUM_LOG)
table(d$POR_ANIMACY, d$GENITIVE)
##
## of s
## animate 370 550
## collective 408 199
## inanimate 1638 33
## locative 199 44
## temporal 105 54
table(d$SPEAKER, d$GENITIVE)
##
## of s
## nns 2024 642
## ns 696 238
ftable(d$POR_ANIMACY, d$SPEAKER, d$GENITIVE)
## of s
##
## animate nns 272 406
## ns 98 144
## collective nns 314 138
## ns 94 61
## inanimate nns 1250 27
## ns 388 6
## locative nns 117 34
## ns 82 10
## temporal nns 71 37
## ns 34 17
Let’s fit our initial regression model:
summary(m.01 <- glm( # make/summarize the gen. linear model m.01:
GENITIVE ~ 1 + # GENITIVE ~ an overall intercept (1)
LEN_PORmPUM_LOG*POR_ANIMACY*SPEAKER, # & these predictors & their interaction
family=binomial, # resp = binary
data=d, # those vars are in d
na.action=na.exclude)) # skip cases with NA/missing data
##
## Call:
## glm(formula = GENITIVE ~ 1 + LEN_PORmPUM_LOG * POR_ANIMACY *
## SPEAKER, family = binomial, data = d, na.action = na.exclude)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept) 0.65632 0.09135 7.184
## LEN_PORmPUM_LOG -0.70601 0.08154 -8.659
## POR_ANIMACYcollective -1.77888 0.16150 -11.015
## POR_ANIMACYinanimate -4.32698 0.21686 -19.953
## POR_ANIMACYlocative -2.30616 0.27227 -8.470
## POR_ANIMACYtemporal -1.32138 0.22536 -5.863
## SPEAKERns -0.08278 0.17204 -0.481
## LEN_PORmPUM_LOG:POR_ANIMACYcollective -0.46680 0.15054 -3.101
## LEN_PORmPUM_LOG:POR_ANIMACYinanimate 0.32099 0.17729 1.811
## LEN_PORmPUM_LOG:POR_ANIMACYlocative -0.29249 0.25885 -1.130
## LEN_PORmPUM_LOG:POR_ANIMACYtemporal 0.44522 0.18375 2.423
## LEN_PORmPUM_LOG:SPEAKERns 0.14245 0.16001 0.890
## POR_ANIMACYcollective:SPEAKERns 0.79493 0.29353 2.708
## POR_ANIMACYinanimate:SPEAKERns -0.28854 0.51213 -0.563
## POR_ANIMACYlocative:SPEAKERns -0.50011 0.49785 -1.005
## POR_ANIMACYtemporal:SPEAKERns 0.16161 0.41275 0.392
## LEN_PORmPUM_LOG:POR_ANIMACYcollective:SPEAKERns -0.14283 0.28943 -0.493
## LEN_PORmPUM_LOG:POR_ANIMACYinanimate:SPEAKERns -0.65372 0.43153 -1.515
## LEN_PORmPUM_LOG:POR_ANIMACYlocative:SPEAKERns -0.19485 0.50679 -0.384
## LEN_PORmPUM_LOG:POR_ANIMACYtemporal:SPEAKERns -0.53061 0.38091 -1.393
## Pr(>|z|)
## (Intercept) 6.75e-13 ***
## LEN_PORmPUM_LOG < 2e-16 ***
## POR_ANIMACYcollective < 2e-16 ***
## POR_ANIMACYinanimate < 2e-16 ***
## POR_ANIMACYlocative < 2e-16 ***
## POR_ANIMACYtemporal 4.54e-09 ***
## SPEAKERns 0.63039
## LEN_PORmPUM_LOG:POR_ANIMACYcollective 0.00193 **
## LEN_PORmPUM_LOG:POR_ANIMACYinanimate 0.07022 .
## LEN_PORmPUM_LOG:POR_ANIMACYlocative 0.25849
## LEN_PORmPUM_LOG:POR_ANIMACYtemporal 0.01539 *
## LEN_PORmPUM_LOG:SPEAKERns 0.37331
## POR_ANIMACYcollective:SPEAKERns 0.00677 **
## POR_ANIMACYinanimate:SPEAKERns 0.57315
## POR_ANIMACYlocative:SPEAKERns 0.31511
## POR_ANIMACYtemporal:SPEAKERns 0.69538
## LEN_PORmPUM_LOG:POR_ANIMACYcollective:SPEAKERns 0.62166
## LEN_PORmPUM_LOG:POR_ANIMACYinanimate:SPEAKERns 0.12980
## LEN_PORmPUM_LOG:POR_ANIMACYlocative:SPEAKERns 0.70062
## LEN_PORmPUM_LOG:POR_ANIMACYtemporal:SPEAKERns 0.16362
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 4004.3 on 3599 degrees of freedom
## Residual deviance: 2404.3 on 3580 degrees of freedom
## AIC: 2444.3
##
## Number of Fisher Scoring iterations: 7
pchisq( # compute the area under the chi-squared curve
q=m.01$null.deviance-m.01$deviance, # for this chi-squared value: null - res. dev.
df=m.01$df.null-m.01$df.residual, # at this df: null - residual df
lower.tail=FALSE) # only using the right/upper tail/side
## [1] 0
drop1(m.01, # drop each droppable predictor at a time from m.01 &
test="Chisq") # test its significance w/ a LRT
## Single term deletions
##
## Model:
## GENITIVE ~ 1 + LEN_PORmPUM_LOG * POR_ANIMACY * SPEAKER
## Df Deviance AIC LRT Pr(>Chi)
## <none> 2404.3 2444.3
## LEN_PORmPUM_LOG:POR_ANIMACY:SPEAKER 4 2408.0 2440.0 3.7384 0.4426
Let’s fit the 2nd model with that 3-way interaction
LEN_PORmPUM_LOG:POR_ANIMACY:SPEAKER
deleted:
summary(m.02 <- update( # make m.02 an update of
m.01, .~. # m.01, namely all of it (.~.), but then
- LEN_PORmPUM_LOG:POR_ANIMACY:SPEAKER)) # remove this interaction
##
## Call:
## glm(formula = GENITIVE ~ LEN_PORmPUM_LOG + POR_ANIMACY + SPEAKER +
## LEN_PORmPUM_LOG:POR_ANIMACY + LEN_PORmPUM_LOG:SPEAKER + POR_ANIMACY:SPEAKER,
## family = binomial, data = d, na.action = na.exclude)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.63865 0.08956 7.131 9.99e-13 ***
## LEN_PORmPUM_LOG -0.66568 0.07506 -8.869 < 2e-16 ***
## POR_ANIMACYcollective -1.75874 0.15934 -11.038 < 2e-16 ***
## POR_ANIMACYinanimate -4.30116 0.21500 -20.006 < 2e-16 ***
## POR_ANIMACYlocative -2.29342 0.26298 -8.721 < 2e-16 ***
## POR_ANIMACYtemporal -1.31543 0.22698 -5.795 6.82e-09 ***
## SPEAKERns -0.01779 0.16826 -0.106 0.9158
## LEN_PORmPUM_LOG:POR_ANIMACYcollective -0.50145 0.12853 -3.901 9.56e-05 ***
## LEN_PORmPUM_LOG:POR_ANIMACYinanimate 0.20466 0.15951 1.283 0.1995
## LEN_PORmPUM_LOG:POR_ANIMACYlocative -0.34103 0.22263 -1.532 0.1256
## LEN_PORmPUM_LOG:POR_ANIMACYtemporal 0.31318 0.16011 1.956 0.0505 .
## LEN_PORmPUM_LOG:SPEAKERns -0.02120 0.11639 -0.182 0.8555
## POR_ANIMACYcollective:SPEAKERns 0.72665 0.29266 2.483 0.0130 *
## POR_ANIMACYinanimate:SPEAKERns -0.30015 0.48555 -0.618 0.5365
## POR_ANIMACYlocative:SPEAKERns -0.55095 0.45355 -1.215 0.2245
## POR_ANIMACYtemporal:SPEAKERns 0.08259 0.40494 0.204 0.8384
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 4004.3 on 3599 degrees of freedom
## Residual deviance: 2408.0 on 3584 degrees of freedom
## AIC: 2440
##
## Number of Fisher Scoring iterations: 7
anova(m.01, m.02, # compare m.01 to m.02
test="Chisq") # using a LRT
## Analysis of Deviance Table
##
## Model 1: GENITIVE ~ 1 + LEN_PORmPUM_LOG * POR_ANIMACY * SPEAKER
## Model 2: GENITIVE ~ LEN_PORmPUM_LOG + POR_ANIMACY + SPEAKER + LEN_PORmPUM_LOG:POR_ANIMACY +
## LEN_PORmPUM_LOG:SPEAKER + POR_ANIMACY:SPEAKER
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 3580 2404.3
## 2 3584 2408.0 -4 -3.7384 0.4426
drop1(m.02, # drop each droppable predictor at a time from m.02 &
test="Chisq") # test its significance w/ a LRT
## Single term deletions
##
## Model:
## GENITIVE ~ LEN_PORmPUM_LOG + POR_ANIMACY + SPEAKER + LEN_PORmPUM_LOG:POR_ANIMACY +
## LEN_PORmPUM_LOG:SPEAKER + POR_ANIMACY:SPEAKER
## Df Deviance AIC LRT Pr(>Chi)
## <none> 2408.0 2440.0
## LEN_PORmPUM_LOG:POR_ANIMACY 4 2439.8 2463.8 31.766 2.136e-06 ***
## LEN_PORmPUM_LOG:SPEAKER 1 2408.0 2438.0 0.033 0.85530
## POR_ANIMACY:SPEAKER 4 2418.9 2442.9 10.880 0.02794 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Let’s fit the 3rd model with that interaction
LEN_PORmPUM_LOG:SPEAKER
deleted:
summary(m.03 <- update( # make m.03 an update of
m.02, .~. # m.02, namely all of it (.~.), but then
- LEN_PORmPUM_LOG:SPEAKER)) # remove this interaction
##
## Call:
## glm(formula = GENITIVE ~ LEN_PORmPUM_LOG + POR_ANIMACY + SPEAKER +
## LEN_PORmPUM_LOG:POR_ANIMACY + POR_ANIMACY:SPEAKER, family = binomial,
## data = d, na.action = na.exclude)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.64082 0.08887 7.211 5.57e-13 ***
## LEN_PORmPUM_LOG -0.67066 0.06999 -9.582 < 2e-16 ***
## POR_ANIMACYcollective -1.76343 0.15747 -11.198 < 2e-16 ***
## POR_ANIMACYinanimate -4.30316 0.21475 -20.038 < 2e-16 ***
## POR_ANIMACYlocative -2.29898 0.26155 -8.790 < 2e-16 ***
## POR_ANIMACYtemporal -1.31845 0.22659 -5.819 5.93e-09 ***
## SPEAKERns -0.02626 0.16145 -0.163 0.87078
## LEN_PORmPUM_LOG:POR_ANIMACYcollective -0.50226 0.12847 -3.910 9.25e-05 ***
## LEN_PORmPUM_LOG:POR_ANIMACYinanimate 0.20638 0.15920 1.296 0.19486
## LEN_PORmPUM_LOG:POR_ANIMACYlocative -0.34169 0.22268 -1.534 0.12492
## LEN_PORmPUM_LOG:POR_ANIMACYtemporal 0.31237 0.16007 1.951 0.05100 .
## POR_ANIMACYcollective:SPEAKERns 0.73847 0.28489 2.592 0.00954 **
## POR_ANIMACYinanimate:SPEAKERns -0.29379 0.48413 -0.607 0.54396
## POR_ANIMACYlocative:SPEAKERns -0.53295 0.44234 -1.205 0.22827
## POR_ANIMACYtemporal:SPEAKERns 0.08969 0.40281 0.223 0.82380
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 4004.3 on 3599 degrees of freedom
## Residual deviance: 2408.0 on 3585 degrees of freedom
## AIC: 2438
##
## Number of Fisher Scoring iterations: 7
anova(m.02, m.03, # compare m.02 to m.03
test="Chisq") # using a LRT
## Analysis of Deviance Table
##
## Model 1: GENITIVE ~ LEN_PORmPUM_LOG + POR_ANIMACY + SPEAKER + LEN_PORmPUM_LOG:POR_ANIMACY +
## LEN_PORmPUM_LOG:SPEAKER + POR_ANIMACY:SPEAKER
## Model 2: GENITIVE ~ LEN_PORmPUM_LOG + POR_ANIMACY + SPEAKER + LEN_PORmPUM_LOG:POR_ANIMACY +
## POR_ANIMACY:SPEAKER
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 3584 2408
## 2 3585 2408 -1 -0.033257 0.8553
drop1(m.03, # drop each droppable predictor at a time from m.03 &
test="Chisq") # test its significance w/ a LRT
## Single term deletions
##
## Model:
## GENITIVE ~ LEN_PORmPUM_LOG + POR_ANIMACY + SPEAKER + LEN_PORmPUM_LOG:POR_ANIMACY +
## POR_ANIMACY:SPEAKER
## Df Deviance AIC LRT Pr(>Chi)
## <none> 2408.0 2438.0
## LEN_PORmPUM_LOG:POR_ANIMACY 4 2440.0 2462.0 31.930 1.977e-06 ***
## POR_ANIMACY:SPEAKER 4 2419.1 2441.1 11.066 0.02583 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Confint(m.final <- m.03); rm(m.03); invisible(gc())
## Estimate 2.5 % 97.5 %
## (Intercept) 0.64081690 0.468616712 0.81724071
## LEN_PORmPUM_LOG -0.67065848 -0.810966407 -0.53635908
## POR_ANIMACYcollective -1.76342664 -2.077305396 -1.45947457
## POR_ANIMACYinanimate -4.30316052 -4.744994412 -3.90029037
## POR_ANIMACYlocative -2.29898489 -2.838931650 -1.80923537
## POR_ANIMACYtemporal -1.31844526 -1.772188001 -0.88148760
## SPEAKERns -0.02626334 -0.341841030 0.29159142
## LEN_PORmPUM_LOG:POR_ANIMACYcollective -0.50225743 -0.759750437 -0.25528062
## LEN_PORmPUM_LOG:POR_ANIMACYinanimate 0.20637789 -0.102927878 0.52190369
## LEN_PORmPUM_LOG:POR_ANIMACYlocative -0.34169459 -0.798758018 0.07811273
## LEN_PORmPUM_LOG:POR_ANIMACYtemporal 0.31237087 -0.008354092 0.62161919
## POR_ANIMACYcollective:SPEAKERns 0.73846679 0.180371066 1.29820145
## POR_ANIMACYinanimate:SPEAKERns -0.29379122 -1.331890328 0.59609089
## POR_ANIMACYlocative:SPEAKERns -0.53294681 -1.434208534 0.31251344
## POR_ANIMACYtemporal:SPEAKERns 0.08968869 -0.708937514 0.87541391
Let’s compute the overall significance test for this model:
anova(m.00, m.final, # compare m.00 to m.final
test="Chisq") # using a LRT
## Analysis of Deviance Table
##
## Model 1: GENITIVE ~ 1
## Model 2: GENITIVE ~ LEN_PORmPUM_LOG + POR_ANIMACY + SPEAKER + LEN_PORmPUM_LOG:POR_ANIMACY +
## POR_ANIMACY:SPEAKER
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 3599 4004.3
## 2 3585 2408.0 14 1596.2 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
pchisq( # compute the area under the chi-squared curve
q=1596.2, # for this chi-squared value
df=14, # at 14 df
lower.tail=FALSE) # only using the right/upper tail/side
## [1] 0
Let’s make ‘predictions’ and evaluate them:
d$PREDS.NUM.2 <- predict( # make d$PREDS.NUM.2 the result of predicting
m.final, # from m.final
type="response") # predicted probabilities of "s"
# if you don't say type="response", predict gives you log odds
d$PREDS.CAT <- factor( # make d$PREDS.CAT the result of checking
ifelse(d$PREDS.NUM.2>=0.5, # if the predicted prob. of "s" is >=0.5
levels(d$GENITIVE)[2], # if yes, predict "s"
levels(d$GENITIVE)[1])) # otherwise, predict "of"
(c.m <- table( # confusion matrix: cross-tabulate
"OBS" =d$GENITIVE, # observed genitives in the rows
"PREDS"=d$PREDS.CAT)) # predicted orders in the columns
## PREDS
## OBS of s
## of 2454 266
## s 310 570
c( # evaluate the confusion matrix
"Prec. for s" =c.m[ "s", "s"] / sum(c.m[ , "s"]),
"Acc./rec. for s" =c.m[ "s", "s"] / sum(c.m[ "s", ]),
"Prec. for of" =c.m["of","of"] / sum(c.m[ ,"of"]),
"Acc./rec. for of"=c.m["of","of"] / sum(c.m["of", ]),
"Acc. (overall)" =mean(d$GENITIVE==d$PREDS.CAT))
## Prec. for s Acc./rec. for s Prec. for of Acc./rec. for of
## 0.6818182 0.6477273 0.8878437 0.9022059
## Acc. (overall)
## 0.8400000
c("Nagelkerke's R2"=R2(m.final),
"McFadden's R2" =(m.00$deviance-m.final$deviance) / m.00$deviance,
"C" =C.score(m.final)) # R-squared values & C
## Nagelkerke's R2 McFadden's R2 C
## 0.5335965 0.3986328 0.8986036
This looks like a pretty decent model, not bad at all (esp. the C-score).
LEN_PORmPUM_LOG:POR_ANIMACY
Let’s visualize the nature of the effect of
LEN_PORmPUM_LOG:POR_ANIMACY
based on the predictions:
(lean.d <- data.frame( # make lean.d a data frame of
lean <- effect( # the effect
"LEN_PORmPUM_LOG:POR_ANIMACY", # of LEN_PORmPUM_LOG:POR_ANIMACY
xlevels=list(LEN_PORmPUM_LOG=-4:4), # w/ these values for LEN_PORmPUM_LOG
m.final))) # in m.final
## LEN_PORmPUM_LOG POR_ANIMACY fit se lower upper
## 1 -4 animate 0.964995167 0.010732807 0.9366654268 0.980911180
## 2 -3 animate 0.933762692 0.015464168 0.8962219877 0.958354439
## 3 -2 animate 0.878181385 0.019688827 0.8340490730 0.911818185
## 4 -1 animate 0.786618460 0.020577239 0.7435273242 0.824181653
## 5 0 animate 0.653396580 0.017519047 0.6183110604 0.686890163
## 6 1 animate 0.490837160 0.020513568 0.4507767242 0.531015622
## 7 2 animate 0.330192632 0.029080480 0.2758733167 0.389455090
## 8 3 animate 0.201334835 0.031196146 0.1470135317 0.269388791
## 9 4 animate 0.114190794 0.026335613 0.0718292027 0.176777133
## 10 -4 collective 0.977108479 0.009125137 0.9504633183 0.989578685
## 11 -3 collective 0.929623169 0.019952030 0.8790212514 0.960022358
## 12 -2 collective 0.803450188 0.032664294 0.7315682184 0.859772887
## 13 -1 collective 0.558501674 0.030970559 0.4972271761 0.618044933
## 14 0 collective 0.281338372 0.022128739 0.2400611313 0.326662174
## 15 1 collective 0.108056512 0.017076640 0.0788544432 0.146354725
## 16 2 collective 0.036135870 0.009475954 0.0215225418 0.060062271
## 17 3 collective 0.011468910 0.004239852 0.0055436094 0.023577327
## 18 4 collective 0.003577539 0.001705505 0.0014037321 0.009087051
## 19 -4 inanimate 0.131443260 0.069510582 0.0438729443 0.332938978
## 20 -3 inanimate 0.086864232 0.037608215 0.0361996368 0.194153942
## 21 -2 inanimate 0.056422056 0.018427345 0.0294486514 0.105418163
## 22 -1 inanimate 0.036225313 0.008239215 0.0231206688 0.056329289
## 23 0 inanimate 0.023081315 0.004063324 0.0163254197 0.032540495
## 24 1 inanimate 0.014634072 0.003229110 0.0094845324 0.022515951
## 25 2 inanimate 0.009249061 0.003021352 0.0048681010 0.017503241
## 26 3 inanimate 0.005833881 0.002646221 0.0023938177 0.014147422
## 27 4 inanimate 0.003675066 0.002161627 0.0011583720 0.011596083
## 28 -4 locative 0.904318818 0.065050659 0.6840949593 0.976331696
## 29 -3 locative 0.774484239 0.095877338 0.5393933482 0.909678349
## 30 -2 locative 0.555138390 0.087955205 0.3830574676 0.714940059
## 31 -1 locative 0.311975694 0.043846419 0.2330327080 0.403589135
## 32 0 locative 0.141455667 0.026043363 0.0976551339 0.200535737
## 33 1 locative 0.056486712 0.019914540 0.0279778871 0.110735922
## 34 2 locative 0.021290829 0.011835875 0.0070950857 0.062112445
## 35 3 locative 0.007842601 0.006002145 0.0017399124 0.034608204
## 36 4 locative 0.002864010 0.002793417 0.0004221157 0.019161222
## 37 -4 temporal 0.683948493 0.127825282 0.4044341600 0.873357610
## 38 -3 temporal 0.601972295 0.109156405 0.3824363698 0.786943563
## 39 -2 temporal 0.513847009 0.081662166 0.3577119523 0.667325461
## 40 -1 temporal 0.424852275 0.053325703 0.3250602122 0.531170088
## 41 0 temporal 0.340476161 0.038786244 0.2689980630 0.420033935
## 42 1 temporal 0.265132480 0.045062208 0.1865229243 0.362123903
## 43 2 temporal 0.201370889 0.055382698 0.1137786495 0.331195140
## 44 3 temporal 0.149817159 0.060437310 0.0650079736 0.308734224
## 45 4 temporal 0.109649779 0.059635675 0.0358613321 0.289652708
plot(lean, # plot the effect of LEN_PORmPUM_LOG:POR_ANIMACY
type="response", # but plot predicted probabilities
ylim=c(0, 1), # ylim: the whole range of possible probabilities
grid=TRUE) # & w/ a grid