A simple panel for statistical comparison of two 1D waves
#include <WaveSelectorWidget>
Function Make2WaveSelectorPanel()
String panelName = "WaveSelectorExample"
// figure out what to show in the Wave Selector, and make an appropriate name for the panel
panelName+="Waves"
if (WinType(panelName) == 7)
// if the panel already exists, show it
DoWindow/F $panelName
else
// doesn't exist, make it
NewPanel/N=$panelName/W=(181,179,471,510) as "Wave Selector Example"
// list box control doesn't have any attributes set on it
ListBox ExampleWaveSelectorList,pos={9,13},size={273,241}
// This function does all the work of making the listbox control into a
// Wave Selector widget. Note the optional parameter that says what type of objects to
// display in the list.
MakeListIntoWaveSelector(panelName, "ExampleWaveSelectorList", content = WMWS_Waves)
PopupMenu sortKind, pos={9,270},title="Sort Waves By"
MakePopupIntoWaveSelectorSort(panelName, "ExampleWaveSelectorList", "sortKind")
// This is an extra bonus- you can create your own function to be notified of certain events,
// such as a change in the selection in the list.
WS_SetNotificationProc(panelName, "ExampleWaveSelectorList", "ExtExampleNotification", isExtendedProc=1)
// To support this demo, provide a button that displays this code
Button Gr2Comp,pos={9,300},size={110,20},proc=gr2stat_0,title="2 Group"
Button GrPairComp,pos={130,300},size={110,20},proc=gr2stat_1,title="Pair"
endif
End
Function gr2stat_0(ba) : ButtonControl
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
comp2(1)// click code here
break
case -1: // control being killed
break
endswitch
return 0
End
Function gr2stat_1(ba) : ButtonControl
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
comp2(3)// click code here
break
case -1: // control being killed
break
endswitch
return 0
End
Function comp2(p2)
variable p2
string w_sed = WS_SelectedObjectsList("Waveselectorexamplewaves","ExampleWaveSelectorList")
string x1_n = StringFromList(0, w_sed)
string x2_n = StringFromlist(1, w_sed)
wave x1 = $x1_n
wave x2 = $x2_n
sn_nb();Append2SN_TS()
Append2SN("*" + x1_n + ":\r mean = " + num2str(mean(x1)) + " sem = " + num2str(sqrt(variance(x1)/numpnts(x1))) + " n = " + num2str(numpnts(x1)))
Append2SN("*" + x2_n + ":\r mean = " + num2str(mean(x2)) + " sem = " + num2str(sqrt(variance(x2)/numpnts(x2))) + " n = " + num2str(numpnts(x2)))
if (p2 == 1)
Append2SN("*** Compare 2 waves ***")
cmp2(1, x1, x2)
elseif (p2 == 3)
Append2SN("*** Compare paired waves ***")
cmp2(3, x1, x2)
ENDIF
END
Function Append2SN_TS() //Time Stamp
Variable stampDateTime = 1 // nonzero if we want to include stamp
Variable tnow
String stamp
Notebook StatNote selection={endOfFile, endOfFile}
tnow = datetime
stamp = Secs2Date(tnow,0) + ", " + Secs2Time(tnow,0)
Notebook StatNote text="\r" + "****" + stamp + "****\r"
End
Function Append2SN(str) //Add Log
String str
Notebook StatNote selection={endOfFile, endOfFile}
Notebook StatNote text= str+"\r"
End
Function sn_nb()
if (WinType("StatNote") == 5)
// if StatNote already exists, show it
DoWindow/F StatNote
else
newnotebook /n=StatNote /F=1 as "Stat Results Note"
ENDIF
END
Function effect_size(x1, x2)
wave x1, x2
variable cohen_s_d = abs(mean(x1) - mean (x2))/sqrt((variance(x1) + variance(x2))/2)
Append2SN("*Effect Size:\r Cohen's d = " + num2str(cohen_s_d) + " (d = 0.2, small; 0.5, medium; 0.8, large)")
END
Function cmp2(p2, x1, x2)
variable p2
wave x1, x2
statsjbtest/Q x1
wave W_JBResults
variable nd_x1
if (W_JBResults[3] < W_JBResults[5])
Append2SN("x1 is Normal distribution")
nd_x1 = 1
else
Append2SN("x1 is not normal")
nd_x1 = 0
ENDIF
statsjbtest/Q x2
wave W_JBResults
variable nd_x2
if (W_JBResults[3] < W_JBResults[5])
Append2SN("x1 is Normal distribution")
nd_x2 = 1
else
Append2SN("x1 is not normal")
nd_x1 = 0
ENDIF
statsvariancestest/Q x1, x2
wave W_statsVariancesTest
variable nd_xs
if (W_statsVariancesTest[2] < W_statsVariancesTest[3])
Append2SN("x1, x2 variance same")
nd_xs = 1
else
Append2SN("x1, x2 variance NOT same")
nd_xs = 0
ENDIF
variable p2w_con = (nd_x1==1 && nd_x2==1 && nd_xs==1)
variable p2_final = p2 + p2w_con
variable hs_rn = (CaptureHistoryStart())
switch(p2_final)
case 2:
Append2SN("USE T-TEST\r" + capturehistory(hs_rn, 0) )
statsttest x1, x2
break
case 1:
Append2SN("USE K-S TEST\r" + capturehistory(hs_rn, 0))
statskstest x1, x2
break
case 4:
Append2SN("USE paired T-TEST\r" + capturehistory(hs_rn, 0))
statsttest /PAIR x1, x2
break
case 3:
Append2SN("USE Wilcoxon Signed Rank Test\r" +capturehistory(hs_rn, 0))
StatsWilcoxonRankTest /WSRT x1, x2
break
endswitch
Append2SN(CaptureHistory(hs_rn, 1))
effect_size(x1, x2)
END
Menu "Macros"
"2 waves analysis", Make2WaveSelectorPanel()
END
Forum
Support
Gallery
Igor Pro 10
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More
nice contribution! very useful when exploring data.
Thanks
April 18, 2018 at 10:28 am - Permalink