0
$\begingroup$

I have some data encoded with the number 0,1,2 before and after treatment. 0 - No improvement, 1- Improvement, 2-Moderate improvement. The data obtained from patient's heart. They divided the heart into 16 parts and they encoded each part with either 0,1 or 2.

The data look as below.

enter image description here

I want to run a test to check if there is a statistical significance before and after treatment.

I read that McNemar's test is for paired binary data but I don't know if it's the best one for my case. Any help will be appreciated.

$\endgroup$
  • $\begingroup$ If you have six patients then I suspect any quest for statistical significance is likely to be fruitless. $\endgroup$ – mdewey Aug 8 '17 at 16:16
1
$\begingroup$

Usually for McNemar test --- or the extended McNemar-Bowker test---, the data are arranged in a contingency table with the same levels on each axis, but that one axis is e.g. Before and one is e.g. After. For this experiment, this might make sense if you have a relatively large number of patients, and if it makes sense to look at each Part individually.

For the data you've shown:

###  For Part 1 only

Input =("
Before         After.0   After.1   After.2
Before.0        4        0          0
Before.1        0        0          0
Before.2        0        1          1
")

Matrix = as.matrix(read.table(textConnection(Input),
                    header=TRUE,
                    row.names=1))

mcnemar.test(Matrix)

In this case, the mcnemar.test function will fail, because there are 0's in certain critical spots.

There is a function in the rcompanion package that will conduct the McNemar-Bowker test as a multinomial test, which won't have this trouble. . Adapted from SAEPER: Tests for paired nominal data.

library(rcompanion)

nominalSymmetryTest(Matrix,
                    method="fdr",
                    digits = 3)

However, it will probably be better to include all the Parts in one model.

One approach to do this is to use multinomial logistic regression.

However, it sounds like the the Ratings you have can be considered ordinal in nature, and so ordinal regression could be used. It is not clear to me from the descriptions if the order of the levels of the Ratings should be "0", "1", "2", or "0", "2", "1". The following example assumes the levels go "0", "1", "2". (Adapted from SAEPER: Ordinal regression.)

Input =("
 Part  Time    Patient  Rating
 1     Before  1        0
 1     Before  2        0
 1     Before  3        2
 1     Before  4        2
 1     Before  5        0
 1     Before  6        0
 2     Before  1        0
 2     Before  2        0
 2     Before  3        2
 2     Before  4        0
 2     Before  5        2
 2     Before  6        0
 1     After   1        0
 1     After   2        0
 1     After   3        2
 1     After   4        1
 1     After   5        0
 1     After   6        0
 2     After   1        0
 2     After   2        0
 2     After   3        2
 2     After   4        0
 2     After   5        0
 2     After   6        0
")

Data = read.table(textConnection(Input),header=TRUE)

Data$Part = factor(Data$Part,
                  levels=unique(Data$Part))

Data$Time = factor(Data$Time,
                   levels=c("Before", "After"))

Data$Patient = factor(Data$Patient,
                      levels=unique(Data$Patient))

Data$Rating = factor(Data$Rating, ordered=TRUE)

library(ordinal)

model = clmm(Rating ~ Part + Time + (1|Patient),
             data = Data)

library(car)

library(RVAideMemoire)

Anova(model,
      type = "II")
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.