Introduction

This report provides a comprehensive summary and analysis of the Phase 2b clinical trial for JZP385 in the treatment of adults with moderate to severe essential tremor. The data is sourced from the clinical trial summary report (EudraCT number: 2020-002463-61 and NCT05122650).

1. Trial Information & Status

This section outlines the basic information about the trial, including identifiers, dates, sponsor details, and regulatory status.

# --- Trial Information ---
trial_info <- tribble(
  ~`Trial ID`, ~`NCT ID`, ~`Sponsor Name`, ~`Sponsor Address`, ~`Global End Date`, ~`Results Version`,
  "2020-002463-61", "NCT05122650", "Jazz Pharmaceuticals, Inc.", "3170 Porter Drive, Palo Alto, United States, 94304", as.Date("2024-05-30"), "v2"
)
kable(trial_info, caption = "Table 1: General Trial Information")
Table 1: General Trial Information
Trial ID NCT ID Sponsor Name Sponsor Address Global End Date Results Version
2020-002463-61 NCT05122650 Jazz Pharmaceuticals, Inc. 3170 Porter Drive, Palo Alto, United States, 94304 2024-05-30 v2
# --- Key Dates ---
key_dates <- tribble(
  ~Milestone, ~Date,
  "First Submitted", as.Date("2021-11-02"),
  "First Posted", as.Date("2021-11-17"),
  "Results First Submitted", as.Date("2025-05-30"),
  "Results First Posted", as.Date("2025-07-24"),
  "Last Update Posted", as.Date("2025-07-24")
)
kable(key_dates, caption = "Table 2: Key Registration and Results Dates")
Table 2: Key Registration and Results Dates
Milestone Date
First Submitted 2021-11-02
First Posted 2021-11-17
Results First Submitted 2025-05-30
Results First Posted 2025-07-24
Last Update Posted 2025-07-24
# --- Protocol Amendments ---
protocol_amendments <- tribble(
  ~Date, ~Amendment,
  "19 May 2021", "This amendment was implemented to align with feedback received from the United States Food and Drug Administration (FDA) regarding study endpoints, to correct an error in the hepatic and renal values necessary for participant exclusion, and to add general clarifications throughout the protocol.",
  "15 November 2021", "This amendment was implemented to revise text regarding participant rollover into a separate long-term study, remove CYP2C9 inducers from the exclusion criteria, and to make other minor edits.",
  "07 October 2022", "The overall rationale for this amendment was to broaden the eligibility criteria and reduce study burden.",
  "10 February 2023", "The overall rationale for this amendment was to facilitate participant enrollment by allowing participants to enter the study without having to discontinue concomitant anti-tremor medications, unless these medications (eg, primidone) are prohibited in accordance with other exclusion criteria."
)
kable(protocol_amendments, caption = "Table 3: Substantial Protocol Amendments")
Table 3: Substantial Protocol Amendments
Date Amendment
19 May 2021 This amendment was implemented to align with feedback received from the United States Food and Drug Administration (FDA) regarding study endpoints, to correct an error in the hepatic and renal values necessary for participant exclusion, and to add general clarifications throughout the protocol.
15 November 2021 This amendment was implemented to revise text regarding participant rollover into a separate long-term study, remove CYP2C9 inducers from the exclusion criteria, and to make other minor edits.
07 October 2022 The overall rationale for this amendment was to broaden the eligibility criteria and reduce study burden.
10 February 2023 The overall rationale for this amendment was to facilitate participant enrollment by allowing participants to enter the study without having to discontinue concomitant anti-tremor medications, unless these medications (eg, primidone) are prohibited in accordance with other exclusion criteria.

2. Enrollment Data

A total of 420 participants were enrolled globally. The majority were from the United States and Poland, and the study population was composed entirely of adults, with most participants aged 65 or older.

# --- Enrollment Data ---
total_enrolled <- 420
enrollment_country <- tribble(
  ~Country, ~`Subjects Enrolled`,
  "United States", 205,
  "Germany", 28,
  "Poland", 151,
  "Spain", 36
) %>%
  mutate(Percentage = round((`Subjects Enrolled` / total_enrolled) * 100, 1),
         `N (%)` = paste0(`Subjects Enrolled`, " (", Percentage, "%)"))

enrollment_age <- tribble(
  ~`Age Group`, ~`Subjects Enrolled`,
  "Adults (18-64 years)", 187,
  "From 65 to 84 years", 233
) %>%
  mutate(Percentage = round((`Subjects Enrolled` / total_enrolled) * 100, 1),
         `N (%)` = paste0(`Subjects Enrolled`, " (", Percentage, "%)"))

kable(select(enrollment_country, Country, `N (%)`), caption = "Table 4: Enrollment by Country (N (%))")
Table 4: Enrollment by Country (N (%))
Country N (%)
United States 205 (48.8%)
Germany 28 (6.7%)
Poland 151 (36%)
Spain 36 (8.6%)
kable(select(enrollment_age, `Age Group`, `N (%)`), caption = "Table 5: Enrollment by Age Group (N (%))")
Table 5: Enrollment by Age Group (N (%))
Age Group N (%)
Adults (18-64 years) 187 (44.5%)
From 65 to 84 years 233 (55.5%)

Enrollment Visualizations

# --- Chart for Enrollment by Country ---
ggplot(enrollment_country, aes(x = reorder(Country, -`Subjects Enrolled`), y = `Subjects Enrolled`, fill = Country)) +
  geom_bar(stat = "identity", show.legend = FALSE, alpha = 0.8) +
  geom_text(aes(label = `N (%)`), vjust = -0.5, size = 4) +
  labs(title = "Subject Enrollment by Country", x = "Country", y = "Number of Subjects Enrolled") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

3. Subject Disposition

This section details the flow of participants through each arm of the study. A total of 420 participants were randomized (Intent to Treat Analysis Set), and 416 received at least one dose of the study intervention (Safety Analysis Set).

# --- Subject Disposition Data ---
subject_disposition_long <- tribble(
  ~arm, ~status, ~count,
  "Placebo", "Started", 104, "Placebo", "Completed", 91, "Placebo", "Adverse Event", 4, "Placebo", "Withdrawal by Subject", 3, "Placebo", "Lost to Follow-up", 1, "Placebo", "Other", 5,
  "10 mg JZP385", "Started", 105, "10 mg JZP385", "Completed", 78, "10 mg JZP385", "Adverse Event", 16, "10 mg JZP385", "Withdrawal by Subject", 7, "10 mg JZP385", "Lack of Efficacy", 1, "10 mg JZP385", "Sponsor request", 1,
  "20 mg JZP385", "Started", 104, "20 mg JZP385", "Completed", 81, "20 mg JZP385", "Adverse Event", 11, "20 mg JZP385", "Withdrawal by Subject", 4, "20 mg JZP385", "Lost to Follow-up", 3, "20 mg JZP385", "Randomized by mistake", 3, "20 mg JZP385", "Lack of Efficacy", 1, "20 mg JZP385", "Sponsor request", 1,
  "30 mg JZP385", "Started", 107, "30 mg JZP385", "Completed", 78, "30 mg JZP385", "Adverse Event", 12, "30 mg JZP385", "Withdrawal by Subject", 8, "30 mg JZP385", "Lack of Efficacy", 2, "30 mg JZP385", "Non-compliance with study intervention", 2, "30 mg JZP385", "Randomized by mistake", 2, "30 mg JZP385", "Sponsor request", 2, "30 mg JZP385", "Protocol Violation", 1
)

# --- Calculate percentages based on the 'Started' count for each arm ---
disposition_totals <- subject_disposition_long %>%
  filter(status == "Started") %>%
  select(arm, total_started = count)

disposition_with_pct <- subject_disposition_long %>%
  left_join(disposition_totals, by = "arm") %>%
  mutate(percentage = round((count / total_started) * 100, 1),
         count_pct = paste0(count, " (", percentage, "%)"))

# --- Format Table for Side-by-Side View ---
disposition_wide <- disposition_with_pct %>%
  select(status, arm, count_pct) %>%
  pivot_wider(names_from = arm, values_from = count_pct, values_fill = "0 (0.0%)") %>%
  rename(Status = status) %>%
  select(Status, Placebo, `10 mg JZP385`, `20 mg JZP385`, `30 mg JZP385`)

kable(disposition_wide, caption = "Table 6: Subject Disposition by Treatment Arm (N (%))")
Table 6: Subject Disposition by Treatment Arm (N (%))
Status Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
Started 104 (100%) 105 (100%) 104 (100%) 107 (100%)
Completed 91 (87.5%) 78 (74.3%) 81 (77.9%) 78 (72.9%)
Adverse Event 4 (3.8%) 16 (15.2%) 11 (10.6%) 12 (11.2%)
Withdrawal by Subject 3 (2.9%) 7 (6.7%) 4 (3.8%) 8 (7.5%)
Lost to Follow-up 1 (1%) 0 (0.0%) 3 (2.9%) 0 (0.0%)
Other 5 (4.8%) 0 (0.0%) 0 (0.0%) 0 (0.0%)
Lack of Efficacy 0 (0.0%) 1 (1%) 1 (1%) 2 (1.9%)
Sponsor request 0 (0.0%) 1 (1%) 1 (1%) 2 (1.9%)
Randomized by mistake 0 (0.0%) 0 (0.0%) 3 (2.9%) 2 (1.9%)
Non-compliance with study intervention 0 (0.0%) 0 (0.0%) 0 (0.0%) 2 (1.9%)
Protocol Violation 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (0.9%)

Disposition Visualization

# --- Chart for Completion Status ---
completion_status <- subject_disposition_long %>%
  filter(status %in% c("Started", "Completed")) %>%
  pivot_wider(names_from = status, values_from = count)

ggplot(completion_status, aes(x = arm)) +
  geom_bar(aes(y = Started, fill = "Started"), stat = "identity", alpha = 0.5) +
  geom_bar(aes(y = Completed, fill = "Completed"), stat = "identity", alpha = 0.9) +
  geom_text(aes(y = Started, label = Started), vjust = -0.5, size = 4) +
  geom_text(aes(y = Completed, label = Completed), vjust = 1.5, size = 4, color = "white") +
  labs(title = "Subject Completion Status by Treatment Arm", x = "Treatment Arm", y = "Number of Subjects", fill = "Status") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

4. Baseline Demographics

Demographic data was generally well-balanced across the treatment arms.

# --- Demographics Data ---
baseline_demographics_long <- tribble(
  ~arm, ~category, ~group, ~count,
  "Placebo", "Gender", "Female", 41, "Placebo", "Gender", "Male", 63, "Placebo", "Age", "18-65 years", 43, "Placebo", "Age", ">=65 years", 61, "Placebo", "Race", "White", 98, "Placebo", "Race", "American Indian or Alaska Native", 1, "Placebo", "Race", "Unknown or Not Reported", 5, "Placebo", "Ethnicity", "Hispanic or Latino", 11, "Placebo", "Ethnicity", "Not Hispanic or Latino", 93,
  "10 mg JZP385", "Gender", "Female", 37, "10 mg JZP385", "Gender", "Male", 68, "10 mg JZP385", "Age", "18-65 years", 51, "10 mg JZP385", "Age", ">=65 years", 54, "10 mg JZP385", "Race", "White", 96, "10 mg JZP385", "Race", "Asian", 1, "10 mg JZP385", "Race", "More than one race", 1, "10 mg JZP385", "Race", "Unknown or Not Reported", 7, "10 mg JZP385", "Ethnicity", "Hispanic or Latino", 10, "10 mg JZP385", "Ethnicity", "Not Hispanic or Latino", 95,
  "20 mg JZP385", "Gender", "Female", 33, "20 mg JZP385", "Gender", "Male", 71, "20 mg JZP385", "Age", "18-65 years", 45, "20 mg JZP385", "Age", ">=65 years", 59, "20 mg JZP385", "Race", "White", 93, "20 mg JZP385", "Race", "Black or African American", 4, "20 mg JZP385", "Race", "More than one race", 1, "20 mg JZP385", "Race", "Unknown or Not Reported", 6, "20 mg JZP385", "Ethnicity", "Hispanic or Latino", 9, "20 mg JZP385", "Ethnicity", "Not Hispanic or Latino", 95,
  "30 mg JZP385", "Gender", "Female", 49, "30 mg JZP385", "Gender", "Male", 58, "30 mg JZP385", "Age", "18-65 years", 48, "30 mg JZP385", "Age", ">=65 years", 59, "30 mg JZP385", "Race", "White", 92, "30 mg JZP385", "Race", "Black or African American", 4, "30 mg JZP385", "Race", "More than one race", 2, "30 mg JZP385", "Race", "Unknown or Not Reported", 9, "30 mg JZP385", "Ethnicity", "Hispanic or Latino", 11, "30 mg JZP385", "Ethnicity", "Not Hispanic or Latino", 96
)

# Calculate totals for percentages
arm_totals <- tribble(
  ~arm, ~total_subjects,
  "Placebo", 104,
  "10 mg JZP385", 105,
  "20 mg JZP385", 104,
  "30 mg JZP385", 107
)

# Add percentages
baseline_demographics_long_with_pct <- baseline_demographics_long %>%
  left_join(arm_totals, by = "arm") %>%
  mutate(percentage = round((count / total_subjects) * 100, 1),
         count_pct = paste0(count, " (", percentage, "%)"))

# --- Format Table for Side-by-Side View ---
demographics_wide <- baseline_demographics_long_with_pct %>%
  unite("Characteristic", category, group, sep = ": ") %>%
  select(Characteristic, arm, count_pct) %>%
  pivot_wider(names_from = arm, values_from = count_pct, values_fill = "0 (0.0%)") %>%
  select(Characteristic, Placebo, `10 mg JZP385`, `20 mg JZP385`, `30 mg JZP385`)

kable(demographics_wide, caption = "Table 7: Baseline Demographics by Treatment Arm (N (%))")
Table 7: Baseline Demographics by Treatment Arm (N (%))
Characteristic Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
Gender: Female 41 (39.4%) 37 (35.2%) 33 (31.7%) 49 (45.8%)
Gender: Male 63 (60.6%) 68 (64.8%) 71 (68.3%) 58 (54.2%)
Age: 18-65 years 43 (41.3%) 51 (48.6%) 45 (43.3%) 48 (44.9%)
Age: >=65 years 61 (58.7%) 54 (51.4%) 59 (56.7%) 59 (55.1%)
Race: White 98 (94.2%) 96 (91.4%) 93 (89.4%) 92 (86%)
Race: American Indian or Alaska Native 1 (1%) 0 (0.0%) 0 (0.0%) 0 (0.0%)
Race: Unknown or Not Reported 5 (4.8%) 7 (6.7%) 6 (5.8%) 9 (8.4%)
Ethnicity: Hispanic or Latino 11 (10.6%) 10 (9.5%) 9 (8.7%) 11 (10.3%)
Ethnicity: Not Hispanic or Latino 93 (89.4%) 95 (90.5%) 95 (91.3%) 96 (89.7%)
Race: Asian 0 (0.0%) 1 (1%) 0 (0.0%) 0 (0.0%)
Race: More than one race 0 (0.0%) 1 (1%) 1 (1%) 2 (1.9%)
Race: Black or African American 0 (0.0%) 0 (0.0%) 4 (3.8%) 4 (3.7%)

5. Efficacy Endpoints

5.1 Primary Endpoint: TETRAS Composite Score

Description: The TETRAS composite outcome score is the sum of modified items 1 - 11 of the TETRAS-ADL subscale and modified items 6 - 7 of the TETRAS-PS. The TETRAS-ADL subscale is a patient-rated scale assessing the impact of tremor on functioning, while the TETRAS-PS is a clinical rating of tremor severity. The composite score ranges from 0 - 42, with higher scores representing more severe ET.

# --- Primary Endpoint Data ---
primary_endpoint_long <- tribble(
  ~arm, ~statistic, ~value,
  "Placebo", "N Analyzed", 94, "Placebo", "Mean Change", -6.3, "Placebo", "SD", 6.22,
  "10 mg JZP385", "N Analyzed", 79, "10 mg JZP385", "Mean Change", -5.8, "10 mg JZP385", "SD", 6.85,
  "20 mg JZP385", "N Analyzed", 82, "20 mg JZP385", "Mean Change", -6.7, "20 mg JZP385", "SD", 6.88,
  "30 mg JZP385", "N Analyzed", 78, "30 mg JZP385", "Mean Change", -7.5, "30 mg JZP385", "SD", 7.31
)

# --- Format Table ---
primary_endpoint_wide <- primary_endpoint_long %>% pivot_wider(names_from = arm, values_from = value) %>% rename(Statistic = statistic)
kable(primary_endpoint_wide, caption = "Table 8: Primary Endpoint - Change in TETRAS Composite Score")
Table 8: Primary Endpoint - Change in TETRAS Composite Score
Statistic Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
N Analyzed 94.00 79.00 82.00 78.00
Mean Change -6.30 -5.80 -6.70 -7.50
SD 6.22 6.85 6.88 7.31
# --- Chart ---
primary_plot_data <- primary_endpoint_long %>% pivot_wider(names_from = statistic, values_from = value)
ggplot(primary_plot_data, aes(x = arm, y = `Mean Change`, fill = arm)) +
  geom_bar(stat = "identity", position = "dodge", show.legend = FALSE, alpha = 0.8) +
  geom_errorbar(aes(ymin = `Mean Change` - SD, ymax = `Mean Change` + SD), width = 0.2) +
  geom_text(aes(label = `Mean Change`), vjust = -2.5, size = 4) +
  labs(title = "Primary Endpoint: Mean Change in TETRAS Composite Score at Week 12", x = "Treatment Arm", y = "Mean Change from Baseline") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

5.2 Secondary Endpoints

5.2.1 CGI-S: >= 1-Point Improvement

Description: The Clinical Global Impression-Severity (CGI-S) is a 5-point scale used by a clinician to rate the severity of the participant’s ability to function due to their ET. Responses range from 1 (no limitations) to 5 (severe). This endpoint measures the percentage of participants with at least a 1-point improvement.

# --- CGI-S Data ---
cgi_s_long <- tribble(
  ~arm, ~statistic, ~value,
  "Placebo", "N Analyzed", 104, "Placebo", "% Improved", 50.0,
  "10 mg JZP385", "N Analyzed", 105, "10 mg JZP385", "% Improved", 49.8,
  "20 mg JZP385", "N Analyzed", 104, "20 mg JZP385", "% Improved", 55.7,
  "30 mg JZP385", "N Analyzed", 107, "30 mg JZP385", "% Improved", 62.8
)

# --- Format Table ---
cgi_s_wide <- cgi_s_long %>% pivot_wider(names_from = arm, values_from = value) %>% rename(Statistic = statistic)
kable(cgi_s_wide, caption = "Table 9: CGI-S >= 1-Point Improvement")
Table 9: CGI-S >= 1-Point Improvement
Statistic Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
N Analyzed 104 105.0 104.0 107.0
% Improved 50 49.8 55.7 62.8
# --- Chart ---
cgi_s_plot_data <- cgi_s_long %>% filter(statistic == "% Improved")
ggplot(cgi_s_plot_data, aes(x = arm, y = value, fill = arm)) +
  geom_bar(stat = "identity", show.legend = FALSE, alpha = 0.8) +
  labs(title = "CGI-S: Percentage of Subjects with >= 1-Point Improvement", x = "Treatment Arm", y = "Percentage of Subjects (%)") +
  geom_text(aes(label = paste0(round(value, 1), "%")), vjust = -0.5) +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

5.2.2 PGI-C & CGI-C: ‘Much’ or ‘Very Much’ Improved

Description: The Patient Global Impression of Change (PGI-C) and Clinical Global Impression of Change (CGI-C) are 5-point scales used by the patient and clinician, respectively, to rate the change in functional severity since baseline. Responses range from 1 (Much improved) to 5 (Much worse).

# --- PGI-C/CGI-C Data ---
global_change_long <- tribble(
  ~scale, ~arm, ~N_Analyzed, ~N_Improved,
  "PGI-C", "Placebo", 94, 16, "PGI-C", "10 mg JZP385", 79, 11, "PGI-C", "20 mg JZP385", 82, 20, "PGI-C", "30 mg JZP385", 79, 32,
  "CGI-C", "Placebo", 94, 22, "CGI-C", "10 mg JZP385", 79, 18, "CGI-C", "20 mg JZP385", 82, 19, "CGI-C", "30 mg JZP385", 79, 30
) %>% mutate(Percentage = (N_Improved / N_Analyzed) * 100)

# --- Format Table ---
global_change_wide <- global_change_long %>%
  mutate(Value = paste0(N_Improved, " (", round(Percentage, 1), "%)")) %>%
  select(scale, arm, Value) %>%
  pivot_wider(names_from = arm, values_from = Value) %>%
  rename(Scale = scale)
kable(global_change_wide, caption = "Table 10: Participants Reporting 'Much Improved' on PGI-C and CGI-C (N (%))")
Table 10: Participants Reporting ‘Much Improved’ on PGI-C and CGI-C (N (%))
Scale Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
PGI-C 16 (17%) 11 (13.9%) 20 (24.4%) 32 (40.5%)
CGI-C 22 (23.4%) 18 (22.8%) 19 (23.2%) 30 (38%)
# --- Chart ---
ggplot(global_change_long, aes(x = arm, y = Percentage, fill = scale)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Percentage Reporting 'Much Improved' (PGI-C & CGI-C)", x = "Treatment Arm", y = "Percentage of Subjects (%)", fill = "Scale") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

5.2.3 TETRAS-ADL Subscale

Description: The TETRAS Activities of Daily Living (ADL) subscale is a patient-rated scale of the impact of tremor on day-to-day functioning (e.g., eating, dressing, hygiene). It has 12 items, each rated 0 (normal) to 4 (severe), with a total score from 0 to 48. Higher scores mean more severe ET.

# --- TETRAS-ADL Data ---
tetras_adl_long <- tribble(
  ~arm, ~statistic, ~value,
  "Placebo", "N Analyzed", 94, "Placebo", "Mean Change", -6.4, "Placebo", "SD", 6.40,
  "10 mg JZP385", "N Analyzed", 79, "10 mg JZP385", "Mean Change", -6.3, "10 mg JZP385", "SD", 7.55,
  "20 mg JZP385", "N Analyzed", 82, "20 mg JZP385", "Mean Change", -7.1, "20 mg JZP385", "SD", 7.88,
  "30 mg JZP385", "N Analyzed", 79, "30 mg JZP385", "Mean Change", -8.7, "30 mg JZP385", "SD", 8.49
)

# --- Format Table ---
tetras_adl_wide <- tetras_adl_long %>% pivot_wider(names_from = arm, values_from = value) %>% rename(Statistic = statistic)
kable(tetras_adl_wide, caption = "Table 11: Change in TETRAS-ADL Subscale Score")
Table 11: Change in TETRAS-ADL Subscale Score
Statistic Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
N Analyzed 94.0 79.00 82.00 79.00
Mean Change -6.4 -6.30 -7.10 -8.70
SD 6.4 7.55 7.88 8.49
# --- Chart ---
tetras_adl_plot_data <- tetras_adl_long %>% pivot_wider(names_from = statistic, values_from = value)
ggplot(tetras_adl_plot_data, aes(x = arm, y = `Mean Change`, fill = arm)) +
  geom_bar(stat = "identity", show.legend = FALSE, alpha = 0.8) +
  geom_errorbar(aes(ymin = `Mean Change` - SD, ymax = `Mean Change` + SD), width = 0.2) +
  labs(title = "Mean Change in TETRAS-ADL Subscale Score", x = "Treatment Arm", y = "Mean Change from Baseline") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

5.2.4 TETRAS-PS Subscale

Description: The TETRAS Performance Subscale (PS) is a clinical rating scale performed by a blinded rater that quantifies tremor in the head, face, voice, limbs, and trunk. Each item is rated 0 (normal) to 4 (severe), with a total score from 0 to 64. Higher scores mean more severe ET.

# --- TETRAS-PS Data ---
tetras_ps_long <- tribble(
  ~arm, ~statistic, ~value,
  "Placebo", "N Analyzed", 94, "Placebo", "Mean Change", -5.4, "Placebo", "SD", 5.73,
  "10 mg JZP385", "N Analyzed", 79, "10 mg JZP385", "Mean Change", -5.3, "10 mg JZP385", "SD", 6.57,
  "20 mg JZP385", "N Analyzed", 82, "20 mg JZP385", "Mean Change", -5.1, "20 mg JZP385", "SD", 6.15,
  "30 mg JZP385", "N Analyzed", 78, "30 mg JZP385", "Mean Change", -5.5, "30 mg JZP385", "SD", 6.27
)

# --- Format Table ---
tetras_ps_wide <- tetras_ps_long %>% pivot_wider(names_from = arm, values_from = value) %>% rename(Statistic = statistic)
kable(tetras_ps_wide, caption = "Table 12: Change in TETRAS-PS Subscale Score")
Table 12: Change in TETRAS-PS Subscale Score
Statistic Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
N Analyzed 94.00 79.00 82.00 78.00
Mean Change -5.40 -5.30 -5.10 -5.50
SD 5.73 6.57 6.15 6.27
# --- Chart ---
tetras_ps_plot_data <- tetras_ps_long %>% pivot_wider(names_from = statistic, values_from = value)
ggplot(tetras_ps_plot_data, aes(x = arm, y = `Mean Change`, fill = arm)) +
  geom_bar(stat = "identity", show.legend = FALSE, alpha = 0.8) +
  geom_errorbar(aes(ymin = `Mean Change` - SD, ymax = `Mean Change` + SD), width = 0.2) +
  labs(title = "Mean Change in TETRAS-PS Subscale Score", x = "Treatment Arm", y = "Mean Change from Baseline") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

5.2.5 TETRAS Total Score

Description: The TETRAS total score is the sum of the full TETRAS-ADL and TETRAS-PS subscales. Scores range from 0 to 112, with higher scores representing more severe ET.

# --- TETRAS Total Score Data ---
tetras_total_long <- tribble(
  ~arm, ~statistic, ~value,
  "Placebo", "N Analyzed", 94, "Placebo", "Mean Change", -11.8, "Placebo", "SD", 10.18,
  "10 mg JZP385", "N Analyzed", 79, "10 mg JZP385", "Mean Change", -11.6, "10 mg JZP385", "SD", 11.54,
  "20 mg JZP385", "N Analyzed", 82, "20 mg JZP385", "Mean Change", -12.3, "20 mg JZP385", "SD", 11.95,
  "30 mg JZP385", "N Analyzed", 78, "30 mg JZP385", "Mean Change", -14.4, "30 mg JZP385", "SD", 12.20
)

# --- Format Table ---
tetras_total_wide <- tetras_total_long %>% pivot_wider(names_from = arm, values_from = value) %>% rename(Statistic = statistic)
kable(tetras_total_wide, caption = "Table 13: Change in TETRAS Total Score")
Table 13: Change in TETRAS Total Score
Statistic Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
N Analyzed 94.00 79.00 82.00 78.0
Mean Change -11.80 -11.60 -12.30 -14.4
SD 10.18 11.54 11.95 12.2
# --- Chart ---
tetras_total_plot_data <- tetras_total_long %>% pivot_wider(names_from = statistic, values_from = value)
ggplot(tetras_total_plot_data, aes(x = arm, y = `Mean Change`, fill = arm)) +
  geom_bar(stat = "identity", show.legend = FALSE, alpha = 0.8) +
  geom_errorbar(aes(ymin = `Mean Change` - SD, ymax = `Mean Change` + SD), width = 0.2) +
  labs(title = "Mean Change in TETRAS Total Score", x = "Treatment Arm", y = "Mean Change from Baseline") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

5.2.6 Quality of Life in Essential Tremor (QUEST)

Description: The QUEST is a 30-item questionnaire assessing the impact of ET on health-related quality of life across 5 subscales (physical, psychosocial, communication, hobbies/leisure, and work/finance). Each dimension is standardized to a range of 0 to 100, with higher scores indicating greater dissatisfaction or disability.

# --- QUEST Data ---
quest_long <- tribble(
  ~subscale, ~arm, ~mean_change, ~sd,
  "Communication", "Placebo", -5.5, 15.35, "Communication", "10 mg JZP385", -3.3, 15.62, "Communication", "20 mg JZP385", -3.5, 14.67, "Communication", "30 mg JZP385", -7.8, 16.18,
  "Work/Finance", "Placebo", -5.8, 16.44, "Work/Finance", "10 mg JZP385", 1.0, 17.26, "Work/Finance", "20 mg JZP385", -6.1, 15.61, "Work/Finance", "30 mg JZP385", -6.7, 15.11,
  "Hobbies/Leisure", "Placebo", -1.1, 29.35, "Hobbies/Leisure", "10 mg JZP385", -8.9, 31.66, "Hobbies/Leisure", "20 mg JZP385", -3.5, 36.50, "Hobbies/Leisure", "30 mg JZP385", -10.2, 33.81,
  "Physical", "Placebo", -11.0, 17.65, "Physical", "10 mg JZP385", -5.1, 17.60, "Physical", "20 mg JZP385", -10.1, 16.85, "Physical", "30 mg JZP385", -13.4, 20.24,
  "Psychosocial", "Placebo", -6.8, 14.93, "Psychosocial", "10 mg JZP385", -2.9, 16.57, "Psychosocial", "20 mg JZP385", -6.1, 15.79, "Psychosocial", "30 mg JZP385", -6.2, 15.40
)

# --- Format Table ---
quest_wide <- quest_long %>%
  mutate(`Mean (SD)` = paste0(mean_change, " (", sd, ")")) %>%
  select(subscale, arm, `Mean (SD)`) %>%
  pivot_wider(names_from = arm, values_from = `Mean (SD)`) %>%
  rename(Subscale = subscale)

kable(quest_wide, caption = "Table 14: Change in QUEST Subscale Scores (Mean (SD))")
Table 14: Change in QUEST Subscale Scores (Mean (SD))
Subscale Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
Communication -5.5 (15.35) -3.3 (15.62) -3.5 (14.67) -7.8 (16.18)
Work/Finance -5.8 (16.44) 1 (17.26) -6.1 (15.61) -6.7 (15.11)
Hobbies/Leisure -1.1 (29.35) -8.9 (31.66) -3.5 (36.5) -10.2 (33.81)
Physical -11 (17.65) -5.1 (17.6) -10.1 (16.85) -13.4 (20.24)
Psychosocial -6.8 (14.93) -2.9 (16.57) -6.1 (15.79) -6.2 (15.4)
# --- Chart ---
ggplot(quest_long, aes(x = arm, y = mean_change, fill = arm)) +
  geom_bar(stat = "identity", show.legend = FALSE, alpha = 0.8) +
  geom_errorbar(aes(ymin = mean_change - sd, ymax = mean_change + sd), width = 0.4) +
  facet_wrap(~subscale, scales = "free_x") +
  labs(title = "Mean Change in QUEST Subscale Scores", subtitle = "Negative change indicates improvement.", x = "Treatment Arm", y = "Mean Change from Baseline") +
  theme_minimal(base_size = 12) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"), plot.subtitle = element_text(hjust = 0.5), axis.text.x = element_text(angle = 45, hjust = 1))

6. Safety Profile: Adverse Events

Adverse events were collected in the 416 participants who received at least one dose of study treatment (Safety Analysis Set).

6.1 All-Cause Mortality

mortality_long <- tribble(
  ~arm, ~subjects_affected, ~subjects_at_risk,
  "Placebo", 1, 104,
  "10 mg JZP385", 0, 104,
  "20 mg JZP385", 0, 103,
  "30 mg JZP385", 0, 105
) %>%
  mutate(percentage = round((subjects_affected / subjects_at_risk) * 100, 2),
         `Affected / At Risk (%)` = paste0(subjects_affected, "/", subjects_at_risk, " (", percentage, "%)"))

mortality_wide <- mortality_long %>%
  select(arm, `Affected / At Risk (%)`) %>%
  pivot_wider(names_from = arm, values_from = `Affected / At Risk (%)`) %>%
  mutate(Statistic = "Total Deaths") %>%
  select(Statistic, everything())

kable(mortality_wide, caption = "Table 15: All-Cause Mortality (N (%))")
Table 15: All-Cause Mortality (N (%))
Statistic Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
Total Deaths 1/104 (0.96%) 0/104 (0%) 0/103 (0%) 0/105 (0%)

6.2 Serious Adverse Events (SAEs)

# --- SAE Summary Data (Total Subjects with at least one SAE) ---
sae_summary <- tribble(
  ~arm, ~subjects_affected, ~subjects_at_risk,
  "Placebo", 3, 104,
  "10 mg JZP385", 3, 104,
  "20 mg JZP385", 4, 103,
  "30 mg JZP385", 4, 105
) %>%
  mutate(percentage = round((subjects_affected / subjects_at_risk) * 100, 2),
         `Affected / At Risk (%)` = paste0(subjects_affected, "/", subjects_at_risk, " (", percentage, "%)"))

sae_summary_wide <- sae_summary %>%
  select(arm, `Affected / At Risk (%)`) %>%
  pivot_wider(names_from = arm, values_from = `Affected / At Risk (%)`) %>%
  mutate(Statistic = "Total Subjects with SAEs") %>%
  select(Statistic, everything())

kable(sae_summary_wide, caption = "Table 16: Total Subjects with Serious Adverse Events")
Table 16: Total Subjects with Serious Adverse Events
Statistic Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
Total Subjects with SAEs 3/104 (2.88%) 3/104 (2.88%) 4/103 (3.88%) 4/105 (3.81%)
# --- Detailed Serious AE Data ---
sae_long <- tribble(
  ~arm, ~event, ~subjects_affected, ~subjects_at_risk,
  "Placebo", "Pulmonary fibrosis", 1, 104, "Placebo", "Urinary tract infection", 1, 104, "Placebo", "Accidental overdose", 1, 104,
  "10 mg JZP385", "Transient ischaemic attack", 1, 104, "10 mg JZP385", "Chest pain", 1, 104, "10 mg JZP385", "Dyspnoea", 1, 104,
  "20 mg JZP385", "Coronary artery disease", 1, 103, "20 mg JZP385", "Fall", 1, 103, "20 mg JZP385", "Foot fracture", 1, 103, "20 mg JZP385", "Abscess limb", 1, 103, "20 mg JZP385", "Pneumonia", 1, 103,
  "30 mg JZP385", "Vertigo positional", 1, 105, "30 mg JZP385", "Limb injury", 1, 105, "30 mg JZP385", "Intercostal neuralgia", 1, 105, "30 mg JZP385", "Pulmonary embolism", 1, 105, "30 mg JZP385", "Deep vein thrombosis", 1, 105
) %>%
  mutate(percentage = round((subjects_affected / subjects_at_risk) * 100, 1),
         count_pct = paste0(subjects_affected, " (", percentage, "%)"))

# --- Format Table ---
sae_wide <- sae_long %>%
  select(event, arm, count_pct) %>%
  pivot_wider(names_from = arm, values_from = count_pct, values_fill = "0 (0.0%)") %>%
  rename(`Adverse Event` = event)

kable(sae_wide, caption = "Table 17: Detailed Serious Adverse Events (N (%))")
Table 17: Detailed Serious Adverse Events (N (%))
Adverse Event Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
Pulmonary fibrosis 1 (1%) 0 (0.0%) 0 (0.0%) 0 (0.0%)
Urinary tract infection 1 (1%) 0 (0.0%) 0 (0.0%) 0 (0.0%)
Accidental overdose 1 (1%) 0 (0.0%) 0 (0.0%) 0 (0.0%)
Transient ischaemic attack 0 (0.0%) 1 (1%) 0 (0.0%) 0 (0.0%)
Chest pain 0 (0.0%) 1 (1%) 0 (0.0%) 0 (0.0%)
Dyspnoea 0 (0.0%) 1 (1%) 0 (0.0%) 0 (0.0%)
Coronary artery disease 0 (0.0%) 0 (0.0%) 1 (1%) 0 (0.0%)
Fall 0 (0.0%) 0 (0.0%) 1 (1%) 0 (0.0%)
Foot fracture 0 (0.0%) 0 (0.0%) 1 (1%) 0 (0.0%)
Abscess limb 0 (0.0%) 0 (0.0%) 1 (1%) 0 (0.0%)
Pneumonia 0 (0.0%) 0 (0.0%) 1 (1%) 0 (0.0%)
Vertigo positional 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (1%)
Limb injury 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (1%)
Intercostal neuralgia 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (1%)
Pulmonary embolism 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (1%)
Deep vein thrombosis 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (1%)

6.3 Non-Serious Adverse Events

# --- NSAE Summary Data (Total Subjects with at least one NSAE) ---
nsae_summary <- tribble(
  ~arm, ~subjects_affected, ~subjects_at_risk,
  "Placebo", 20, 104,
  "10 mg JZP385", 35, 104,
  "20 mg JZP385", 35, 103,
  "30 mg JZP385", 46, 105
) %>%
  mutate(percentage = round((subjects_affected / subjects_at_risk) * 100, 2),
         `Affected / At Risk (%)` = paste0(subjects_affected, "/", subjects_at_risk, " (", percentage, "%)"))

nsae_summary_wide <- nsae_summary %>%
  select(arm, `Affected / At Risk (%)`) %>%
  pivot_wider(names_from = arm, values_from = `Affected / At Risk (%)`) %>%
  mutate(Statistic = "Total Subjects with NSAEs (>=5%)") %>%
  select(Statistic, everything())

kable(nsae_summary_wide, caption = "Table 18: Total Subjects with Non-Serious Adverse Events (Frequency >= 5%)")
Table 18: Total Subjects with Non-Serious Adverse Events (Frequency >= 5%)
Statistic Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
Total Subjects with NSAEs (>=5%) 20/104 (19.23%) 35/104 (33.65%) 35/103 (33.98%) 46/105 (43.81%)
# --- Detailed Non-Serious AE Data ---
nsae_long <- tribble(
  ~arm, ~event, ~subjects_affected, ~subjects_at_risk,
  "Placebo", "Dizziness", 7, 104, "Placebo", "Headache", 5, 104, "Placebo", "Nasopharyngitis", 5, 104, "Placebo", "Somnolence", 4, 104,
  "10 mg JZP385", "Dizziness", 11, 104, "10 mg JZP385", "Headache", 8, 104, "10 mg JZP385", "Diarrhoea", 6, 104, "10 mg JZP385", "Dry mouth", 6, 104, "10 mg JZP385", "Nausea", 6, 104, "10 mg JZP385", "Anxiety", 6, 104, "10 mg JZP385", "Nasopharyngitis", 6, 104, "10 mg JZP385", "Insomnia", 5, 104,
  "20 mg JZP385", "Dizziness", 11, 103, "20 mg JZP385", "Disturbance in attention", 6, 103, "20 mg JZP385", "Paraesthesia", 6, 103, "20 mg JZP385", "Somnolence", 5, 103,
  "30 mg JZP385", "Dizziness", 12, 105, "30 mg JZP385", "Paraesthesia", 9, 105, "30 mg JZP385", "Tremor", 7, 105, "30 mg JZP385", "Somnolence", 7, 105, "30 mg JZP385", "Fatigue", 7, 105, "30 mg JZP385", "Insomnia", 7, 105
) %>%
  mutate(percentage = round((subjects_affected / subjects_at_risk) * 100, 1),
         count_pct = paste0(subjects_affected, " (", percentage, "%)"))

# --- Format Table ---
nsae_wide <- nsae_long %>%
  select(event, arm, count_pct) %>%
  pivot_wider(names_from = arm, values_from = count_pct, values_fill = "0 (0.0%)") %>%
  rename(`Adverse Event` = event)

kable(nsae_wide, caption = "Table 19: Detailed Common Non-Serious Adverse Events (N (%))")
Table 19: Detailed Common Non-Serious Adverse Events (N (%))
Adverse Event Placebo 10 mg JZP385 20 mg JZP385 30 mg JZP385
Dizziness 7 (6.7%) 11 (10.6%) 11 (10.7%) 12 (11.4%)
Headache 5 (4.8%) 8 (7.7%) 0 (0.0%) 0 (0.0%)
Nasopharyngitis 5 (4.8%) 6 (5.8%) 0 (0.0%) 0 (0.0%)
Somnolence 4 (3.8%) 0 (0.0%) 5 (4.9%) 7 (6.7%)
Diarrhoea 0 (0.0%) 6 (5.8%) 0 (0.0%) 0 (0.0%)
Dry mouth 0 (0.0%) 6 (5.8%) 0 (0.0%) 0 (0.0%)
Nausea 0 (0.0%) 6 (5.8%) 0 (0.0%) 0 (0.0%)
Anxiety 0 (0.0%) 6 (5.8%) 0 (0.0%) 0 (0.0%)
Insomnia 0 (0.0%) 5 (4.8%) 0 (0.0%) 7 (6.7%)
Disturbance in attention 0 (0.0%) 0 (0.0%) 6 (5.8%) 0 (0.0%)
Paraesthesia 0 (0.0%) 0 (0.0%) 6 (5.8%) 9 (8.6%)
Tremor 0 (0.0%) 0 (0.0%) 0 (0.0%) 7 (6.7%)
Fatigue 0 (0.0%) 0 (0.0%) 0 (0.0%) 7 (6.7%)
# --- Chart ---
ggplot(nsae_long, aes(x = reorder(event, percentage), y = percentage, fill = arm)) +
  geom_bar(stat = "identity", position = "dodge") +
  coord_flip() +
  labs(title = "Common Non-Serious Adverse Events by Treatment Arm", x = "Adverse Event", y = "Percentage of Subjects Affected (%)", fill = "Treatment Arm") +
  scale_y_continuous(labels = scales::percent_format(scale = 1)) +
  theme_minimal(base_size = 12) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

7. Interpretations and Analysis of TETRAS-ADL Endpoint

This section provides a deeper statistical analysis of the TETRAS-ADL (Activities of Daily Living) subscale endpoint, which measures the change from baseline. The analysis includes pairwise comparisons against the placebo, an assessment of the dose-response trend, and model fitting using MCPMod to explore various dose-response shapes.

# --- Data Setup for ADL Analysis ---
df <- tibble::tribble(
  ~Group,         ~N,  ~Mean, ~SD,
  "Placebo",      94,  -6.4, 6.40,
  "10 mg JZP385", 79,  -6.3, 7.55,
  "20 mg JZP385", 82,  -7.1, 7.88,
  "30 mg JZP385", 79,  -8.7, 8.49
) %>% 
  mutate(
    SE = SD / sqrt(N),
    tcrit = qt(0.975, df = N - 1),
    CI_Lower = Mean - tcrit * SE,
    CI_Upper = Mean + tcrit * SE,
    Dose_mg = c(0,10,20,30)
  )

df %>% 
  mutate(across(c(Mean, SD, SE, CI_Lower, CI_Upper), ~round(.x, 3))) %>% 
  kable(caption = "Summary statistics and 95% CIs (per arm) for TETRAS-ADL.") %>% 
  kable_styling(full_width = FALSE)
Summary statistics and 95% CIs (per arm) for TETRAS-ADL.
Group N Mean SD SE tcrit CI_Lower CI_Upper Dose_mg
Placebo 94 -6.4 6.40 0.660 1.985802 -7.711 -5.089 0
10 mg JZP385 79 -6.3 7.55 0.849 1.990847 -7.991 -4.609 10
20 mg JZP385 82 -7.1 7.88 0.870 1.989686 -8.831 -5.369 20
30 mg JZP385 79 -8.7 8.49 0.955 1.990847 -10.602 -6.798 30
# --- Pairwise Comparisons vs Placebo ---
placebo <- df %>% filter(Group == "Placebo") %>% slice(1)

compare_vs_placebo <- function(row, plc){
  if(row$Group == "Placebo") return(NULL)
  n1 <- row$N; n0 <- plc$N
  m1 <- row$Mean; m0 <- plc$Mean
  s1 <- row$SD; s0 <- plc$SD
  sp <- sqrt(((n1 - 1)*s1^2 + (n0 - 1)*s0^2) / (n1 + n0 - 2))
  se <- sp * sqrt(1/n1 + 1/n0)
  tstat <- (m1 - m0) / se
  df_t <- n1 + n0 - 2
  pval <- 2 * pt(-abs(tstat), df = df_t)
  d <- (m1 - m0) / sp
  tibble(
    Group = row$Group,
    N = n1,
    Mean = m1,
    SD = s1,
    `Cohen_d` = d,
    `t` = tstat,
    `df` = df_t,
    `p_value` = pval
  )
}

cmp <- purrr::map_dfr(df %>% filter(Group != "Placebo") %>% split(.$Group),
                      ~compare_vs_placebo(., placebo)) %>% 
  mutate(`p_bonferroni` = p.adjust(p_value, method = "bonferroni"),
         `p_holm`       = p.adjust(p_value, method = "holm"),
         `p_fdr_bh`     = p.adjust(p_value, method = "BH"))

cmp %>% 
  mutate(across(c(Cohen_d, t, p_value, p_bonferroni, p_holm, p_fdr_bh), ~round(.x, 4))) %>% 
  kable(caption = "Pairwise tests vs Placebo (equal variances) with multiplicity adjustments for TETRAS-ADL.") %>% 
  kable_styling(full_width = FALSE)
Pairwise tests vs Placebo (equal variances) with multiplicity adjustments for TETRAS-ADL.
Group N Mean SD Cohen_d t df p_value p_bonferroni p_holm p_fdr_bh
10 mg JZP385 79 -6.3 7.55 0.0144 0.0943 171 0.9250 1.000 1.000 0.9250
20 mg JZP385 82 -7.1 7.88 -0.0982 -0.6500 174 0.5166 1.000 1.000 0.7749
30 mg JZP385 79 -8.7 8.49 -0.3097 -2.0290 171 0.0440 0.132 0.132 0.1320

Robust Pairwise Comparisons

To provide a more robust analysis, this section includes comparisons using Welch’s t-test (which does not assume equal variances), Hedges’ g for a bias-corrected effect size, and a non-parametric bootstrap confidence interval for the mean difference.

Robust Pairwise Comparisons vs Placebo for TETRAS-ADL.
Group Welch p-value Hedges’ g Bootstrap 95% CI
10 mg JZP385 0.9261 0.0143 [-1.69, 2.27]
20 mg JZP385 0.5225 -0.0978 [-2.11, 2.01]
30 mg JZP385 0.0495 -0.3083 [-5.01, -0.35]
Dose–response linear trend on arm means for TETRAS-ADL.
Model Slope Intercept p_value (slope) R2
Unweighted OLS -0.0770 -5.9700 0.1034 0.8039
Inverse-Variance Weighted -0.0684 -6.1217 0.1180 0.7779

## MCPMod
## 
## ***************************************
## MCP part 
## ***************************************
## Multiple Contrast Test
## 
## Contrasts:
##    linear   emax quadratic sigEmax logistic
## 0  -0.774 -0.844     0.646  -0.743   -0.764
## 10 -0.078  0.100     0.237  -0.167   -0.107
## 20  0.297  0.344    -0.180   0.398    0.323
## 30  0.554  0.400    -0.703   0.511    0.548
## 
## Contrast Correlation:
##           linear   emax quadratic sigEmax logistic
## linear     1.000  0.960    -0.960   0.987    0.999
## emax       0.960  1.000    -0.844   0.942    0.955
## quadratic -0.960 -0.844     1.000  -0.943   -0.960
## sigEmax    0.987  0.942    -0.943   1.000    0.993
## logistic   0.999  0.955    -0.960   0.993    1.000
## 
## Multiple Contrast Test:
##           t-Stat  adj-p
## quadratic  2.115 0.0417
## emax      -1.548 1.0000
## sigEmax   -1.870 1.0000
## linear    -1.905 1.0000
## logistic  -1.908 1.0000
## 
## ***************************************
## Mod part 
## ***************************************
## Dose Response Model
## 
## Model: quadratic 
## Fit-type: general 
## 
## Coefficients with approx. stand. error:
##    Estimate Std. Error
## e0 -6.39703    0.65022
## b1  0.05083    0.12254
## b2 -0.00426    0.00419
## 
## Fitted to:
##    0   10   20   30 
## -6.4 -6.3 -7.1 -8.7 
## 
## with Covariance Matrix:
##        0    10    20    30
## 0  0.436 0.000 0.000 0.000
## 10 0.000 0.722 0.000 0.000
## 20 0.000 0.000 0.757 0.000
## 30 0.000 0.000 0.000 0.912
## 
## ***************************************
## Model selection criteria (AIC):
## ***************************************
## quadratic 
##  6.000682 
## 
## Selected model: quadratic 
## 
## ***************************************
## Estimated TD, Delta=2
## ***************************************
## quadratic 
##        NA 
## quadratic 
##        NA

8. Conclusion

The analysis indicates that the 30 mg dose of JZP385 showed the greatest numerical improvement in the primary efficacy endpoint, as well as in key secondary endpoints measuring activities of daily living, overall tremor score, and quality of life. The statistical analysis of the TETRAS-ADL endpoint suggests a dose-dependent effect, with the 30 mg dose showing a statistically significant improvement over placebo after multiplicity adjustments. Adverse events, particularly dizziness, paraesthesia, and somnolence, also appeared to be dose-dependent. This report provides a foundational analysis of the trial results; further statistical testing would be required to determine the significance of all findings.