InvestorsHub Logo
Followers 14
Posts 608
Boards Moderated 0
Alias Born 06/05/2015

Re: PPHMVERYLONG post# 235230

Wednesday, 09/16/2015 1:30:09 PM

Wednesday, September 16, 2015 1:30:09 PM

Post# of 346050
I disagree, I think MD is correct - that once enrollment is completed and first look-in is announced- the stock will move. Perhaps now til December is the most risky?

I ran an updated more realistic simulation. I show that if we go past 12-15 for first look in we have a good chance that we may be beating opdivo results. My initial simulation did not take into account that the OS is a median and 10% will live greater than 5 years and 30% will live > year. My guess now is that pphm management is projecting better than opdivo results or they are taking into account slowness to report first look-in triggers or not including earlier events than the median or initial enrollment is slower than this simulation. See code below- this simulation shows dec and April for first and send look in. When I did not take into account earlier than median events - this showed jan 2016 and May 2016.

I don't have a lot of time to do this as my days are really busy, so if you see anything that needs to be reworked- let me know.


-- new simulation shows - with 77% of the enrollment following the median OS of
-- 8 vs 10 and 10.7 vs 15 OS months (sicker vs healthier and doce vs doce & bavi
-- and 11% do not event > 5 years study = 69 = 11%
-- and 30% - 11% = 21% live to 20 months = 125
--
-- simulation table simulates enrollment per month only

TRUNCATE TABLE simulation;
CREATE TABLE simulation
(
enroll_month DATE,
days_in_month NUMBER,
number_enrolled NUMBER
);

BEGIN
-- insert into simulation values ('01-FEB-2014',null,2);
INSERT INTO simulation
VALUES ('01-MAR-2014', NULL, 4);

INSERT INTO simulation
VALUES ('01-APR-2014', NULL, 10);
INSERT INTO simulation
VALUES ('01-MAY-2014', NULL, 28);
INSERT INTO simulation
VALUES ('01-JUN-2014', NULL, 26);
INSERT INTO simulation
VALUES ('01-JUL-2014', NULL, 31);
INSERT INTO simulation
VALUES ('01-AUG-2014', NULL, 31);
INSERT INTO simulation
VALUES ('01-SEP-2014', NULL, 31);
INSERT INTO simulation
VALUES ('01-OCT-2014', NULL, 32);
INSERT INTO simulation
VALUES ('01-NOV-2014', NULL, 33);
INSERT INTO simulation
VALUES ('01-DEC-2014', NULL, 34);
INSERT INTO simulation
VALUES ('01-JAN-2015', NULL, 35);
INSERT INTO simulation
VALUES ('01-FEB-2015', NULL, 34);
INSERT INTO simulation
VALUES ('01-MAR-2015', NULL, 44);
INSERT INTO simulation
VALUES ('01-APR-2015', NULL, 33);
INSERT INTO simulation
VALUES ('01-MAY-2015', NULL, 32);
INSERT INTO simulation
VALUES ('01-JUN-2015', NULL, 31);
INSERT INTO simulation
VALUES ('01-JUL-2015', NULL, 23);
INSERT INTO simulation
VALUES ('01-AUG-2015', NULL, 23);
INSERT INTO simulation
VALUES ('01-SEP-2015', NULL, 23);
INSERT INTO simulation
VALUES ('01-OCT-2015', NULL, 24);
INSERT INTO simulation
VALUES ('01-NOV-2015', NULL, 15);
INSERT INTO simulation
VALUES ('01-DEC-2015', NULL, 8);
END;
COMMIT;

SELECT SUM (number_enrolled) FROM simulation;

UPDATE simulation
SET days_in_month = TO_CHAR (LAST_DAY (enroll_month), 'DD');
COMMIT;

SELECT * FROM simulation;

DROP TABLE simulation_mos;

CREATE TABLE simulation_mos
(
pk NUMBER,
mos NUMBER (4, 2),
category_name VARCHAR2 (50)
);
BEGIN
INSERT INTO simulation_mos
VALUES (1, 15.0, 'best ecog 0 healthy bavi');

INSERT INTO simulation_mos
VALUES (2, 10.7, 'ecog 0 healthy no bavi');
INSERT INTO simulation_mos
VALUES (3, 10.0, 'ecog 1 unhealthy bavi'); -- changed from 9.7 to 10
INSERT INTO simulation_mos
VALUES (4, 8.0, 'worst ecog 1 unhealthy no bavi');
COMMIT;
END;

DROP TABLE full_simulation;
-- full simulation calculates a date of event based on the simulation mos ok assigned
--then randomized portions of these buckets per overall known trends

CREATE TABLE full_simulation
(
pk_id NUMBER,
dt_enrolled DATE,
dt_event DATE,
simulation_mos_pk NUMBER
);

CREATE SEQUENCE test3_pk START WITH 1;

TRUNCATE TABLE simulation;
DECLARE
beg_mon DATE;
end_mon DATE;
cur_mon DATE;
enrolled_for_month NUMBER;
enroll_counter NUMBER;
days_for_month NUMBER;
month_day NUMBER;
mos_pk_counter NUMBER := 1;
BEGIN
SELECT MIN (enroll_month), MAX (enroll_month)
INTO beg_mon, end_mon
FROM simulation;
cur_mon := beg_mon;
WHILE cur_mon <= end_mon
LOOP
SELECT number_enrolled, days_in_month
INTO enrolled_for_month, days_for_month
FROM simulation
WHERE TRUNC (cur_mon) = TRUNC (enroll_month);

enroll_counter := 1;

month_day := 1;

WHILE enroll_counter <= enrolled_for_month
LOOP
INSERT INTO full_simulation
VALUES (
test3_pk.NEXTVAL,
TO_DATE (
TO_CHAR (cur_mon, 'MM')
|| '/'
|| month_day
|| '/'
|| TO_CHAR (cur_mon, 'YYYY'),
'MM/DD/YYYY'),
NULL,
mos_pk_counter);
enroll_counter := enroll_counter + 1;
month_day := month_day + 1;
mos_pk_counter := mos_pk_counter + 1;

IF mos_pk_counter = 5
THEN
mos_pk_counter := 1;
END IF;
IF month_day = days_for_month
THEN
month_day := 1;
END IF;
END LOOP;
cur_mon := ADD_MONTHS (cur_mon, 1);
END LOOP;
END;

COMMIT;

-- set 30% to no event, the rest get OS median event
UPDATE full_simulation fs
SET dt_event =
(SELECT (sm.mos * 30.437) + fs.dt_enrolled
FROM simulation_mos sm
WHERE fs.simulation_mos_pk = sm.pk)
WHERE EXISTS
(SELECT 1
FROM simulation_mos sm
WHERE fs.simulation_mos_pk = sm.pk)
AND MOD (fs.pk_id, 3) IN (0, 1);
COMMIT;
-- set 65% of no event to 20 months out update 125 members of the no event
update full_simulation fs
set dt_event = 20 * 30.437 + fs.dt_enrolled
where dt_event is null and mod(fs.pk_id,100) between 0 and 64;
commit;
-- update 40 out of 196 bavi matients extra to event 20 months out based on
-- 20 %of bavi patients living longer
commit;
update full_simulation fs
set dt_event = 20 * 30.437 + fs.dt_enrolled
where exists ( select 1 from simulation_mos sm
where SM.PK = FS.SIMULATION_MOS_PK and SM.PK in (1,3)
and dt_event = (sm.mos * 30.437) + fs.dt_enrolled )
and mod(fs.pk_id,100) between 0 and 20
and fs.simulation_mos_pk in (1,3);
commit;

-- update 20% to live 2 months < OS (44 patients)and 10% to live 3 months < OS where dt_event is median OS)

UPDATE full_simulation fs
SET dt_event =
(SELECT ((sm.mos -2) * 30.437) + fs.dt_enrolled
FROM simulation_mos sm
WHERE fs.simulation_mos_pk = sm.pk
and dt_event = (sm.mos * 30.437) + fs.dt_enrolled)
WHERE EXISTS
(SELECT 1
FROM simulation_mos sm
WHERE fs.simulation_mos_pk = sm.pk
and dt_event = (sm.mos * 30.437) + fs.dt_enrolled)
and mod(fs.pk_id,100) between 0 and 20;
commit;
UPDATE full_simulation fs
SET dt_event =
(SELECT ((sm.mos -3) * 30.437) + fs.dt_enrolled
FROM simulation_mos sm
WHERE fs.simulation_mos_pk = sm.pk
and dt_event = (sm.mos * 30.437) + fs.dt_enrolled)
WHERE EXISTS
(SELECT 1
FROM simulation_mos sm
WHERE fs.simulation_mos_pk = sm.pk
and dt_event = (sm.mos * 30.437) + fs.dt_enrolled)
and mod(fs.pk_id,100) between 21 and 30;
commit;



SELECT sm.mos, sm.category_name, median(months_between(dt_event,dt_enrolled)) FROM full_simulation fs, simulation_mos sm
where SM.PK = FS.SIMULATION_MOS_PK
group by sm.mos, sm.category_name;
SQL Statement which produced this data:
-- this shows median is pretty exact with this simulation
SELECT sm.mos, sm.category_name, median(months_between(dt_event,dt_enrolled)) FROM full_simulation fs, simulation_mos sm
where SM.PK = FS.SIMULATION_MOS_PK
group by sm.mos, sm.category_name;
MOS,CATEGORY_NAME,MEDIAN(MONTHS_BETWEEN(DT_EVENT,DT_ENROLLED))
8,'worst ecog 0 unhealthy no bavi',8
10,'ecog 1 unhealthy bavi',10
15,'best ecog 0 healthy bavi',15
10.7,'ecog 0 healthy no bavi',10.6992226702509

SELECT * FROM full_simulation fs, simulation_mos sm
where SM.PK = FS.SIMULATION_MOS_PK and SM.PK in (1,3)
and dt_event = (sm.mos * 30.437) + fs.dt_enrolled
order by dt_enrolled;
-- 193 events for first look in, and 292 events for second look-in n=585
-- 12/16 for first look-in, 4/16 for second look-in
SELECT COUNT (*)
FROM full_simulation
WHERE dt_event < ADD_MONTHS (SYSDATE, 7);

SELECT COUNT (*)
FROM full_simulation
WHERE dt_event IS NULL;
Volume:
Day Range:
Bid:
Ask:
Last Trade Time:
Total Trades:
  • 1D
  • 1M
  • 3M
  • 6M
  • 1Y
  • 5Y
Recent CDMO News