- For cases in which the proper lag structure is ambiguous, you may now use the
`partial.pre`

argument to`dpm()`

to use the strategy proposed by Allison (2022).

- The ability to do arbitrary variable transformations introduced 1.1.0 has been made to actually work since
`lavaan`

does not allow non-syntactic variable names.

- Specifying interactions in model formulae is now supported. To make them predetermined, just make sure one of the terms has the
`pre()`

tag surrounding it. Do*not*put the entire interaction inside`pre()`

. - You may now include sampling weights via the
`weights`

argument.

- Fixed a bug that caused an error when printing summaries for models with
`y.free = TRUE`

.

`dpm()`

now has the`x.free`

argument, which can allow predictor variables to have coefficients that vary by wave.`dpm`

objects now have a`glance()`

method for the`broom`

package.- You can now get wave-by-wave coefficient tables when either
`x.free`

or`y.free`

are used with`dpm()`

.

This release contains several important updates and a 1.1.x release is likely to be the one submitted to CRAN.

- Fixed an error in models with no constants.
- Fixed an error that sometimes caused predetermined variables to be treated incorrectly. (Vague, I know)
- Summaries now include coefficients for each wave of the lagged DV(s) when
`y.free`

is TRUE.

- Models without lagged dependent variables are now supported (use
`y.lag = 0`

) - Variable transformations in the model formula are now supported (e.g.,
`y ~ scale(x)`

). - You can now update
`dpm`

models with`update`

. `dpm`

objects now a have a`tidy`

method via the`broom`

package.

As a side note, there is now a *testing* suite in place to check models for accuracy/consistency with `xtdpdml`

. That doesn’t mean there will be no bugs, but it should help prevent any regressions.

This is a major release with several breaking changes compared to the initial development release.

Most noticeably, the name of the package has been changed from `clfe`

to `dpm`

. This was done to better reflect the scope of the package — the cross-lagged fixed effects specification (CFLE) is a special case of the larger group of dynamic panel model (DPM) specifications availed to users of the package.

Accordingly, what was once the `clfe`

function is now called `dpm`

.

Internally, the `dpm`

class is now an S4 object that contains the `lavaan`

class. This means that any method implemented for `lavaan`

objects that isn’t explicitly defined by this package should simply treat `dpm`

objects as if they were `lavaan`

objects.

The `summary`

method now has more options and is more similar to `lavaan`

’s summary in that regard. Of course, the summary output is much cleaner and more succinct.

The following arguments have been added to `dpm()`

:

`y.lag`

: Equivalent to`xtdpdml`

’s`ylag`

. Specify which lags of the DV to use.`y.free`

: Equivalent to`xtdpdml`

’s`yfree`

. Allow stability coefficients for the lagged DV to vary over time.`fixed.effects`

: Comparable to`xtdpdml`

’s`re`

. Use fixed effects (`TRUE`

) or random effects (`FALSE`

) specification.`alpha.free`

: Equivalent to`xtdpdml`

’s`alphafree`

. Allow the fixed effects to vary over time.

- Added a
`NEWS.md`

file to track changes to the package.

The `panelr`

package was added as a dependency, which has some downstream effects.

- The
`panel_data`

function now belongs to`panelr`

. - The
`panel_data`

object type now inherits from`tibble`

, which has pluses and minuses but I believe more upside than downside. - The
`WageData`

example data is now part of the`panelr`

package.