feat: Fix distribution display
Distribution display now keeps to the [0.03, 0.97] confidence interval. This fixes a longstanding annoying bug. The [0.03, 0.97] confidence interval was chosen after a bit of testing, but I have no particular attachment to it.
This commit is contained in:
		
							parent
							
								
									d80ea676c5
								
							
						
					
					
						commit
						2944b0f79f
					
				|  | @ -38,8 +38,32 @@ export const DistributionChart: React.FC<DistributionChartProps> = ({ | ||||||
| }) => { | }) => { | ||||||
|   const [isLogX, setLogX] = React.useState(false); |   const [isLogX, setLogX] = React.useState(false); | ||||||
|   const [isExpY, setExpY] = React.useState(false); |   const [isExpY, setExpY] = React.useState(false); | ||||||
|   const shape = distribution.pointSet(); | 
 | ||||||
|   const [sized] = useSize((size) => { |   const [sized] = useSize((size) => { | ||||||
|  | 
 | ||||||
|  |     const p3wrapped = distribution.inv(0.03); | ||||||
|  |     const p97wrapped = distribution.inv(0.97); | ||||||
|  |     if (p3wrapped.tag == "Error") { | ||||||
|  |       return <ErrorAlert heading="Distribution Calculation Error"> | ||||||
|  |         {distributionErrorToString(p3wrapped.value)} | ||||||
|  |       </ErrorAlert> | ||||||
|  |     } else if (p97wrapped.tag == "Error") { | ||||||
|  |       return <ErrorAlert heading="Distribution Calculation Error"> | ||||||
|  |         {distributionErrorToString(p97wrapped.value)} | ||||||
|  |       </ErrorAlert> | ||||||
|  |     } | ||||||
|  |     const p3 = p3wrapped.value | ||||||
|  |     const p97 = p97wrapped.value | ||||||
|  | 
 | ||||||
|  |     const truncatedDistributionWrapper = distribution.truncate(p3, p97) | ||||||
|  |     if (truncatedDistributionWrapper.tag == "Error") { | ||||||
|  |       return <ErrorAlert heading="Distribution Truncation For Display Error"> | ||||||
|  |         {distributionErrorToString(truncatedDistributionWrapper.value)} | ||||||
|  |       </ErrorAlert> | ||||||
|  |     } | ||||||
|  |     const truncatedDistribution = truncatedDistributionWrapper.value | ||||||
|  | 
 | ||||||
|  |     const shape = truncatedDistribution.pointSet(); //distribution.pointSet();
 | ||||||
|     if (shape.tag === "Error") { |     if (shape.tag === "Error") { | ||||||
|       return ( |       return ( | ||||||
|         <ErrorAlert heading="Distribution Error"> |         <ErrorAlert heading="Distribution Error"> | ||||||
|  | @ -82,10 +106,10 @@ export const DistributionChart: React.FC<DistributionChartProps> = ({ | ||||||
|               // Check whether we should disable the checkbox
 |               // Check whether we should disable the checkbox
 | ||||||
|               {...(massBelow0 |               {...(massBelow0 | ||||||
|                 ? { |                 ? { | ||||||
|                     disabled: true, |                   disabled: true, | ||||||
|                     tooltip: |                   tooltip: | ||||||
|                       "Your distribution has mass lower than or equal to 0. Log only works on strictly positive values.", |                     "Your distribution has mass lower than or equal to 0. Log only works on strictly positive values.", | ||||||
|                   } |                 } | ||||||
|                 : {})} |                 : {})} | ||||||
|             /> |             /> | ||||||
|             <CheckBox label="Exp Y scale" value={isExpY} onChange={setExpY} /> |             <CheckBox label="Exp Y scale" value={isExpY} onChange={setExpY} /> | ||||||
|  | @ -158,12 +182,12 @@ const SummaryTable: React.FC<SummaryTableProps> = ({ distribution }) => { | ||||||
|   const mean = distribution.mean(); |   const mean = distribution.mean(); | ||||||
|   const stdev = distribution.stdev(); |   const stdev = distribution.stdev(); | ||||||
|   const p5 = distribution.inv(0.05); |   const p5 = distribution.inv(0.05); | ||||||
|   const p10 = distribution.inv(0.1); |   const p30 = distribution.inv(0.1); | ||||||
|   const p25 = distribution.inv(0.25); |   const p25 = distribution.inv(0.25); | ||||||
|   const p50 = distribution.inv(0.5); |   const p50 = distribution.inv(0.5); | ||||||
|   const p75 = distribution.inv(0.75); |   const p75 = distribution.inv(0.75); | ||||||
|   const p90 = distribution.inv(0.9); |   const p90 = distribution.inv(0.9); | ||||||
|   const p95 = distribution.inv(0.95); |   const p97 = distribution.inv(0.95); | ||||||
| 
 | 
 | ||||||
|   const hasResult = (x: result<number, distributionError>): boolean => |   const hasResult = (x: result<number, distributionError>): boolean => | ||||||
|     x.tag === "Ok"; |     x.tag === "Ok"; | ||||||
|  | @ -202,12 +226,12 @@ const SummaryTable: React.FC<SummaryTableProps> = ({ distribution }) => { | ||||||
|           <Cell>{unwrapResult(mean)}</Cell> |           <Cell>{unwrapResult(mean)}</Cell> | ||||||
|           {hasResult(stdev) && <Cell>{unwrapResult(stdev)}</Cell>} |           {hasResult(stdev) && <Cell>{unwrapResult(stdev)}</Cell>} | ||||||
|           <Cell>{unwrapResult(p5)}</Cell> |           <Cell>{unwrapResult(p5)}</Cell> | ||||||
|           <Cell>{unwrapResult(p10)}</Cell> |           <Cell>{unwrapResult(p30)}</Cell> | ||||||
|           <Cell>{unwrapResult(p25)}</Cell> |           <Cell>{unwrapResult(p25)}</Cell> | ||||||
|           <Cell>{unwrapResult(p50)}</Cell> |           <Cell>{unwrapResult(p50)}</Cell> | ||||||
|           <Cell>{unwrapResult(p75)}</Cell> |           <Cell>{unwrapResult(p75)}</Cell> | ||||||
|           <Cell>{unwrapResult(p90)}</Cell> |           <Cell>{unwrapResult(p90)}</Cell> | ||||||
|           <Cell>{unwrapResult(p95)}</Cell> |           <Cell>{unwrapResult(p97)}</Cell> | ||||||
|         </tr> |         </tr> | ||||||
|       </tbody> |       </tbody> | ||||||
|     </table> |     </table> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user