Search code examples
rsyntaxconditional-statementsspss

EQ5D syntax in R, conditional statements


I am trying to write a script in r for the eq5d questionnaire. I found the script for spss online but I much rather run it in r as I am doing everything else in r. So the script in SPSS would be:

   COMPUTE EQ5D_D0=1.
   IF (MAX(EQ5d1, EQ5d2, EQ5d3, EQ5d4, EQ5d5) > 1) EQ5D_D0 = EQ5D_D0 -.071.
   IF (EQ5d1=2) EQ5D_D0 = EQ5D_D0 - 0.036.
   IF (EQ5d1= 3) EQ5D_D0 = EQ5D_D0 - 0.161.
   IF (EQ5d2 = 2) EQ5D_D0 =EQ5D_D0 - 0.082.
   IF (EQ5d2 = 3) EQ5D_D0 =EQ5D_D0 - 0.152.
   IF (EQ5d3 = 2) EQ5D_D0 =EQ5D_D0 - 0.032.
   IF (EQ5d3 = 3) EQ5D_D0 =EQ5D_D0 - 0.057.
   IF (EQ5d4 = 2) EQ5D_D0 =EQ5D_D0 - 0.086.
   IF (EQ5d4 = 3) EQ5D_D0 =EQ5D_D0 - 0.329.
   IF (EQ5d5 = 2) EQ5D_D0 =EQ5D_D0 - 0.124.
   IF (EQ5d5 = 3) EQ5D_D0 = EQ5D_D0 - 0.325.
   IF (MAX(EQ5d1, EQ5d2, EQ5d3, EQ5d4, EQ5d5) > 2) EQ5D_D0 = EQ5D_D0 - .234.

How can I translate this into an r code? I have tried a bunch of different ways but it does not work, I keep getting error messages. Basically what I want is: for any individual that did not answer all questions (question 1 to 5) with a 1 to immediately substract 0.071 and then if question 1 is answered with a 2 substract 0.036 if question 1 is answered with a 3 substract 0.161, etc. In the end I will get for each individual a quality of life index number which I can work further with.

Thanks for your help. Zachary


Solution

  • Maybe using 'ifelse' sentences in this way? (changing 'data' by your dataframe name).

    data$EQ5D_D0<-1
    data$EQ5D_D0<-ifelse(max(data$EQ5d1,data$EQ5d2,data$EQ5d3,data$EQ5d4,data$EQ5d5)>1,data$EQ5D_D0-0.071,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d1==2,data$EQ5D_D0-0.036,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d1==3,data$EQ5D_D0-0.161,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d2==2,data$EQ5D_D0-0.082,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d2==3,data$EQ5D_D0-0.152,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d3==2,data$EQ5D_D0-0.032,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d3==3,data$EQ5D_D0-0.057,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d4==2,data$EQ5D_D0-0.086,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d4==3,data$EQ5D_D0-0.329,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d5==2,data$EQ5D_D0-0.124,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(data$EQ5d5==3,data$EQ5D_D0-0.325,data$EQ5D_D0)
    data$EQ5D_D0<-ifelse(max(data$EQ5d1,data$EQ5d2,data$EQ5d3,data$EQ5d4,data$EQ5d5)>2,data$EQ5D_D0-0.234,data$EQ5D_D0)
    

    Hope it helps,
    Lourdes Hernández