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.