Skip to content

Commit

Permalink
dart format .
Browse files Browse the repository at this point in the history
  • Loading branch information
yaramt committed Aug 13, 2024
1 parent a4e686f commit 3410111
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 34 deletions.
29 changes: 19 additions & 10 deletions app/lib/screens/study/report/sections/average_section_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,29 @@ class AverageSectionWidget extends ReportSectionWidget {
@override
Widget build(BuildContext context) {
final data = getAggregatedData().toList();
final aggregatedDataByDay =
aggregateDataBy(null).toList();
final aggregatedDataByDay = aggregateDataBy(null).toList();
// Filter out baseline data
final filteredData = aggregatedDataByDay.where((datum) => datum.intervention != '__baseline');
final filteredData = aggregatedDataByDay
.where((datum) => datum.intervention != '__baseline');
// Group data by intervention
final interventionGroups = filteredData.fold<Map<String, List<num>>>({}, (map, datum) {
final interventionGroups =
filteredData.fold<Map<String, List<num>>>({}, (map, datum) {
map.putIfAbsent(datum.intervention, () => []).add(datum.value);
return map;
});
// Extract keys from the map
final keys = interventionGroups.keys.toList();
// Define default empty lists
final List<num> valuesInterventionA = keys.isNotEmpty ? interventionGroups[keys[0]]! : [];
final List<num> valuesInterventionB = keys.length > 1 ? interventionGroups[keys[1]]! : [];
final String nameInterventionA = keys.isNotEmpty ? getInterventionNameFromInterventionId(context, keys[0])! : "";
final String nameInterventionB = keys.length > 1 ? getInterventionNameFromInterventionId(context, keys[1])! : "";
final List<num> valuesInterventionA =
keys.isNotEmpty ? interventionGroups[keys[0]]! : [];
final List<num> valuesInterventionB =
keys.length > 1 ? interventionGroups[keys[1]]! : [];
final String nameInterventionA = keys.isNotEmpty
? getInterventionNameFromInterventionId(context, keys[0])!
: "";
final String nameInterventionB = keys.length > 1
? getInterventionNameFromInterventionId(context, keys[1])!
: "";
final taskTitle = subject.study.observations
.firstWhereOrNull(
(element) => element.id == section.resultProperty!.task,
Expand All @@ -51,7 +58,8 @@ class AverageSectionWidget extends ReportSectionWidget {
.copyWith(fontWeight: FontWeight.bold),
),
const SizedBox(height: 8),
TextualSummaryWidget(valuesInterventionA, valuesInterventionB, nameInterventionA, nameInterventionB, subject, section), //Row 2
TextualSummaryWidget(valuesInterventionA, valuesInterventionB,
nameInterventionA, nameInterventionB, subject, section), //Row 2
const SizedBox(height: 8),
const GaugeTitleWidget(), //Row 3
const SizedBox(height: 8),
Expand Down Expand Up @@ -346,7 +354,8 @@ class AverageSectionWidget extends ReportSectionWidget {
return names;
}

String? getInterventionNameFromInterventionId(BuildContext context, String interventionId) {
String? getInterventionNameFromInterventionId(
BuildContext context, String interventionId) {
for (final intervention in subject.study.interventions) {
if (intervention.id == interventionId) {
return intervention.name;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import 'package:flutter/material.dart';

// Row 6: Descriptive Statistics
class DescriptiveStatisticsWidget extends StatelessWidget {

const DescriptiveStatisticsWidget({super.key});

@override
Expand All @@ -18,9 +17,9 @@ class DescriptiveStatisticsWidget extends StatelessWidget {
),
],
),
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Column(
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Column(
children: [
_buildStatisticsTable(),
const Padding(
Expand All @@ -32,8 +31,8 @@ class DescriptiveStatisticsWidget extends StatelessWidget {
),
),
],
),
),
),
],
),
);
Expand Down Expand Up @@ -65,7 +64,14 @@ class DescriptiveStatisticsWidget extends StatelessWidget {
},
children: [
_buildTableRow(
['Intervention', 'Observations', 'Average', 'Min', 'Max', 'Variance'],
[
'Intervention',
'Observations',
'Average',
'Min',
'Max',
'Variance'
],
isHeader: true,
),
_buildTableRow(['Tea', '14', '5.0', '4', '3', '1.2']),
Expand Down
7 changes: 4 additions & 3 deletions app/lib/screens/study/report/sections/results_gauge.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,10 @@ class GaugesWidget extends StatelessWidget {
TextSpan(
text: '$value',
style: const TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
color: Colors.blue,),
fontSize: 24,
fontWeight: FontWeight.bold,
color: Colors.blue,
),
),
TextSpan(
text: '/$max',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,14 @@ class TextualSummaryWidget extends AverageSectionWidget {
final String nameInterventionB;

const TextualSummaryWidget(
this.valuesInterventionA,
this.valuesInterventionB,
this.nameInterventionA,
this.nameInterventionB,
super.subject,
super.section,
{super.key,});
this.valuesInterventionA,
this.valuesInterventionB,
this.nameInterventionA,
this.nameInterventionB,
super.subject,
super.section, {
super.key,
});

@override
Widget build(BuildContext context) {
Expand Down
22 changes: 14 additions & 8 deletions app/lib/screens/study/report/sections/t_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,32 @@ class TTest {
}

// Calculate t-statistic using Welch's formula for two sample t-test
num calculateTStatistic(num meanA, num meanB, num varianceA, num varianceB, int nA, int nB) {
num calculateTStatistic(
num meanA, num meanB, num varianceA, num varianceB, int nA, int nB) {
final num numerator = meanA - meanB;
final num denominator = sqrt((varianceA / nA) + (varianceB / nB));
return numerator / denominator;
}

// Calculate degrees of freedom using Welch-Satterthwaite equation
double calculateDegreesOfFreedom(num meanA, num meanB, num varianceA, num varianceB, int nA, int nB) {
double calculateDegreesOfFreedom(
num meanA, num meanB, num varianceA, num varianceB, int nA, int nB) {
final num numerator = pow((varianceA / nA) + (varianceB / nB), 2);
final num denominator = (pow(varianceA / nA, 2) / (nA - 1)) + (pow(varianceB / nB, 2) / (nB - 1));
final num denominator = (pow(varianceA / nA, 2) / (nA - 1)) +
(pow(varianceB / nB, 2) / (nB - 1));
return numerator / denominator;
}

double getTCriticalFromCsv(double degreesOfFreedom, String filePath) {
final List<List<double>> rows = const CsvToListConverter().convert(filePath);
final List<List<double>> rows =
const CsvToListConverter().convert(filePath);
for (final row in rows) {
if (row[0] == degreesOfFreedom) {
return row[1];
}
}
throw Exception("Degrees of Freedom not found in CSV, study too long, reduce number of days");
throw Exception(
"Degrees of Freedom not found in CSV, study too long, reduce number of days");
}

double getTCritical(double degreesOfFreedom) {
Expand All @@ -56,10 +61,11 @@ class TTest {
final num varianceB = variance(sampleB);
final int nA = sampleA.length;
final int nB = sampleB.length;
final num tStatistic = calculateTStatistic(meanA, meanB, varianceA, varianceB, nA, nB);
final double degreesOfFreedom = calculateDegreesOfFreedom(meanA, meanB, varianceA, varianceB, nA, nB);
final num tStatistic =
calculateTStatistic(meanA, meanB, varianceA, varianceB, nA, nB);
final double degreesOfFreedom =
calculateDegreesOfFreedom(meanA, meanB, varianceA, varianceB, nA, nB);
final double tCritical = getTCritical(degreesOfFreedom);
return tStatistic.abs() > tCritical;
}

}

0 comments on commit 3410111

Please sign in to comment.