Найти процентное изменение от базовой линии для каждого идентификатора с изменением базовых значений - PullRequest
0 голосов
/ 25 февраля 2019

Я видел несколько вопросов о вычислении изменений от базовой линии по идентификатору, но базовая линия для каждого идентификатора всегда фиксируется упорядочением столбца, в котором находится базовая линия.В моем случае базовая линия определяется как значение, до которого относительный_обмен меньше или равен 20. Я пометил значения в столбце «базовая линия» для моей собственной ссылки.

Может существовать несколько базовых показателей дляодин идентификатор, а также только одно значение после базовой линии.Цель состоит в том, чтобы установить, поддерживается ли изменение по сравнению с исходным уровнем по истечении определенного периода времени (скажем, через 1 месяц).

Формула относительного изменения: (x-lag (x)) / (((x + lag (x)) / 2)) * 100

Значение lag (x) фиксируется на любом базовом значении для идентификатора до следующего базового значения,

Результаты, которые я ожидаю (для ID 1, рассчитывается вручную):

PatientId   date        value   relative_change baseline    baseline_change
1           1/16/2015   47.6102 NA      
1           1/21/2015   44.1548 -7.53       
1           1/29/2015   51.0441 14.47       
1           2/5/2015    57.5873 12.05       
1           2/20/2015   50.6741 -12.77      
1           2/27/2015   48.5987 -4.18       
1           3/6/2015    53.0718 8.8     
1           3/13/2015   58.2327 9.27        
1           4/10/2015   65.7751 12.16           baseline    
1           5/1/2015    53.0103 -21.49                        -21.49
1           5/14/2015   56.1289 5.71                          -15.83
1           5/29/2015   61.6908 9.44                          -6.41
1           6/16/2015   55.7482 -10.12                        -16.50
1           9/25/2015   60.7776 8.63            baseline    
1           11/19/2015  48.3786 -22.72                        -22.72
1           11/26/2015  54.8932 12.62                         -10.17
1           12/3/2015   55.9178 1.85                          -8.33
2           1/6/2015    82.8417 NA      
2           1/6/2015    82.8417 0       
2           2/17/2015   99.9565 18.73           baseline    
2           5/25/2015   75.914  -27.34      
2           6/23/2015   97.1738 24.57       
2           8/18/2015   84.2979 -14.19      
2           11/17/2015  83.8618 -0.52       
2           12/8/2015   79.0915 -5.85           baseline    
2           12/17/2015  61.9022 -24.38      
2           12/22/2015  88.5522 35.43       
3           2/3/2015    57.6384 NA              baseline    
3           5/26/2015   46.865  -20.62      
3           6/30/2015   46.4967 -0.79       
3           7/10/2015   55.1934 17.1        
3           7/16/2015   56.7106 2.71            baseline    
3           11/24/2015  39.4603 -35.87      
3           12/1/2015   58.0226 38.08       
3           12/8/2015   58.5091 0.83        
4           3/11/2015   55.0243 NA              baseline    
4           8/12/2015   34.3651 -46.22      
4           8/21/2015   53.7478 44      
4           11/30/2015  44.1216 -19.67      
4           12/11/2015  53.9511 20.05       
5           4/16/2015   62.5017 NA              baseline    
5           7/23/2015   43.6771 -35.46      
6           3/17/2015   68.6899 NA      
7           6/2/2015    65.4696 -4.8            baseline    
7           9/15/2015   51.4805 -23.92      
7           12/8/2015   43.1847 -17.53      
8           3/3/2015    72.9291 NA              baseline    
8           6/2/2015    53.1171 -31.44      
8           11/2/2015   63.9017 18.43       

Что у меня есть до сих пор:

data <- data %>% group_by(id) %>% mutate(baseline_change = (((value-value[baseline == "baseline"])/((value+value[baseline == "baseline"])/2))*100))

Результаты, которые у меня есть до сих пор: - Базовый уровеньрасчеты верны, так как baseline_change от baseline равен 0. - Первое вычисление baseline_change после базового значения должно быть таким же, как и первое значениеlative_change.Не слишком уверен, что я делаю не так.

PatientId   date        value   relative_change baseline    baseline_change
1           1/16/2015   47.6102 NA                          -27.6166817
1           1/21/2015   44.1548 -7.53                       -27.350208
1           1/29/2015   51.0441 14.47                       -22.3960131
1           2/5/2015    57.5873 12.05                       -5.2491378
1           2/20/2015   50.6741 -12.77                      -22.958536
1           2/27/2015   48.5987 -4.18                       -20.0384681
1           3/6/2015    53.0718 8.8                         -19.3132356
1           3/13/2015   58.2327 9.27                        -4.1872335
1           4/10/2015   65.7751 12.16           baseline     0
1           5/1/2015    53.0103 -21.49                      -12.7798728
1           5/14/2015   56.1289 5.71                        -14.6654281
1           5/29/2015   61.6908 9.44                        1.5025272
1           6/16/2015   55.7482 -10.12                      -15.2442186
1           9/25/2015   60.7776 8.63            baseline     0
1           11/19/2015  48.3786 -22.72                      -26.4484585
1           11/26/2015  54.8932 12.62                       -9.6818565
1           12/3/2015   55.9178 1.85                        -14.9863702
2           1/6/2015    82.8417 NA                          -17.1222482
2           1/6/2015    82.8417 0                           4.7415968
2           2/17/2015   99.9565 18.73           baseline     0
2           5/25/2015   75.914  -27.34                      -4.0174987
2           6/23/2015   97.1738 24.57                       -2.783911
2           8/18/2015   84.2979 -14.19                      6.5827554
2           11/17/2015  83.8618 -0.52                       -16.1017042
2           12/8/2015   79.0915 -5.85           baseline     0
2           12/17/2015  61.9022 -24.38                       -38.0708608
2           12/22/2015  88.5522 35.43                        11.9617152
3           2/3/2015    57.6384 NA              baseline     0
3           5/26/2015   46.865  -20.62                       -17.3611283
3           6/30/2015   46.4967 -0.79                        -19.3303423
3           7/10/2015   55.1934 17.1                         -2.6753376
3           7/16/2015   56.7106 2.71            baseline      0
3           11/24/2015  39.4603 -35.87                       -30.4181229
3           12/1/2015   58.0226 38.08                         0.6665695
3           12/8/2015   58.5091 0.83                          3.1713648
4           3/11/2015   55.0243 NA              baseline                    
4           8/12/2015   34.3651 -46.22                       -37.5455935
4           8/21/2015   53.7478 44                           -2.3198841
4           11/30/2015  44.1216 -19.67                       -19.8143366
4           12/11/2015  53.9511 20.05                        -1.950411
5           4/16/2015   62.5017 NA              baseline      0
5           7/23/2015   43.6771 -35.46                       -30.1185408
6           3/17/2015   68.6899 NA                            4.9187715
7           6/2/2015    65.4696 -4.8            baseline      0
7           9/15/2015   51.4805 -23.92                       -21.3673216
7           12/8/2015   43.1847 -17.53                       -34.0385461 
8           3/3/2015    72.9291 NA              baseline      0
8           6/2/2015    53.1171 -31.44                       -27.1661106
8           11/2/2015   63.9017 18.43                        -12.3783236
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...