Sorted Spikes Decoding¶
The mechanics of decoding with sorted spikes are largely similar to those of decoding with unsorted spikes. You should familiarize yourself with the clusterless decoding tutorial before proceeding with this one.
The elements we will need to decode with sorted spikes are:
PositionGroup
SortedSpikesGroup
DecodingParameters
encoding_interval
decoding_interval
This time, instead of extracting waveform features, we can proceed directly from the SpikeSortingOutput table to specify which units we want to decode. The rest of the decoding process is the same as before.
SortedSpikesGroup¶
from pathlib import Path
import datajoint as dj
dj.config.load(
Path("../dj_local_conf.json").absolute()
) # load config for database connection info
from spyglass.spikesorting.merge import SpikeSortingOutput
import spyglass.spikesorting.v1 as sgs
nwb_copy_file_name = "mediumnwb20230802_.nwb"
sorter_keys = {
"nwb_file_name": nwb_copy_file_name,
"sorter": "clusterless_thresholder",
"sorter_param_name": "default_clusterless",
}
(sgs.SpikeSortingSelection & sorter_keys) * SpikeSortingOutput.CurationV1
[2024-01-17 22:49:07,284][INFO]: Connecting root@localhost:3306 [2024-01-17 22:49:07,353][INFO]: Connected root@localhost:3306
sorting_id | merge_id | recording_id | sorter | sorter_param_name | nwb_file_name name of the NWB file | interval_list_name descriptive name of this interval list | curation_id |
---|---|---|---|---|---|---|---|
08a302b6-5505-40fa-b4d5-62162f8eef58 | 485a4ddf-332d-35b5-3ad4-0561736c1844 | 449b64e3-db0b-437e-a1b9-0d29928aa2dd | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | 45f6b9a1-eef3-46eb-866d-d0999afebda6 | 0 |
0ca508ee-af4c-4a89-8181-d48bd209bfd4 | 6acb99b8-6a0c-eb83-1141-5f603c5895e0 | 328da21c-1d9c-41e2-9800-76b3484b707b | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | 686d9951-1c0f-4d5e-9f5c-09e6fd8bdd4c | 0 |
209dc048-6fae-4315-b293-c06fff29f947 | f7237e18-4e73-4aee-805b-90735e9147de | aff78f2f-2ba0-412a-95cc-447c3a2f4683 | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | 719e8a86-fcf1-4ffc-8c1f-ea912f67ad5d | 0 |
21a9a593-f6f3-4b82-99d7-8fc46556eff3 | 7e3fa66e-727e-1541-819a-b01309bb30ae | 2402805a-04f9-4a88-9ccf-071376c8de19 | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | d581b117-160e-4311-b096-7781a4de4394 | 0 |
406a20e3-5a9f-4fec-b046-a6561f72461e | 6d039a63-17ad-0b78-4b1e-f02d5f3dbbc5 | f1427e00-2974-4301-b2ac-b4dc29277c51 | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | 0e848c38-9105-4ea4-b6ba-dbdd5b46a088 | 0 |
4131c51b-c56d-41fa-b046-46635fc17fd9 | e0e9133a-7a4e-1321-a43a-e8afcb2f25da | 9e332d82-1daf-4e92-bb50-12e4f9430875 | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | 9ed11db5-c42e-491a-8caf-7d9a37a65f13 | 0 |
4c5a629a-71d9-481d-ab11-a4cb0fc16087 | 9959b614-2318-f597-6651-a3a82124d28a | 3a2c3eed-413a-452a-83c8-0e4648141bde | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | 2b9fbf14-74a0-4294-a805-26702340aac9 | 0 |
4d629c07-1931-4e1f-a3a8-cbf1b72161e3 | c0eb6455-fc41-c200-b62e-e3ca81b9a3f7 | f07bc0b0-de6b-4424-8ef9-766213aaca26 | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | 5c68f0f0-f577-4905-8a09-e4d171d0a22d | 0 |
554a9a3c-0461-48be-8435-123eed59c228 | 912e250e-56d8-ee33-4525-c844d810971b | 7f128981-6868-4976-ba20-248655dcac21 | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | f4b9301f-bc91-455b-9474-c801093f3856 | 0 |
7bb007f2-26d3-463f-b7dc-7bd4d271725e | d7d2c97a-0e6e-d1b8-735c-d55dc66a30e1 | a9b7cec0-1256-49cf-abf0-8c45fd155379 | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | 74270cba-36ee-4afb-ab50-2a6cc948e68c | 0 |
80e1f37f-48a7-4087-bd37-7a37b6a2c160 | abb92dce-4410-8f17-a501-a4104bda0dcf | 3c40ebdc-0b61-4105-9971-e1348bd49bc7 | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | 0f91197e-bebb-4dc6-ad41-5bf89c3eed28 | 0 |
8848c4a8-a2f2-4f3d-82cd-51b13b8bae3c | 74e10781-1228-4075-0870-af224024ffdc | 257c077b-8f3b-4abb-a631-6b8084d6a1ea | clusterless_thresholder | default_clusterless | mediumnwb20230802_.nwb | e289e03d-32ad-461a-a1cc-c88537343149 | 0 |
...
Total: 23
spikesorting_merge_ids = (
(sgs.SpikeSortingSelection & sorter_keys) * SpikeSortingOutput.CurationV1
).fetch("merge_id")
spikesorting_merge_ids
array([UUID('485a4ddf-332d-35b5-3ad4-0561736c1844'), UUID('6acb99b8-6a0c-eb83-1141-5f603c5895e0'), UUID('f7237e18-4e73-4aee-805b-90735e9147de'), UUID('7e3fa66e-727e-1541-819a-b01309bb30ae'), UUID('6d039a63-17ad-0b78-4b1e-f02d5f3dbbc5'), UUID('e0e9133a-7a4e-1321-a43a-e8afcb2f25da'), UUID('9959b614-2318-f597-6651-a3a82124d28a'), UUID('c0eb6455-fc41-c200-b62e-e3ca81b9a3f7'), UUID('912e250e-56d8-ee33-4525-c844d810971b'), UUID('d7d2c97a-0e6e-d1b8-735c-d55dc66a30e1'), UUID('abb92dce-4410-8f17-a501-a4104bda0dcf'), UUID('74e10781-1228-4075-0870-af224024ffdc'), UUID('8bbddc0f-d6ae-6260-9400-f884a6e25ae8'), UUID('614d796c-0b95-6364-aaa0-b6cb1e7bbb83'), UUID('b332482b-e430-169d-8ac0-0a73ce968ed7'), UUID('86897349-ff68-ac72-02eb-739dd88936e6'), UUID('4a712103-c223-864f-82e0-6c23de79cc14'), UUID('cf858380-e8a3-49de-c2a9-1a277e307a68'), UUID('cc4ee561-f974-f8e5-0ea4-83185263ac67'), UUID('4a72c253-b3ca-8c13-e615-736a7ebff35c'), UUID('b92a94d8-ee1e-2097-a81f-5c1e1556ed24'), UUID('5c53bd33-d57c-fbba-e0fb-55e0bcb85d03'), UUID('0751a1e1-a406-7f87-ae6f-ce4ffc60621c')], dtype=object)
from spyglass.decoding.v1.sorted_spikes import SortedSpikesGroup
SortedSpikesGroup()
nwb_file_name name of the NWB file | sorted_spikes_group_name |
---|---|
mediumnwb20230802_.nwb | test_group |
Total: 1
SortedSpikesGroup().create_group(
group_name="test_group",
nwb_file_name=nwb_copy_file_name,
keys=[
{"spikesorting_merge_id": merge_id}
for merge_id in spikesorting_merge_ids
],
)
SortedSpikesGroup & {
"nwb_file_name": nwb_copy_file_name,
"sorted_spikes_group_name": "test_group",
}
nwb_file_name name of the NWB file | sorted_spikes_group_name |
---|---|
mediumnwb20230802_.nwb | test_group |
Total: 1
SortedSpikesGroup.SortGroup & {
"nwb_file_name": nwb_copy_file_name,
"sorted_spikes_group_name": "test_group",
}
nwb_file_name name of the NWB file | sorted_spikes_group_name | spikesorting_merge_id |
---|---|---|
mediumnwb20230802_.nwb | test_group | 0751a1e1-a406-7f87-ae6f-ce4ffc60621c |
mediumnwb20230802_.nwb | test_group | 485a4ddf-332d-35b5-3ad4-0561736c1844 |
mediumnwb20230802_.nwb | test_group | 4a712103-c223-864f-82e0-6c23de79cc14 |
mediumnwb20230802_.nwb | test_group | 4a72c253-b3ca-8c13-e615-736a7ebff35c |
mediumnwb20230802_.nwb | test_group | 5c53bd33-d57c-fbba-e0fb-55e0bcb85d03 |
mediumnwb20230802_.nwb | test_group | 614d796c-0b95-6364-aaa0-b6cb1e7bbb83 |
mediumnwb20230802_.nwb | test_group | 6acb99b8-6a0c-eb83-1141-5f603c5895e0 |
mediumnwb20230802_.nwb | test_group | 6d039a63-17ad-0b78-4b1e-f02d5f3dbbc5 |
mediumnwb20230802_.nwb | test_group | 74e10781-1228-4075-0870-af224024ffdc |
mediumnwb20230802_.nwb | test_group | 7e3fa66e-727e-1541-819a-b01309bb30ae |
mediumnwb20230802_.nwb | test_group | 86897349-ff68-ac72-02eb-739dd88936e6 |
mediumnwb20230802_.nwb | test_group | 8bbddc0f-d6ae-6260-9400-f884a6e25ae8 |
...
Total: 23
Model parameters¶
As before we can specify the model parameters. The only difference is that we will use the ContFragSortedSpikesClassifier
instead of the ContFragClusterlessClassifier
.
from spyglass.decoding.v1.core import DecodingParameters
from non_local_detector.models import ContFragSortedSpikesClassifier
DecodingParameters.insert1(
{
"decoding_param_name": "contfrag_sorted",
"decoding_params": ContFragSortedSpikesClassifier(),
"decoding_kwargs": dict(),
},
skip_duplicates=True,
)
DecodingParameters()
decoding_param_name a name for this set of parameters | decoding_params initialization parameters for model | decoding_kwargs additional keyword arguments |
---|---|---|
contfrag_clusterless | =BLOB= | =BLOB= |
contfrag_clusterless_0.5.13 | =BLOB= | =BLOB= |
contfrag_sorted | =BLOB= | =BLOB= |
contfrag_sorted_0.5.13 | =BLOB= | =BLOB= |
nonlocal_clusterless_0.5.13 | =BLOB= | =BLOB= |
nonlocal_sorted_0.5.13 | =BLOB= | =BLOB= |
Total: 6
1D Decoding¶
As in the clusterless notebook, we can decode 1D position if we specify the track_graph
, edge_order
, and edge_spacing
parameters in the Environment
class constructor. See the clusterless decoding tutorial for more details.
Decoding¶
Now we can decode the position using the sorted spikes using the SortedSpikesDecodingSelection
table. Here we assume that PositionGroup
has been specified as in the clusterless decoding tutorial.
from spyglass.decoding.v1.sorted_spikes import SortedSpikesDecodingSelection
SortedSpikesDecodingSelection()
nwb_file_name name of the NWB file | sorted_spikes_group_name | position_group_name | decoding_param_name a name for this set of parameters | encoding_interval descriptive name of this interval list | decoding_interval descriptive name of this interval list | estimate_decoding_params whether to estimate the decoding parameters |
---|---|---|---|---|---|---|
mediumnwb20230802_.nwb | test_group | test_group | contfrag_sorted | pos 0 valid times | test decoding interval | 0 |
Total: 1
selection_key = {
"sorted_spikes_group_name": "test_group",
"position_group_name": "test_group",
"decoding_param_name": "contfrag_sorted",
"nwb_file_name": "mediumnwb20230802_.nwb",
"encoding_interval": "pos 0 valid times",
"decoding_interval": "test decoding interval",
"estimate_decoding_params": False,
}
SortedSpikesDecodingSelection.insert1(
selection_key,
skip_duplicates=True,
)
from spyglass.decoding.v1.sorted_spikes import SortedSpikesDecodingV1
SortedSpikesDecodingV1.populate(selection_key)
[2024-01-17 22:49:10,894][WARNING]: Skipped checksum for file with hash: a04cfc1f-8a7d-48a8-4680-ad1ded1805ca, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_JC0NTAX2E2.nwb [2024-01-17 22:49:11,244][WARNING]: Skipped checksum for file with hash: 6629fd95-636a-4ad4-c9af-cee507de2130, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_AMBBKQ9RIY.nwb [2024-01-17 22:49:11,482][WARNING]: Skipped checksum for file with hash: 6d04cbdb-e1e4-f44f-7274-0e1ab0356d75, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_W1MLF0Q86S.nwb [2024-01-17 22:49:11,741][WARNING]: Skipped checksum for file with hash: 8993754e-7dbe-94a1-403d-8c55aa9c6c42, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_JN4A4GSLZB.nwb [2024-01-17 22:49:11,986][WARNING]: Skipped checksum for file with hash: 9e24661c-b021-6ad4-f224-89e331334f18, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_T2DBO3EMZ8.nwb [2024-01-17 22:49:12,215][WARNING]: Skipped checksum for file with hash: f64f34ee-e72d-e566-a048-65f2ea31708a, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_USMRXAAV8I.nwb [2024-01-17 22:49:12,435][WARNING]: Skipped checksum for file with hash: 6d13e338-41bd-b011-beb5-4de53d9d467b, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_JA2OA12RPN.nwb [2024-01-17 22:49:12,661][WARNING]: Skipped checksum for file with hash: d740eb7d-ce29-e140-06a2-c56655e0842a, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_L92EE1VRPB.nwb [2024-01-17 22:49:12,889][WARNING]: Skipped checksum for file with hash: 1f386cd3-89da-0233-03ff-76ba94e91a3a, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_TX2ZX3DAP4.nwb [2024-01-17 22:49:13,105][WARNING]: Skipped checksum for file with hash: fa76d419-77a4-697a-325d-5c2ddbe517f9, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_0R6AWXMC6G.nwb [2024-01-17 22:49:13,326][WARNING]: Skipped checksum for file with hash: ce4cb0c3-3dd0-70fd-8ea0-98a8b84592d9, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_7UIA2ILMG6.nwb [2024-01-17 22:49:13,542][WARNING]: Skipped checksum for file with hash: e43f95ff-9779-b980-00a3-99e104864462, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_AKOI7OTASI.nwb [2024-01-17 22:49:13,768][WARNING]: Skipped checksum for file with hash: ff81d274-17f7-702d-a2b4-92ac43c29316, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_Y2YF504C5D.nwb [2024-01-17 22:49:14,033][WARNING]: Skipped checksum for file with hash: e282a8e5-844b-20f6-345c-cded12e761a9, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_DUNM1TZUGR.nwb [2024-01-17 22:49:14,248][WARNING]: Skipped checksum for file with hash: 7d05460d-7366-27c9-2ba7-de2ad5d402f2, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_4JXWFJ3JRI.nwb [2024-01-17 22:49:14,478][WARNING]: Skipped checksum for file with hash: c202eb9e-ca43-0a72-4086-57a5bb6eb937, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_5TY04H3B5T.nwb [2024-01-17 22:49:14,694][WARNING]: Skipped checksum for file with hash: 4357905c-c6b9-3990-4d62-740a54cfc667, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_X84BYVM2B0.nwb [2024-01-17 22:49:14,917][WARNING]: Skipped checksum for file with hash: 4c1103ac-eaca-b282-e5ff-aa2194e65a43, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_2R6VQ8EDL4.nwb [2024-01-17 22:49:15,142][WARNING]: Skipped checksum for file with hash: 023c874f-8114-3ef6-7fcf-813844787d5f, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_L7HDY9IDHO.nwb [2024-01-17 22:49:15,364][WARNING]: Skipped checksum for file with hash: fde8b240-6adc-86f0-6391-f3f6fad72ee9, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_HWU3E4EKP4.nwb [2024-01-17 22:49:15,591][WARNING]: Skipped checksum for file with hash: c592e63b-4db1-40be-632e-0180e6fa02d7, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_SGAU9PX7US.nwb [2024-01-17 22:49:15,826][WARNING]: Skipped checksum for file with hash: 148d9058-e6dc-e959-4c4d-75db9aa0b6e4, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_EF6N6XI3AH.nwb [2024-01-17 22:49:16,050][WARNING]: Skipped checksum for file with hash: b4b6404f-aaf8-c4cc-9abe-ceea56e103f3, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_O7ZZ0F1XN7.nwb [2024-01-17 22:49:16,287][WARNING]: Skipped checksum for file with hash: 26f7bdc7-da8d-6ad5-3f4a-554ceb48755e, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_0TKF5589B7.nwb
Encoding models: 0%| | 0/23 [00:00<?, ?cell/s]
Non-Local Likelihood: 0%| | 0/23 [00:00<?, ?cell/s]
/Users/edeno/miniconda3/envs/spyglass/lib/python3.9/site-packages/non_local_detector/models/base.py:780: FutureWarning: the `pandas.MultiIndex` object(s) passed as 'state_bins' coordinate(s) or data variable(s) will no longer be implicitly promoted and wrapped into multiple indexed coordinates in the future (i.e., one coordinate for each multi-index level + one dimension coordinate). If you want to keep this behavior, you need to first wrap it explicitly using `mindex_coords = xarray.Coordinates.from_pandas_multiindex(mindex_obj, 'dim')` and pass it as coordinates, e.g., `xarray.Dataset(coords=mindex_coords)`, `dataset.assign_coords(mindex_coords)` or `dataarray.assign_coords(mindex_coords)`. results = xr.Dataset( /Users/edeno/miniconda3/envs/spyglass/lib/python3.9/site-packages/xarray/namedarray/core.py:487: UserWarning: Duplicate dimension names present: dimensions {'states'} appear more than once in dims=('states', 'states'). We do not yet support duplicate dimension names, but we do allow initial construction of the object. We recommend you rename the dims immediately to become distinct, as most xarray functionality is likely to fail silently if you do not. To rename the dimensions you will need to set the ``.dims`` attribute of each variable, ``e.g. var.dims=('x0', 'x1')``. warnings.warn(
We verify that the results have been inserted into the DecodingOutput
merge table.
from spyglass.decoding.decoding_merge import DecodingOutput
DecodingOutput.SortedSpikesDecodingV1 & selection_key
merge_id | nwb_file_name name of the NWB file | sorted_spikes_group_name | position_group_name | decoding_param_name a name for this set of parameters | encoding_interval descriptive name of this interval list | decoding_interval descriptive name of this interval list | estimate_decoding_params whether to estimate the decoding parameters |
---|---|---|---|---|---|---|---|
650316f6-e19b-6195-5aea-0f46bc503fa3 | mediumnwb20230802_.nwb | test_group | test_group | contfrag_sorted | pos 0 valid times | test decoding interval | 0 |
Total: 1
We can load the results as before:
results = (SortedSpikesDecodingV1 & selection_key).load_results()
results
[2024-01-17 22:50:37,762][WARNING]: Skipped checksum for file with hash: 929bf936-5d90-ef32-a736-fb41f4d4932c, and path: /Users/edeno/Documents/GitHub/spyglass/DATA/analysis/mediumnwb20230802/mediumnwb20230802_39518860-b21c-47e4-8a4f-cf7e040e313f.nc /Users/edeno/miniconda3/envs/spyglass/lib/python3.9/site-packages/xarray/namedarray/core.py:487: UserWarning: Duplicate dimension names present: dimensions {'states'} appear more than once in dims=('states', 'states'). We do not yet support duplicate dimension names, but we do allow initial construction of the object. We recommend you rename the dims immediately to become distinct, as most xarray functionality is likely to fail silently if you do not. To rename the dimensions you will need to set the ``.dims`` attribute of each variable, ``e.g. var.dims=('x0', 'x1')``. warnings.warn( /Users/edeno/miniconda3/envs/spyglass/lib/python3.9/site-packages/xarray/namedarray/core.py:487: UserWarning: Duplicate dimension names present: dimensions {'states'} appear more than once in dims=('states', 'states'). We do not yet support duplicate dimension names, but we do allow initial construction of the object. We recommend you rename the dims immediately to become distinct, as most xarray functionality is likely to fail silently if you do not. To rename the dimensions you will need to set the ``.dims`` attribute of each variable, ``e.g. var.dims=('x0', 'x1')``. warnings.warn(
<xarray.Dataset> Dimensions: (state_ind: 26668, dim_0: 26668, time: 451, states: 2, intervals: 1, state_bins: 26668) Coordinates: * state_ind (state_ind) int32 0 0 0 0 0 0 0 ... 1 1 1 1 1 1 * time (time) float64 1.626e+09 ... 1.626e+09 * states (states) object 'Continuous' 'Fragmented' environments (states) object ... encoding_groups (states) int32 ... * state_bins (state_bins) object MultiIndex * state (state_bins) object 'Continuous' ... 'Fragme... * x_position (state_bins) float64 29.02 29.02 ... 262.7 * y_position (state_bins) float64 0.4493 2.445 ... 224.0 Dimensions without coordinates: dim_0, intervals Data variables: initial_conditions (dim_0) float64 ... discrete_state_transitions (states, states) float64 ... acausal_posterior (intervals, time, state_bins) float32 ... acausal_state_probabilities (intervals, time, states) float64 ... Attributes: marginal_log_likelihoods: -16366.834