s-news
[Top] [All Lists]

Re:

To: Wouter Vinck <Wouter.Vinck@med.kuleuven.ac.be>
Subject: Re:
From: Greg Snow <snow@fisher.byu.edu>
Date: Sat, 8 Dec 2001 08:38:59 -0700 (MST)
Cc: s-news@wubios.wustl.edu
In-reply-to: <3.0.5.32.20011205175535.0081d2e0@mail.cc.kuleuven.ac.be>
On Wed, 5 Dec 2001, Wouter Vinck wrote:

> Dear Splus users,
> 
> I am planning to conduct a study with a complicated questionnaire, in which
> some questions only have to be answered conditional on the answer on
> previous questions and eg demographic information. 
> Does S plus have a facility for data input via an input form, 
> - that reacts conditional on the input with new input forms
> - that is quick enough for immediate data input during the interview ?
> If not via S, is this possible using C++ ?

It is possible in S-PLUS, though it may be more work than you want to put
in to set it up. At the bottom of this message is a sample script for a
basic imput routine in S-PLUS (should work in 2000 or 6).  Run the script
and it will create a data frame called "disease" and a new menu called
"survey".  Bring up the disease dataset (data>select data) then click on
the "survey" menu and click on "disease".  Now enter some data, Click on
"Apply" to have the data entered into the data frame.  Notice that when
you set the sex of the respondent, the different diseases become
active/inactive and when you increment the ID number the other fields are
reset.

Another option is to use EpiInfo (http://www.cdc.gov/epiinfo/), a free
program available from the Center for Disease Control (USA) that will let
you design a survey and saves the data in an MS Access database that can
be loaded into S-PLUS for analysis.

Hope this helps,

the S-PLUS script is:

disease <- data.frame(ID=integer(0), Age=integer(0), 
 Sex=factor(character(0),levels=c("Male","Female","NA")), 
 Ovarian=factor(character(0), levels=c("Yes","No","NA")),
 Prostate=factor(character(0), levels=c("Yes","No","NA")) )

disease.entry <- function(ID,Age,Sex,Ovarian,Prostate){
        temp <- data.frame(ID=ID, Age=Age, 
                Sex=factor(Sex,levels=c("Male","Female","NA")), 
                Ovarian=factor(Ovarian, levels=c("Yes","No","NA")),
                Prostate=factor(Prostate, levels=c("Yes","No","NA")) )

        temp2 <- rbind(disease, temp)
        assign("disease",temp2, where=1)
        invisible()
}

# Create menu items

guiCreate("MenuItem",
        Name="SPlusMenuBar$Survey", Type="Menu", MenuItemText="Survey",
        Index=14, OverWrite=F )
        
guiCreate("MenuItem",
        Name="SPlusMenuBar$Survey$Disease", Type="MenuItem",
MenuItemText="&Disease",
        Action="Function", Command="disease.entry")

# create items in dialog box

guiCreate("Property", Name= "DiseaseInvisible",   DialogControl=
"Invisible")

guiCreate("Property",
        Name = "DiseaseID",
        DialogControl = "Integer Spinner",
        DialogPrompt = "ID: ",
        HelpString = "ID Number")

guiCreate("Property",
        Name = "DiseaseAge",
        DialogControl = "Integer",
        DialogPrompt = "Age: ",
        HelpString = "Patient Age:")
        
guiCreate("Property",
        Name = "DiseaseSex",
        DialogControl = "List Box",
        DialogPrompt = "Sex: ",
        OptionList = "Male, Female, NA",
        HelpString = "Sex",
        UseQuotes = T, DefaultValue="NA")
        
guiCreate("Property",
        Name = "DiseaseOv",
        DialogControl = "List Box",
        DialogPrompt = "Ovarian Cancer: ",
        OptionList = "Yes, No, NA",
        HelpString = "Have you ever had Ovarian Cancer",
        UseQuotes = T, Disable=T, DefaultValue="NA")

guiCreate("Property",
        Name = "DiseasePro",
        DialogControl = "List Box",
        DialogPrompt = "Prostate Cancer: ",
        OptionList = "Yes, No, NA",
        HelpString = "Have you ever had Prostate Cancer",
        UseQuotes = T, Disable=T, DefaultValue="NA")
        
# create call back function
        
diseaseCallBack <- function(df){
        if( IsInitDialogMessage(df) ){
                i <- max(disease$ID) + 1
                df <- cbSetCurrValue(df, "DiseaseID", i)
        }
        if( cbIsUpdateMessage(df) ){
                if( cbGetActiveProp(df) == "DiseaseSex" ){
                        if( cbGetCurrValue(df, "DiseaseSex") == "Male" ){
                                df <- cbSetEnableFlag(df, "DiseaseOv", F)
                                df <- cbSetEnableFlag(df, "DiseasePro", T)
                                df <- cbSetCurrValue(df, "DiseaseOv",
"NA")
                        } else {
                                df <- cbSetEnableFlag(df, "DiseaseOv", T)
                                df <- cbSetEnableFlag(df, "DiseasePro", F)
                                df <- cbSetCurrValue(df, "DiseasePro",
"NA")
                        }
                }
                if( cbGetActiveProp(df) == "DiseaseID" ){
                        df <- cbSetEnableFlag(df, "DiseaseOv", F)
                        df <- cbSetEnableFlag(df, "DiseasePro", F)
                        df <- cbSetCurrValue(df, "DiseaseAge", "")
                        df <- cbSetCurrValue(df, "DiseaseSex", "NA")
                        df <- cbSetCurrValue(df, "DiseaseOv", "NA")
                        df <- cbSetCurrValue(df, "DiseasePro", "NA")
                }
        }
        df
}

# Create functionInfo

guiCreate("FunctionInfo",
        Name="disease.entry",
        Function="disease.entry",
        DialogHeader="Disease Data Entry Form",

PropertyList=c("DiseaseInvisible","DiseaseID","DiseaseAge","DiseaseSex",
                                                "DiseaseOv","DiseasePro"),
        CallBackFunction = "diseaseCallBack",
        ArgumentList = c(
                "#0 = DiseaseInvisible",
                "#1 = DiseaseID",
                "#2 = DiseaseAge",
                "#3 = DiseaseSex",
                "#4 = DiseaseOv",
                "#5 = DiseasePro"
                )
)

#### end of script


-- 
Greg Snow, PhD                Office: 223A TMCB
Department of Statistics      Phone:  (801) 378-7049
Brigham Young University      Dept.:  (801) 378-4505
Provo, UT  84602              email:  gls@byu.edu


<Prev in Thread] Current Thread [Next in Thread>