def descriptives(dm): """Prints descriptive statistics and perform some basic anovas.""" pm = PivotMatrix(dm, ["cond"], ["subject_nr"], dv="saccEndX", func="size") pm.save("output/%s/cellCount.cond.csv" % exp) print pm quit() pm = PivotMatrix(dm, ["saccSide"], ["subject_nr"], dv="saccEndX") pm.save("output/%s/saccEndX.saccSide.csv" % exp) pm = PivotMatrix(dm, ["saccSide"], ["subject_nr"], dv="saccNormX") pm.save("output/%s/saccNormX.saccSide.csv" % exp) pm = PivotMatrix(dm, ["cond", "saccSide"], ["subject_nr"], dv="saccLat2") pm.save("output/%s/saccLat.cond.saccSide.csv" % exp) pm = PivotMatrix(dm, ["saccCol"], ["subject_nr"], dv="saccLat2") pm.save("output/%s/saccLat.saccCol.csv" % exp) pm = PivotMatrix(dm, ["cond"], ["subject_nr"], dv="saccLat2") pm.save("output/%s/saccLat.cond.csv" % exp) aov = AnovaMatrix(dm, ["cond"], "saccLat2", subject="subject_nr") aov.save("output/%s/aov.cond.saccLat.csv" % exp) print "Saccade latency: %.4f (%.4f)" % (dm["saccLat2"].mean(), dm["saccLat2"].std())
def latencyCorr(dm): """ Determines the correlation between saccade latency and the latency of the PLR. Arguments: dm -- DataMatrix """ dm = dm.addField("saccLat2Bin", dtype=float) dm = dm.calcPerc("saccLat2", "saccLat2Bin", keys=["subject_nr"], nBin=10) # dm = dm.select('cond == "onset"') l = [["subject_nr", "cond", "bin", "saccLat", "t0"]] colors = TangoPalette.brightColors[:] * 10 for _dm in dm.group(["subject_nr", "saccLat2Bin"]): for cond in ("constant", "onset"): __dm = _dm.select("cond == '%s'" % cond, verbose=False) dmWhite = __dm.select('saccCol == "white"', verbose=False) xAvg, yAvg, errAvg = TraceKit.getTraceAvg( __dm, signal="pupil", phase="postSacc", traceLen=postTraceLen, baseline=baseline, baselineLock=baselineLock, ) xWhite, yWhite, errWhite = TraceKit.getTraceAvg( dmWhite, signal="pupil", phase="postSacc", traceLen=postTraceLen, baseline=baseline, baselineLock=baselineLock, ) yWhite -= yAvg opts = fitCurve(xWhite, yWhite, plot=False) t0 = opts[0] subject = __dm["subject_nr"][0] col = colors[int(subject)] saccLat = __dm["saccLat2"].mean() _bin = __dm["saccLat2Bin"][0] plt.plot(saccLat, t0, "o", color=col) l.append([subject, cond, _bin, saccLat, t0]) print subject, t0, saccLat dm = DataMatrix(l) dm.save("output/%s/latencyCorr.csv" % exp) print dm # plt.plot(dm['saccLat'], dm['t0'], '.') s, i, r, p, se = linregress(dm["saccLat"], dm["t0"]) print "r = %.4f, p = %.4f" % (r, p) plt.plot(dm["saccLat"], i + s * dm["saccLat"]) plt.show() newFig(size=(4.8, 2.4)) plt.subplots_adjust(bottom=0.2) pmX = PivotMatrix(dm, ["cond", "bin"], ["subject_nr"], "saccLat", colsWithin=True, err="se") print pmX pmY = PivotMatrix(dm, ["cond", "bin"], ["subject_nr"], "t0", colsWithin=True, err="se") print pmY xM = np.array(pmX.m[-2, 2:-2], dtype=float) xErr = np.array(pmX.m[-1, 2:-2], dtype=float) xMConst = xM[: len(xM) / 2] xMOnset = xM[len(xM) / 2 :] xErrConst = xErr[: len(xErr) / 2] xErrOnset = xErr[len(xErr) / 2 :] yM = np.array(pmY.m[-2, 2:-2], dtype=float) yErr = np.array(pmY.m[-1, 2:-2], dtype=float) yMConst = yM[: len(yM) / 2] yMOnset = yM[len(yM) / 2 :] yErrConst = yErr[: len(yErr) / 2] yErrOnset = yErr[len(yErr) / 2 :] plt.errorbar( xMConst, yMConst, xerr=xErrConst, yerr=yErrConst, label="Constant", capsize=0, color=constColor, fmt="o-" ) plt.errorbar(xMOnset, yMOnset, xerr=xErrOnset, yerr=yErrOnset, label="Onset", capsize=0, color=onsetColor, fmt="o-") plt.legend(frameon=False) plt.xlabel("Saccade latency (ms)") plt.ylabel("PLR latency (ms)") saveFig("latencyCorr") aov = AnovaMatrix(dm, ["cond", "bin"], "t0", "subject_nr") print aov aov.save("output/%s/aov.latencyCorr.csv" % exp)
def landOnHandle(trim = True, spacing = .5, exclOverlap = False, \ exclY = False, colList = ["#ef2929", "#3465a4", "#f57900", "#73d216"],\ lLegend = ["Exp1: relative to center", "Exp1: relative to CoG", \ "Exp2: relative to CoG", "Exp3: relative to CoG"], yLim = [-.3, .3],\ xLabels = ["1", "2", "3"], xTitle = "saccade", \ yTitle = "normalised landings towards handle"): """ Landing position as a funciton of orientation, across or per object group. Arguments: Keyword arguments: trim --- exclOverlap --- indicates whether or not to exclude gap-overlap trials in the simulation. """ fig = plt.figure(figsize = (5,10)) title = "Average towards-handle landings - exclOverlap = %s - exclY = %s" \ % (exclOverlap, exclY) plt.suptitle(title) copyColList = colList[:] dm_sim = getDM.getDM("004C") ## for handle in ["right", "left"]: ## handle_dm = dm_sim.select("handle_side == '%s'" % handle) ## print handle_dm["endX1NormToHandle"].mean() # # cm = dm_sim.collapse(['object'], 'endX1NormToHandle') # cm._print(sign=5) # # dm_sim = dm_sim.select('object == "fork"') # for _dm in dm_sim: # print '%d: %.4f' % (_dm['count_trial_sequence'], \ # _dm['endX1NormToHandle']) # cm = dm_sim.collapse(['gap', 'handle_side'], 'endX1NormToHandle') # cm._print(sign=5) # sys.exit() for exp in ["004A", "004B", "004C"]: if exp != "004B": continue # l = [] # if exp != "004A": # continue dm = getDM.getDM(exp) for vf in dm.unique("visual_field"): _dm = dm.select("visual_field == '%s'" % vf) plt.hist(_dm["y_stim"], bins = 50) plt.show() sys.exit() if exp == "004A": dvList = ["abs", "corr"] else: dvList = ["abs"] for dvType in dvList: lMeans = [] for sacc in ["1", "2", "3"]: sim_avg = float(dm_sim["endX%sNormToHandle" % sacc].mean()) print sim_avg #raw_input() if dvType == "corr": dv = "endX%sCorrNormToHandle" % sacc else: dv = "endX%sNormToHandle" % sacc # dv must not contain ''s: on_dm = onObject.onObject(dm, sacc) if trim: trim_dm = on_dm.selectByStdDev(keys = ["file"], dv = dv) else: trim_dm = on_dm pm = PivotMatrix(trim_dm, ["catch_trial"], ["file"], dv, \ colsWithin = False, err = 'se') a = pm.asArray() # print pm M = float(a[-2][2]) SE = float(a[-1][2]) # print M # print SE #sys.exit() #M = cdm["mean"].mean() #SE = cdm["se"].mean() #print M #print SE print "exp ", exp print "sacc = ", sacc print "dv = ", dv am = AnovaMatrix(trim_dm, ["handle_side"], "endX%sNorm" % \ sacc, "file")#._print(ret=True) # print am p = am.asArray()[2][3] p_corr = float(p) * 6 # print p_corr print 'T test scipy' cm = trim_dm.collapse(["file"], dv) M = cm["mean"].mean() SE = cm['mean'].std() / np.sqrt(len(cm)) ref = 0 t, p = scipy.stats.ttest_1samp(cm['mean'], ref) p_corr = min(1, float(p * 6.)) # print p_corr print "M = %.3f, SE = %.3f, t(17) = %.2f, p = %6.4f" % \ (M, SE, t, p_corr) raw_input()