Page 1 of 1

trouble getting reliable parameter estimates multistate mode

PostPosted: Thu Jul 01, 2021 9:53 pm
by bmarcek
Hello,
I am trying to develop a multistate model and I'm having trouble getting reliable parameter estimates. My data consist of > 500 individuals and 90 occasions. My data contain 8 spatial strata. Because I am working in a river system and the strata are linear (D, E, F, etc), fish cannot move from D to F without passing through E. Therefore, I fixed Psi for non-adjacent strata (e.g., D to F) to 0. There is one strata (B) which has few observations and no direct connection to any of the other strata where fish were detected. When I run the model:

mark(eh_2013_2020_SVC_ch.p,
eh_2013_2020_SVC_ch.ddl,
model.parameters = list(Psi = Psi.stratum,
p = p.dot,
S = S.dot),
output = F,
mlogit0 = T))

I get results that do not make sense (large beta parameter estimates with extremely large SEs or SE = 0).

estimate se lcl ucl
S:(Intercept) 3.4633334 0.0545816 3.3563534 3.5703134
p:(Intercept) 0.0456775 0.0189665 0.0085031 0.0828519
Psi:stratumE:tostratumD 13.8657830 0.0000000 13.8657830 13.8657830
Psi:stratumD:tostratumE -1.0291447 1.7309534 -4.4218133 2.3635240
Psi:stratumF:tostratumE -6.9124482 0.7075077 -8.2991634 -5.5257330
Psi:stratumE:tostratumF -11.6695060 1802.4699000 -3544.5107000 3521.1717000
Psi:stratumG:tostratumF -5.6694632 0.1966658 -6.0549282 -5.2839982
Psi:stratumF:tostratumG -4.9055325 0.2686851 -5.4321553 -4.3789098
Psi:stratumH:tostratumG -4.1884494 0.3188235 -4.8133435 -3.5635553
Psi:stratumG:tostratumH -8.2292857 0.7073396 -9.6156714 -6.8429000
Psi:stratumI:tostratumH -5.6887778 0.5783525 -6.8223486 -4.5552070
Psi:stratumH:tostratumI -5.7972668 0.7083626 -7.1856575 -4.4088762
Psi:stratumJ:tostratumI 12.2386240 387.7882600 -747.8263700 772.3036200
Psi:stratumI:tostratumJ -5.3593008 0.5029328 -6.3450492 -4.3735525
Psi:stratumK:tostratumJ -14.2252830 388.2322800 -775.1605600 746.7100000
Psi:stratumJ:tostratumK 13.1597160 387.7872400 -746.9032900 773.2227200

I have looked through the workshop notes and appendices C and F, as well as various chapters of the Mark book and have not been able to figure out why I cannot get reasonable parameter estimates. Is this a boundary issue, or is something else going on? If anyone has a suggestion for what I might be missing, I would appreciate the help.

Thanks,
Ben


The data processing steps I took are below. This includes the addition of month and season design covariates that I would like to include in future models but were not included in this example.

eh_2013_2020_SVC_ch.p <- process.data(eh_2013_2020_SVC_ch, model = "Multistrata")
str(eh_2013_2020_SVC_ch.p)

# create design data with pim type for Psi = time (constrains the PIM structure
# to be constant in each column (at each occasion))
eh_2013_2020_SVC_ch.ddl <- make.design.data(eh_2013_2020_SVC_ch.p,
parameters = list(Psi = list(pim.type = "time")))

time <- 1:91
month <- c(6:12, rep(1:12, 7))
season <- character(length = length(month))
for(i in 1:length(season)){
if (month[i] > 5 & month[i] < 9)
season[i] <- 'Summer'
if (month[i] > 8 & month[i] < 12)
season[i] <- 'Autumn'
if (month[i] == 12 | month[i] < 3)
season[i] <- 'Winter'
if (month[i] > 2 & month[i] < 6)
season[i] <- 'Spring'
}

month <- factor(month, levels = c('6', '7', '8', '9', '10', '11', '12',
'1', '2', '3', '4', '5'),
labels = c('Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec', 'Jan',
'Feb', 'Mar', 'Apr', 'May'))
season <- as.factor(season)

design_covariates <- data.frame(time = time,
month = month,
season = season)

# merge design covariates with design data for each parameter
eh_2013_2020_SVC_ch.ddl$S <- merge_design.covariates(eh_2013_2020_SVC_ch.ddl$S,
design_covariates)
eh_2013_2020_SVC_ch.ddl$p <- merge_design.covariates(eh_2013_2020_SVC_ch.ddl$p,
design_covariates)
eh_2013_2020_SVC_ch.ddl$Psi <- merge_design.covariates(eh_2013_2020_SVC_ch.ddl$Psi,
design_covariates)

# set Psi to 0 for any transitions that we know cannot occur (e.g., fish cannot
# transition from Y to any other state)
eh_2013_2020_SVC_ch.ddl$Psi
eh_2013_2020_SVC_ch.ddl$Psi$fix <- NA
eh_2013_2020_SVC_ch.ddl$Psi$fix[eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'B' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'D' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'B' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'E' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'B' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'F' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'B' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'G' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'B' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'H' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'B' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'I' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'B' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'J' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'B' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'K' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'D' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'B' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'D' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'F' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'D' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'G' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'D' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'H' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'D' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'I' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'D' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'J' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'D' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'K' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'E' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'B' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'E' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'G' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'E' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'H' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'E' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'I' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'E' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'J' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'E' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'K' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'F' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'B' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'F' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'D' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'F' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'H' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'F' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'I' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'F' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'J' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'F' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'K' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'G' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'B' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'G' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'D' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'G' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'E' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'G' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'I' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'G' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'J' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'G' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'K' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'H' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'B' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'H' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'D' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'H' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'E' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'H' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'F' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'H' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'J' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'H' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'K' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'I' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'B' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'I' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'D' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'I' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'E' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'I' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'F' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'I' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'G' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'I' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'K' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'J' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'B' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'J' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'D' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'J' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'E' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'J' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'F' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'J' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'G' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'J' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'H' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'K' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'B' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'K' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'D' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'K' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'E' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'K' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'F' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'K' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'G' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'K' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'H' |
eh_2013_2020_SVC_ch.ddl$Psi$stratum == 'K' &
eh_2013_2020_SVC_ch.ddl$Psi$tostratum == 'I'] <- 0

# third, create the model formulas by parameter (Psi, p, and S)
Psi.dot <- list(formula = ~1)
Psi.stratum <- list(formula = ~-1 + stratum:tostratum)
Psi.month <- list(formula = ~month)
Psi.season <- list(formula = ~season)


p.dot <- list(formula = ~1)
p.stratum <- list(formula = ~stratum)
p.month <- list(formula = ~month)
p.season <- list(formula = ~season)


S.dot <- list(formula = ~1)
S.stratum <- list(formula = ~stratum)
S.month <- list(formula = ~month)
S.season <- list(formula = ~season)

Re: trouble getting reliable parameter estimates multistate

PostPosted: Fri Aug 06, 2021 5:22 am
by awan
Hi Ben,

I have worked a fair bit with multistate models, but am certainly no expert on the matter. I hope my comments help and otherwise I am sure others can add extra info or correct me.

RE your beta estimates, it could be that these are boundary estimates, but with so many possible transitions, it could be that you don't have enough data to estimate a particular transition. You could check your data to see exactly how many data points you have for each transition, and if it is only a couple, then I am not surprised the model is struggling.

In addition, you state that transitions like C->E are set to 0, because a fish would have to swim through D. However, are detection rates 1? And can a fish swim from C->E within one time interval? This is another reason to do a data scan to check how the structure of model matches what is occurring in the data.

Finally, in your formulas for Psi, I believe you should always be including the interaction with stratum:tostratum, also with covariates. So for example, if transitions were to depend on month, the structure would be something like -1 + stratum:tostratum + stratum:tostratum:month.

Hope my comments help...

I hope my comments help.