Code covered by the BSD License

### Highlights from Logrank

4.4
4.4 | 5 ratings Rate this file 19 Downloads (last 30 days) File Size: 3.65 KB File ID: #22317 Version: 1.13

# Logrank

### Giuseppe Cardillo (view profile)

04 Dec 2008 (Updated )

Comparing survival curves of two groups using the log rank test

File Information
Description

Comparison of two survival curves can be done using a statistical hypothesis test called the log rank test. It is used to test the null hypothesis that there is no difference between the population survival curves (i.e. the probability of an event occurring at any time point is the same for each population). This function use the Kaplan-Meier procedure to estimate the survival function, so it is mandatory to download
KMPLOT (http://www.mathworks.com/matlabcentral/fileexchange/22293).

Required Products Statistics and Machine Learning Toolbox
MATLAB release MATLAB 7.6 (R2008a)
MATLAB Search Path
`/`
Other requirements KMPLOT (http://www.mathworks.com/matlabcentral/fileexchange/22293).
10 Oct 2014 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

Thank you Jacob.
For the first question, kmplot shows confidence intervals and median time. If I add these lines on Logrank it became too difficult to understand.
For the second question, you can use "text" or "gtext" matlab function to add on to the plot whatever you want.
Feel free to modify the code.

Comment only
09 Oct 2014 Jacob Scott

### Jacob Scott (view profile)

One more thought - could you make it so that the hazard ratios and p-value are reported in the figure?

thanks so much for this

Comment only
08 Oct 2014 Jacob Scott

### Jacob Scott (view profile)

I've found that the plots that come out of kmplot are much prettier (and contain more information) than the plots that are generated by logrank. Is there a way that I'm missing to plot two survival curves on the same axis using kmplot? or to make the plots from logrank more similar to those of kmplot?

Thanks, great tool.

18 Apr 2013 Fernando Pena

### Fernando Pena (view profile)

10 May 2012 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

Thank you Jan.
1) You are right. There is a bug in kmplot not in logrank. Now I have just upload the new version of kmplot on FEX. If you need, write me in private and I'll send you the file.
2) they are both correct! I explain. If you are doing a test of a drug against placebo, you will use a 1-tailed test (because, before to do the experiments you are thinking that drug is better of placebo). But if you are testing two different drugs or two different protocols you can only ask to logrank test: Are they different? And so you have to use a 2-tailed test. Of course, 1-tailed test are more powerful but the conditions to apply them are not always respected. Anyway, I'll clarify this in the logrank help and output

Comment only
09 May 2012 Jan liphardt

### Jan liphardt (view profile)

Very useful, but I had two questions. (1) LogRank gives an error at line 116, at [table1 table12 t1 T1 xcg1 ycg1 lambda1]=kmplot(x1,0.05,cflag,0);
This is fixed by deleting the last arg to kmplot, giving kmplot(x1,0.05,flag);

2) The p-value for LogRank is twice what it should be? 0.03058 vs. 0.01529 in the file header. Perhaps, mismatch between old documentation and changed function, or extra factor of 2 in p = 2*(1-0.5*erfc(-z/realsqrt(2))); %p-value

Removing Yates' gives 0.019250, which is correct. I tend to think 0.03058 is correct, with the Yates' correction. Thanks for the super-useful code!

04 Feb 2012 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

the cyclist is right. He did a perfect explanation

Comment only
03 Feb 2012 the cyclist

### the cyclist (view profile)

The logrank calculation here is correct. This code applies the Yates correction in the calculation of the z-score. (Line 207 of my version of the code.) I get 0.0193 from this code when I remove the Yates correction.

Comment only
28 Jan 2012 Nitin

### Nitin (view profile)

I also am having trouble with this function.. the p-values are always slightly off (usually a little higher than what I get using other programs)

Comment only
25 Jan 2012 Abhijit

### Abhijit (view profile)

I'm sorry, but using your software I do not get the p-value for the log-rank test that is consistent with the results of either R or Stata (both of which match). For the test data supplied with the function, I get a p-value of 0.0193, whereas you're getting a p-value of 0.01529. The KM curves are the same, but there is apparently something wrong in your logrank computation.

Comment only
22 Sep 2011 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

I have just uploaded a new version of KMPLOT and LOGRANK that compute hazard rate and hazard ratio

Comment only
22 Sep 2011 sunbb

### sunbb (view profile)

Is there a way to retrieve the Hazard ratio from the output of Logrank or Kmplot function?

Comment only
22 Sep 2011 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

Yes it is. The 0.05 put in that lines is a dummy variable. Infact, in that lines logrank invokes kmplot to compute needed tables (i didnt want to duplicate code). If you look inside kmplot it is commented that a piece of code id jumped whan invoked by logrank and in that piece of code alpha is used to compute the confidence interval of survival curve (that is useless in logrank).

Comment only
21 Sep 2011 the cyclist

### the cyclist (view profile)

I notice that in the call to kmplot [lines 96-97] in current version, the hard-coded value 0.05 is used, even if alpha is specified differently as an input. Is that correct?

Comment only
14 Mar 2011 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

Dear Sven, thank you for your email.
T1 and T2 are cleared because they don't appear in the output. As everybody can see in the figure (without downloading the function) logrank always prints all needed output parameters. Logrank recalls another function that is kmplot: this function can give back T1 (if you want). Anyway this possibility is hidden because usually you are only interested to the plot.

Comment only
11 Mar 2011 Sven

### Sven (view profile)

Excellent submission - thank you. One note: the outputs to the function [T1,T2] are actually cleared during computation, so an error is thrown if output is requested. To conform a little bit to the MATLAB stats package, I suggest the following changes:

Line one should change to:
function [h,p] = logrank(varargin)

and the end of the function should set h as follows:
h = p<alpha;

The help section could then say:
% Displays:
% Kaplan-Meier plot
% Log-rank statistics
% Outputs:
% H : statistical significance (true if P<ALPHA)
% P : P-value for log-rank test

03 May 2010 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

Thank you for your comment. If you type on matlab "help logrank" you'll find the reference.

Comment only
30 Apr 2010 J Rey

### J Rey (view profile)

Beautiful, thanks for sharing this. If we use your software for a journal purpose, what reference should we use?

Comment only
30 Apr 2010 J Rey

### J Rey (view profile)

09 Sep 2009 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

At the moment, there is not on FEX the new uploaded file (this takes 1-2 days). If you contact me in private, I'll send you the file as an attach

Comment only
09 Sep 2009 the cyclist

### the cyclist (view profile)

Thanks for the really quick reply. I appreciate it.

However, the program still crashes for me, with the same error, when I try the syntax you suggest. Maybe the version on the File Exchange is not quite the same as yours?

Comment only
09 Sep 2009 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

You are partially right. If you use only the first column, the routine crashes because the informations in the second column are mandatory. If you want no censored data:
>> x1(:,2)=0; x2(:,2)=0; logrank(x1,x2);

Anyway, a bug was present but I fixed it and upload the new version.

Comment only
08 Sep 2009 the cyclist

### the cyclist (view profile)

It seems to me that this function does not work for the case when none of the data are censored. (That shouldn't be a problem, should it?) For example, using only the first columns of your sample x1 and x2:

>> logrank(x1(:,1),x2(:,1))

causes a crash for me.

Comment only
12 Jun 2009 En Bl

### En Bl (view profile)

Thanks.

Comment only
08 Jun 2009 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

I have corrected the bug and uploaded the new version. Anyway, with all these censored data, it is difficult to assess differences....

Comment only
30 May 2009 En Bl

### En Bl (view profile)

Here is the data:
x1 =
3010 1
1733 1
2797 1
334 0
3678 1
3314 1
4378 1
3253 1
1672 0
3709 1
1642 1
3040 1
2827 1
and x2 =
1955 1
1808 1
2037 1
3136 1
938 0
3497 1
2858 1
3832 1
3256 0
2933 0
5054 1
927 0
3795 0
4155 1
3304 0

Comment only
22 May 2009 Giuseppe Cardillo

### Giuseppe Cardillo (view profile)

Perhaps, if you email me the data I can understand the error. I think that your input data matrix are in a wrong format.

Comment only
19 May 2009 En Bl

### En Bl (view profile)

I get this error:
Matrix dimensions must agree.

Error in ==> logrank at 157
K=find((table12(:,1)<table(c(I),1) & table12(:,1)>=table(J,1)),1,'last');

I debugged it and J=[] .

Comment only
05 Dec 2008 1.1

changes in help section for correct citation

08 Jun 2009 1.2

correction when the first value is censored

28 Jul 2009 1.3

Correction to avoid NaN in Standard error computation

09 Sep 2009 1.4

Correction of a bug that occurs when data are not censored

23 Dec 2009 1.5

Changes in description

25 Feb 2010 1.6

Changes in code to solve an incompatibility with Mac (Thanks to Tim the cyclist)

09 Dec 2010 1.7

correction in p-value computation (thanks to Prof. Brani Vidakovic)

22 Sep 2011 1.9

06 Apr 2012 1.10

function was adapted to the new kmplot function

10 May 2012 1.11

It is better clarified that this is a 2-tailed test

18 Jul 2012 1.12