Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: Recency Weighted cumulative exposures
From
"Carmine Rossi, Mr" <[email protected]>
To
"<[email protected]>" <[email protected]>
Subject
Re: st: Recency Weighted cumulative exposures
Date
Thu, 14 Nov 2013 10:17:34 +0000
Thank you again Mr. Radyakin and all STATA listers for your time.
I will provide one more (fresh) numerical example, perhaps it would be more clear. It is for one id with 7 visits. "Result" is the variable I am looking to create. It is correct and follows the methods outlined in Abrahamowicz et al, and I am a student of his (2006, JCE, http://www.ncbi.nlm.nih.gov/pubmed/16549262). I used an excel spreadsheet to calculate the "result" variable, as I still am unable to program it in STATA, but this hand calculation method is tedious and impossible for large datasets (see all my calculations below).
id time dose result
1 1 0 0
1 2 5 5
1 3 8 12.930
1 4 10 22.613
1 5 8 29.822
1 6 5 33.369
1 7 10 41.186
To calculate the "result", which is a recency-weighted cumulative sum, the following calculations are made at every time point.
The weight function, selected a priori is: exp((-((delta_t)^2))/(70.7))
-------Hand Calculations begin---------
For time=1:
id time dose delta_t weight dose*weight cumulat_sum(dose*weight)
1 1 0 0 1 0 0 [this is result shown at time==1]
For time=2:
id time dose delta_t weight dose*weight cumulat_sum(dose*weight)
1 1 0 1 0.98595 0 0
1 2 5 0 1 5 5 [this is result shown at time==2]
For time=3:
id time dose delta_t weight dose*weight cumulat_sum(dose*weight)
1 1 0 2 0.9450 0 0
1 2 5 1 0.98595 4.930 4.930
1 3 8 0 1 8 12.930 [this is result shown at time==3]
For time=4:
id time dose delta_t weight dose*weight cumulat_sum(dose*weight)
1 1 0 3 0.8805 0 0
1 2 5 2 0.9450 4.725 4.725
1 3 8 1 0.98595 7.888 12.613
1 4 10 0 1 10 22.613 [this is result shown at time==4]
For time=5:
id time dose delta_t weight dose*weight cumulat_sum(dose*weight)
1 1 0 4 0.7975 0 0
1 2 5 3 0.8805 4.402 4.402
1 3 8 2 0.9450 7.560 11.962
1 4 10 1 0.98595 9.860 21.822
1 5 8 0 1 8 29.822 [this is result shown at time==5]
For time=6:
id time dose delta_t weight dose*weight cumulat_sum(dose*weight)
1 1 0 5 0.7022 0 0
1 2 5 4 0.7975 3.987 3.987
1 3 8 3 0.8805 7.044 11.031
1 4 10 2 0.9450 9.450 20.481
1 5 8 1 0.98595 7.888 28.369
1 6 5 0 1 5 33.369 [this is result shown at time==6]
For time=7:
id time dose delta_t weight dose*weight cumulat_sum(dose*weight)
1 1 0 6 0.6010 0 0
1 2 5 5 0.7022 3.511 3.511
1 3 8 4 0.7975 6.380 9.891
1 4 10 3 0.8805 8.805 18.696
1 5 8 2 0.9450 7.560 26.256
1 6 5 1 0.98595 4.930 31.186
1 7 10 0 1 10 41.186 [this is result shown at time==7]
-------Hand Calculations end---------
Notice how the weights are not fixed. They change depending on which time point you are calculating the recent cumulative sum. This is why I initially thought I needed to use a for values loop or something similar.
This is what I am trying to program, and so far, it has been very difficult.
I want to thank you again for looking at this and giving it a shot. I appreciate it very much!
Have a great day,
Carmine Rossi
PhD Candidate, Epidemiology
[email protected]
On 2013-11-13, at 11:42 PM, Sergiy Radyakin <[email protected]>
wrote:
> On Wed, Nov 13, 2013 at 7:42 PM, Carmine Rossi, Mr
> <[email protected]> wrote:
>> Hi Mr. Radyakin,
>>
>> Thank you very much for your email and help. However, the code is not correct.
>
> Well it is pretty close to what you are looking for. The main
> difference is that 'delta time' was not defined in your formula, so I
> took absolute time, and you now describe relative time. That is also
> easily fixable:
>
> do http://radyakin.org/statalist/2013111301/recencyw2.do
>
> I am still NOT getting your exact numeric values, but it might be due
> to the rounding. Is your magic number 70 shown exactly? Is it same for
> all IDs? Are there any digits not shown for dosage? You may want to
> share your spreadsheet to reduce the traffic.
>
> Now I expect this modification to take care of both issues you
> mentioned since they essentially appear the same to me. Except I can't
> agree that the weights depend on the sum. I'd insist that the sum
> depends on the weights. The weights depend on the time.
>
> Best, Sergiy
>
>>
>> There are two issues: 1) The number of observations per ID is not constant, so for the macro `mt', it would need to be specific per id. For example, ID==1 has 5 time points, and ID==2 has 4 time points.
>>
>> 2) The weights are not fixed. This is more difficult for me to explain, but I will try.
>>
>> To get the "result" for ID==1 and time==5, I used the spreadsheet calculations shown in the previous email.
>> However, if I was to calculate the "result" at time==4, I would use the following weights:
>>
>> id time dose delta_t w(t) dose(t)*weight(t) cumulative_sum
>> 1 1 0 3 0.88 0 0
>> 1 2 0 2 0.94 0 0
>> 1 3 2.6 1 0.99 2.574 2.574
>> 1 4 2.6 0 1 2.6 5.174
>>
>> Notice how, now the weight, w(t), at time==4 is equal to 1, when I want to calculate the cumulative sum at time==4.
>>
>> For this reason, I thought I would need loops, and this is why I am asking the STATA community for help. My major issue is that the weight’s are not fixed and they change depending on the cumulative sum that I want to calculate at each time point.
>>
>> Thank you again for trying to help,
>> -Carmine Rossi
>> PhD Candidate, Epidemiology
>> [email protected]
>>
>> On 2013-11-13, at 5:23 PM, Sergiy Radyakin <[email protected]> wrote:
>>
>>> Carmine, no loops are really necessary:
>>>
>>> do http://radyakin.org/statalist/2013111301/recencyw.do
>>>
>>> Hope this helps, Sergiy Radyakin
>>>
>>>
>>> On Wed, Nov 13, 2013 at 5:08 PM, Carmine Rossi, Mr
>>> <[email protected]> wrote:
>>>> Dear STATA listers,
>>>>
>>>> I have the following repeated measures data on two subjects with a dose exposure variable. I am interested in creating a variable called “result” that is a recency-weighted cumulative sum.
>>>>
>>>> id time dose result
>>>> 1 1 0 0
>>>> 1 2 0 0
>>>> 1 3 2.6 2.6
>>>> 1 4 2.6 5.174
>>>> 1 5 3.2 8.218
>>>> 2 1 0 0
>>>> 2 2 0 0
>>>> 2 3 0.7 0.7
>>>> 2 4 0.7 1.393
>>>>
>>>> The “result” variable is obtained as a cumulative sum using a weight function:
>>>> Summation of (Dose(i) x weight(t)), where the weight function is:
>>>>
>>>> W(t) = exp((-(delta time)2)/70.70)
>>>>
>>>> So to get the weighted cumulative sum value of 8.218 (for subject 1 at time 5), rather than 8.4, which would have been the un-weighted cumulative sum, I did the following in a spreadsheet.
>>>>
>>>>
>>>> Id time dose delta_t w(t) dose(t)*weight(t) cumulative_sum
>>>> 1 1 0 4 0.80 0 0
>>>> 1 2 0 3 0.88 0 0
>>>> 1 3 2.6 2 0.94 2.444 2.444
>>>> 1 4 2.6 1 0.99 2.574 5.018
>>>> 1 5 3.2 0 1 3.2 8.218
>>>>
>>>> Is there a way to do this in STATA with loops? Can anyone provide any suggestions?
>>>>
>>>>
>>>> Carmine Rossi
>>>> PhD Candidate, Epidemiology
>>>> McGill University
>>>> [email protected]
>
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/faqs/resources/statalist-faq/
> * http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/