def yaw_variation(is_control=True): ci = [1,3] #is_control = False data, segs = get_pooled(ci) data, segs = filter_by_treatment(data, segs, is_control) smeans = [] for sid, d in groupby(data, 'session_id'): yaw = toyota_yaw_rate_in_degrees(d['c_yaw']) mean = np.mean(yaw) std = np.std(yaw) print sid, mean, std smeans.append((sid, mean)) #mean = np.mean(smeans) #std = np.std(smeans) #print 'mean: ' + str(mean) + ' std: ' + str(std) return smeans
def get_pooled_data(cis, is_control): arr_desc = [('sid', int), ('bend', int), ('yaw', float), ('speed', float)] table = np.array([], dtype=arr_desc) #cis = [1,2,3] for ci in cis: data = get_angled_range_data2(CORNERING[ci][0], CORNERING[ci][1]) segs = get_pursuit_fits(CORNERING[ci][0], CORNERING[ci][1]) data, segs = filter_by_treatment(data, segs, is_control) data.sort(order=['session_id', 'ts']) grp, segs = zip(*segs) groups = np.rec.fromrecords(grp, names='session_id,lap') for (sid, lap), d in groupby_multiple(data, ('session_id', 'lap')): #if (np.sum(d['g_direction_q'] < 0.2) > 0.25*(len(d))): continue seg = [segs[k] for k in np.flatnonzero((groups.session_id == sid) & (groups.lap == lap))] if (len(seg) == 0): continue seg = np.hstack(seg).view(np.recarray) seg = seg[seg.n > 12] lap_dpoints = [] for s in seg: dt = s.t1 - s.t0 if dt == 0: continue gspeed = -((s.d1[0]-s.d0[0]) / dt) slice = d[(d['ts'] >= s.t0) & (d['ts'] <= s.t1)] ym = np.mean(toyota_yaw_rate_in_degrees(slice['c_yaw'])) lap_dpoints.append((ym, gspeed)) lap_dpoints = np.array(lap_dpoints) if (len(lap_dpoints > 0)): yaw = np.mean(lap_dpoints[:,0]) speed = np.median(lap_dpoints[:,1]) arr = np.array([(sid,ci,yaw,speed)], dtype=arr_desc) table = np.append(table, arr) return table
def pursuit_vs_yaw(range): groups, data, grp, segs = get_pursuits_and_data_by_range(range) pdf_out = PdfPages('/tmp/pursuit_vs_yaw.pdf') bin_size = 0.5 means = [] slopes = [] noises = [] for sid, d in groupby(data, 'session_id'): seg = [segs[i] for i in np.flatnonzero(groups.session_id == sid)] seg = np.hstack(seg).view(np.recarray) #seg = seg[(seg.t1 - seg.t0) > 0.2] # take out saccades seg = seg[seg.n > 12] # filter outliers from gaze landings values = np.vstack((seg.d0[:,0], seg.d0[:,1])) fkde = gaussian_kde(values) x, y = np.mgrid[np.min(values[0]):np.max(values[0]):bin_size, np.min(values[1]):np.max(values[1]):bin_size] grid = np.vstack((x.ravel(), y.ravel())) z = fkde(grid) reshaped = z.reshape(x.shape) medianhdr = histogram_hdr(z, bin_size**2, 0.8) seg = [s for s in seg if fkde((s.d0[0], s.d0[1])) > medianhdr] seg = np.hstack(seg).view(np.recarray) # mean yaw within each pursuit withinPursuitYaw = [] for s in seg: slice = d[(d['ts'] >= s['t0']) & (d['ts'] <= s['t1'])] ym = np.mean(toyota_yaw_rate_in_degrees(slice['c_yaw'])) withinPursuitYaw.append(ym) withinPursuitYaw = np.array(withinPursuitYaw) dt = seg.t1 - seg.t0 valid = dt > 0 dt = dt[valid] gspeeds = -((seg.d1[:,0] - seg.d0[:,0]) / dt) noise = withinPursuitYaw / 2 - gspeeds plt.figure() # raw scatter fit = np.polyfit(withinPursuitYaw, gspeeds, 1) rng = np.linspace(10, 20, len(withinPursuitYaw)) rline = np.polyval(fit, rng) model = np.poly1d([0.5, 0]) plt.subplot(221) plt.plot(withinPursuitYaw, gspeeds, '.k', alpha=0.2) plt.plot(rng, rline, '-b') plt.plot([10,20], [np.polyval(model, 10), np.polyval(model, 20)], '-g') plt.ylim(-50,50) plt.xlim(5,25) plt.xlabel('mean yaw deg/s') plt.ylabel('gaze speed deg/s') plt.annotate('spearman r: %f' % scipy.stats.spearmanr(withinPursuitYaw, gspeeds)[0], (10,-10)) plt.annotate('slope: %f' % fit[0], (10,-20)) plt.title(sid) # noise kde + pdf plt.subplot(222) kde = gaussian_kde(noise) rng = np.linspace(np.min(noise), np.max(noise), len(noise)) plt.plot(rng, kde(rng), '-b', label='kde') plt.plot(rng, scipy.stats.norm.pdf(rng, loc=np.mean(noise), scale=np.std(noise)), '-r', label='pdf') plt.hist(noise, bins=30, normed=True, color='green') plt.xlabel('mean yaw / 2 - gaze speed') plt.legend(loc='upper right') # pursuit landings scatter & density map plt.subplot(223) plt.contour(x,y,reshaped, [medianhdr]) plt.plot(seg.d0[:,0], seg.d0[:,1], ',k') plt.xlim(-60,60) plt.ylim(-20,20) pdf_out.savefig() plt.close() print '%i \nspearman r: %f' % (sid, scipy.stats.spearmanr(withinPursuitYaw, gspeeds)[0]) # how many fixations are from right to left (74-90 degrees) #validspeed = gspeeds < 0 #print '%f of fixations from right to left' % (1.0 * len(gspeeds[validspeed]) / len(gspeeds)) print 'mean of yaws / gaze speeds %f' % (np.mean(gspeeds / withinPursuitYaw))#, scipy.stats.mode(np.around(withinPursuitYaw / gspeeds, 1))[0]) print 'mean of mean yaw / 2 - gaze speed: %f' % (np.mean(withinPursuitYaw / 2 - gspeeds)) print 'noise shapiro-wilk w: %f p: %f' % scipy.stats.shapiro(noise) #print 'median hdr %f' % medianhdr #print 'mean of yaws: %f' % np.mean(withinPursuitYaw) #print 'mean of gspeeds: %f' % np.mean(gspeeds) means.append((np.mean(withinPursuitYaw), np.mean(gspeeds))) slopes.append(fit) noises.append(noise) pdf_out.close() return (means, slopes, noises)
def pursuit_yaw_means(): pdf_out = PdfPages('/tmp/pursuit_vs_yaw_pooled.pdf') cis = [1,2,3] all_data = [] all_segs = [] for ci in cis: data = get_angled_range_data2(CORNERING[ci][0], CORNERING[ci][1]) segs = get_pursuit_fits(CORNERING[ci][0], CORNERING[ci][1]) all_data.append(data) all_segs.append(segs) data = np.hstack(all_data) segs = np.vstack(all_segs) data.sort(order=['session_id', 'ts']) grp, segs = zip(*segs) groups = np.rec.fromrecords(grp, names='session_id,lap') all_dpoints = [] xrange = [12,18] for sid, i in groupby_i(data, 'session_id'): d = data[i] print sid seg = [segs[k] for k in np.flatnonzero(groups.session_id == sid)] seg = np.hstack(seg).view(np.recarray) seg = seg[seg.n > 12] dpoints = [] for s in seg: dt = s.t1 - s.t0 if dt == 0: continue gspeed = -((s.d1[0]-s.d0[0]) / dt) slice = d[(d['ts'] >= s.t0) & (d['ts'] <= s.t1)] ym = np.mean(toyota_yaw_rate_in_degrees(slice['c_yaw'])) naksu_x = pxx2heading(slice['naksu_x']) naksu_mean = (naksu_x[1] - naksu_x[0]) / dt dpoints.append((ym, gspeed, naksu_mean)) all_dpoints.append(dpoints) dpoints = np.array(dpoints) print scipy.stats.pearsonr(dpoints[:,0], dpoints[:,1]) plt.figure() plt.title(sid) plt.hist(dpoints[:,0], bins=50) #plt.xlim(xrange) pdf_out.savefig() plt.close() all_dpoints = np.array(all_dpoints) means = np.array([np.median(x,0) for x in all_dpoints]) ymeans = means[:,0] gmeans = means[:,1] nmeans = means[:,2] #from utils import fitLine #fitLine(ymeans,gmeans) fit = np.polyfit(ymeans, gmeans, 1) lsr = np.poly1d(fit) model = np.poly1d([0.5, 0]) plt.figure() plt.plot(ymeans,gmeans,'.k') plt.plot(xrange, lsr(xrange), '-b') plt.plot(xrange, model(xrange), '-g') plt.xlabel('mean yaw rate (deg/s)') plt.ylabel('mean gaze speed (deg/s)') pdf_out.savefig() plt.close() nfit = np.polyfit(ymeans, nmeans, 1) nlsr = np.poly1d(nfit) plt.figure() plt.plot(ymeans,nmeans,'.k') plt.plot(xrange, nlsr(xrange), '-b') plt.xlabel('mean yaw rate (deg/s)') plt.ylabel('mean change in horizontal TP coordinate during pursuit (deg/s)') pdf_out.savefig() plt.close() pdf_out.close() print '\nspearman r: %f, p %f' % scipy.stats.spearmanr(ymeans, gmeans) print 'pearson r: %f, p %f' % scipy.stats.pearsonr(ymeans,gmeans) print 'least-squares fit: %f %f' % (fit[0], fit[1]) print 'yaw/TP location least-squares fit: %f %f' % (nfit[0], nfit[1])