fix nan errors
This commit is contained in:
parent
7008a08c6d
commit
bc24b900c5
@ -133,7 +133,8 @@ def estimate_boldness(visit_times, feeder_risks):
|
||||
else:
|
||||
y += 1
|
||||
score += y - intersection[x]
|
||||
|
||||
if len(sorted_risks) == 0:
|
||||
return None, None
|
||||
boldness = score / len(sorted_risks)
|
||||
return boldness, len(sorted_risks)
|
||||
|
||||
@ -155,6 +156,8 @@ def get_boldness_score(df, subject):
|
||||
risks = get_feeder_risks(df, d)
|
||||
boldness, count = estimate_boldness(visit_times, risks)
|
||||
b = {"subject": subject, "day": d, "boldness": boldness, "total_visits": count}
|
||||
if boldness is None:
|
||||
continue
|
||||
boldness_scores.append(b)
|
||||
return boldness_scores
|
||||
|
||||
@ -205,8 +208,9 @@ if __name__ == "__main__":
|
||||
scores = pd.DataFrame(all_boldness_scores)
|
||||
scores.to_csv("boldness_scores.csv", sep=";")
|
||||
for s in subjects:
|
||||
days = df.day[df.subject == s].unique()
|
||||
print(s, np.mean(scores.boldness[scores.subject == s]), np.mean(scores.total_visits[scores.subject == s]))
|
||||
|
||||
plot_boldness_analysis(df, s, "day_4")
|
||||
plot_boldness_analysis(df, s, "day_5")
|
||||
for day in days:
|
||||
plot_boldness_analysis(df, s, day)
|
||||
plot_boldness_analysis(df, s, day)
|
||||
|
||||
|
@ -197,7 +197,7 @@ def plot_risk_per_day(data, subjects):
|
||||
avg_feeder_risks_dark = avg_feeder_risks_dark[np.argsort(days)]
|
||||
days = days[np.argsort(days)]
|
||||
|
||||
m, n, r, p, _ = st.linregress(days, trs)
|
||||
m, n, r, p, _ = st.linregress(days[~np.isnan(trs)], trs[~np.isnan(trs)])
|
||||
ax1.plot(days, trs, marker=".", label=subject)
|
||||
ax1.plot(days, m * days + n, label="r: %.2f, p:%.3f" % (r, p))
|
||||
ax1.legend(fontsize=7)
|
||||
@ -205,7 +205,7 @@ def plot_risk_per_day(data, subjects):
|
||||
ax1.set_ylabel("total risk", fontsize=9)
|
||||
|
||||
ax2.plot(days, trs/num_visits, marker=".", label=subject)
|
||||
m, n, r, p, _ = st.linregress(days, trs/num_visits)
|
||||
m, n, r, p, _ = st.linregress(days[~np.isnan(trs/num_visits)], (trs/num_visits)[~np.isnan(trs/num_visits)])
|
||||
ax2.plot(days, m * days + n, label="r: %.2f, p:%.3f" % (r, p))
|
||||
ax2.set_ylim([0, 2])
|
||||
ax2.set_ylabel("avg. risk per visit", fontsize=9)
|
||||
@ -213,8 +213,9 @@ def plot_risk_per_day(data, subjects):
|
||||
ax2.legend(fontsize=7)
|
||||
|
||||
ax3.plot(days, trs/num_visits/avg_feeder_risks, marker=".", label="")
|
||||
m, n, r, p, _ = st.linregress(days, trs/num_visits/avg_feeder_risks)
|
||||
t, p = st.ttest_1samp(trs/num_visits/avg_feeder_risks - avg_feeder_risks_dark/avg_feeder_risks, 0)
|
||||
m, n, r, p, _ = st.linregress(days[~np.isnan(trs/num_visits/avg_feeder_risks)], (trs/num_visits/avg_feeder_risks)[~np.isnan(trs/num_visits/avg_feeder_risks)])
|
||||
t, p = st.ttest_1samp((trs/num_visits/avg_feeder_risks - avg_feeder_risks_dark/avg_feeder_risks)[~np.isnan(trs/num_visits/avg_feeder_risks - avg_feeder_risks_dark/avg_feeder_risks)], 0)
|
||||
print(subject, "ttest: p: %.3f," % p)
|
||||
ax3.plot(days, m * days + n, label="r: %.2f, p:%.3f" % (r, p))
|
||||
ax3.plot(days, avg_feeder_risks_dark/avg_feeder_risks, color="dodgerblue", ls="dashed", lw=0.5, label="avg. feeder risk dark")
|
||||
ax3.hlines(1.0, min(days), max(days), ls="dashed", color="darkgreen", lw=0.5, zorder=0, label="avg. feeder risk")
|
||||
@ -235,7 +236,7 @@ def compare_risks_per_subject(data, subjects):
|
||||
total_risks_rel = []
|
||||
for subject in subjects:
|
||||
subject_data = data[data.subject == subject]
|
||||
|
||||
|
||||
days = subject_data.day_number.values
|
||||
trs = subject_data.total_risk.values
|
||||
x = subject_data.sorted_risks.values
|
||||
@ -246,9 +247,9 @@ def compare_risks_per_subject(data, subjects):
|
||||
num_visits = num_visits[np.argsort(days)]
|
||||
days = days[np.argsort(days)]
|
||||
|
||||
total_risks.append(trs)
|
||||
total_risks_rel.append(trs/num_visits)
|
||||
|
||||
total_risks.append(trs[~np.isnan(trs)])
|
||||
total_risks_rel.append((trs[num_visits > 0]/num_visits[num_visits > 0]))
|
||||
|
||||
fig = plt.figure(figsize=(5, 5))
|
||||
ax1 = fig.add_subplot(2,1,1)
|
||||
ax2 = fig.add_subplot(2,1,2)
|
||||
@ -260,7 +261,7 @@ def compare_risks_per_subject(data, subjects):
|
||||
ax2.boxplot(total_risks_rel, showfliers=False)
|
||||
ax2.set_xticklabels(subjects, fontsize=9, rotation=45)
|
||||
ax2.set_ylabel("risk per visit", fontsize=9)
|
||||
ax2.set_ylim([0, 1])
|
||||
ax2.set_ylim([0, 2.0])
|
||||
|
||||
fig.subplots_adjust(left=0.1, right=0.975, top=0.975, bottom=0.15, hspace=0.2)
|
||||
fig.savefig("total_risk_comparison.pdf")
|
||||
@ -286,16 +287,22 @@ def plot_risk_over_time(data, subjects):
|
||||
day = days[index]
|
||||
day_times = times[index]
|
||||
day_risks = risks[index]
|
||||
m, n, _, _, _ = st.linregress(day_times, np.cumsum(day_risks))
|
||||
slopes.append(m)
|
||||
print(subject, len(day_times), len(day_risks))
|
||||
if len(day_risks) > 1:
|
||||
m, n, _, _, _ = st.linregress(day_times, np.cumsum(day_risks))
|
||||
slopes.append(m)
|
||||
else:
|
||||
slopes.append(np.nan)
|
||||
l = ax1.plot(day_times, np.cumsum(day_risks), marker=".", lw=0.1, label=day)
|
||||
ax1.plot(day_times, m * day_times + n, lw=1, color=l[0].get_color())
|
||||
|
||||
slopes = np.array(slopes)
|
||||
all_slopes.append(slopes[~np.isnan(slopes)])
|
||||
|
||||
ax1.set_xlabel("time [s]")
|
||||
ax1.set_ylabel("risk taken")
|
||||
ax1.text(0.0, 1.05, subject, transform=ax1.transAxes, fontsize=9, fontweight="bold")
|
||||
ax2.scatter(day_numbers, slopes, marker="o", label="slopes")
|
||||
m, n, r, p, _ = st.linregress(day_numbers, slopes)
|
||||
m, n, r, p, _ = st.linregress(day_numbers[~np.isnan(slopes)], slopes[~np.isnan(slopes)])
|
||||
ax2.plot(day_numbers, m * day_numbers + n, label="r: %.2f, p: %.3f" % (r, p))
|
||||
ax2.set_xlabel("experimental day", fontsize=9)
|
||||
ax2.set_ylabel("slope [risk/s]", fontsize=9)
|
||||
@ -305,7 +312,6 @@ def plot_risk_over_time(data, subjects):
|
||||
fig.savefig("risk_over_time_%s.pdf" % subject)
|
||||
plt.close()
|
||||
|
||||
all_slopes.append(slopes)
|
||||
fig = plt.figure(figsize=(3.5, 3.5))
|
||||
ax = fig.add_subplot(111)
|
||||
ax.boxplot(all_slopes, showfliers=False)
|
||||
@ -325,8 +331,8 @@ if __name__ == '__main__':
|
||||
days = df.day.unique()
|
||||
subjects = df.subject.unique()
|
||||
plot_trial_visit_times(df, df2, days, subjects)
|
||||
#boldness = analyze_feeder_risk(df, subjects, days)
|
||||
#plot_risk_per_day(boldness, subjects)
|
||||
#compare_risks_per_subject(boldness, subjects)
|
||||
#plot_risk_over_time(boldness, subjects)
|
||||
boldness = analyze_feeder_risk(df, subjects, days)
|
||||
plot_risk_per_day(boldness, subjects)
|
||||
compare_risks_per_subject(boldness, subjects)
|
||||
plot_risk_over_time(boldness, subjects)
|
||||
|
Loading…
Reference in New Issue
Block a user