Diversity prediction theorem: Difference between revisions
Added Easylang
(→{{header|QuickBASIC}}: Added a solution.) |
(Added Easylang) |
||
(10 intermediate revisions by 5 users not shown) | |||
Line 136:
crowd-error : 4.00000
diversity : 10.50000
</pre>
=={{header|ALGOL 68}}==
{{Trans|Phix}}
<syntaxhighlight lang="algol68">
BEGIN # Diversity Prediction Theorem #
# utility operators #
OP LENGTH = ( []REAL a )INT: ( UPB a - LWB a ) + 1;
OP LENGTH = ( STRING a )INT: ( UPB a - LWB a ) + 1;
OP SUM = ( []REAL a )REAL:
BEGIN
REAL result := 0;
FOR i FROM LWB a TO UPB a DO result +:= a[ i ] OD;
result
END # SUM # ;
PRIO PAD = 9;
OP PAD = ( INT width, STRING v )STRING: # left blank pad v to width #
IF LENGTH v >= width THEN v ELSE ( " " * ( width - LENGTH v ) ) + v FI;
OP - = ( []REAL a, REAL v )[]REAL: # return a with elements - v #
BEGIN
[ LWB a : UPB a ]REAL result;
FOR i FROM LWB a TO UPB a DO result[ i ] := v - a[ i ] OD;
result
END # - # ;
OP ^ = ( []REAL a, INT p )[]REAL: # return a with elements raised to p #
BEGIN
[ LWB a : UPB a ]REAL result;
FOR i FROM LWB a TO UPB a DO result[ i ] := a[ i ] ^ p OD;
result
END # |^ # ;
PRIO FMT = 1;
OP FMT = ( REAL v, INT d )STRING: # formats v with up to d decimals #
BEGIN
STRING result := fixed( v, -0, d );
IF result[ LWB result ] = "." THEN "0" +=: result FI;
WHILE result[ UPB result ] = "0" DO result := result[ : UPB result - 1 ] OD;
IF result[ UPB result ] = "." THEN result := result[ : UPB result - 1 ] FI;
" " + result
END # FMT # ;
# task #
MODE NAMEDVALUE = STRUCT( STRING name, REAL value );
PROC mean = ( []REAL s )REAL: SUM s / LENGTH s;
PROC variance = ( []REAL s, REAL d )REAL: mean( ( s - d ) ^ 2 );
PROC diversity theorem = ( REAL reference, []REAL observations )[]NAMEDVALUE:
BEGIN
REAL average = mean( observations );
( ( "average_error", variance( observations, reference ) )
, ( "crowd_error", ( reference - average ) ^ 2 )
, ( "diversity", variance( observations, average ) )
)
END # diversity theorem # ;
PROC test = ( REAL reference, []REAL observations )VOID:
BEGIN
[]NAMEDVALUE res = diversity theorem( reference, observations );
FOR i FROM LWB res TO UPB res DO
print( ( 14 PAD name OF res[ i ], " : ", value OF res[ i ] FMT 6, newline ) )
OD
END # test # ;
test( 49, ( 48, 47, 51 ) );
test( 49, ( 48, 47, 51, 42 ) )
END
</syntaxhighlight>
{{out}}
<pre>
average_error : 3
crowd_error : 0.111111
diversity : 2.888889
average_error : 14.5
crowd_error : 4
diversity : 10.5
</pre>
=={{header|BASIC}}==
==={{header|ANSI BASIC}}===
{{trans|QuickBASIC}}
{{works with|Decimal BASIC}}
<syntaxhighlight lang="basic">
100 PROGRAM DiversityPredictionTheorem
110 OPTION BASE 0
120 DIM Estimates(1, 4)
130 FOR I = 0 TO 1
140 LET J = 0
150 READ Estimates(I, J)
160 DO WHILE Estimates(I, J) <> 0
170 LET J = J + 1
180 READ Estimates(I, J)
190 LOOP
200 NEXT I
210 DATA 48.0, 47.0, 51.0, 0.0
220 DATA 48.0, 47.0, 51.0, 42.0, 0.0
230 LET TrueVal = 49
240 FOR I = 0 TO 1
250 LET Sum = 0
260 LET J = 0
270 DO WHILE Estimates(I, J) <> 0
280 LET Sum = Sum + (Estimates(I, J) - TrueVal) ^ 2
290 LET J = J + 1
300 LOOP
310 LET AvgErr = Sum / J
320 PRINT USING "Average error : ##.###": AvgErr
330 LET Sum = 0
340 LET J = 0
350 DO WHILE Estimates(I, J) <> 0
360 LET Sum = Sum + Estimates(I, J)
370 LET J = J + 1
380 LOOP
390 LET Avg = Sum / J
400 LET CrowdErr = (TrueVal - Avg) ^ 2
410 PRINT USING "Crowd error : ##.###": CrowdErr
420 PRINT USING "Diversity : ##.###": AvgErr - CrowdErr
430 PRINT
440 NEXT I
450 END
</syntaxhighlight>
{{out}}
<pre>
Average error : 3.000
Crowd error : .111
Diversity : 2.889
Average error : 14.500
Crowd error : 4.000
Diversity : 10.500
</pre>
==={{header|BASIC256}}===
{{trans|FreeBASIC}}
Line 199 ⟶ 330:
Crowd error : 4.000
Diversity : 10.500</pre>
==={{header|Nascom BASIC}}===
{{trans|QuickBASIC}}
{{works with|Nascom ROM BASIC|4.7}}
<syntaxhighlight lang="basic">
10 REM Diversity prediction theorem
20 DIM EST(1,4):REM Estimates
30 FOR I=0 TO 1
40 J=0:READ EST(I,J)
50 IF EST(I,J)=0 THEN 80
60 J=J+1:READ EST(I,J)
70 GOTO 50
80 NEXT I
90 DATA 48.0,47.0,51.0,0.0
100 DATA 48.0,47.0,51.0,42.0,0.0
110 TV=49:REM True value
120 FOR I=0 TO 1
130 SUM=0:J=0
140 IF EST(I,J)=0 THEN 170
150 SUM=SUM+(EST(I,J)-TV)^2:J=J+1
160 GOTO 140
170 AER=SUM/J
180 PRINT "Average error :";AER
190 SUM=0:J=0
200 IF EST(I,J)=0 THEN 230
210 SUM=SUM+EST(I,J):J=J+1
220 GOTO 200
230 AVG=SUM/J
240 CER=(TV-AVG)^2
250 PRINT "Crowd error :";CER
260 PRINT "Diversity :";AER-CER
270 PRINT
280 NEXT I
290 END
</syntaxhighlight>
{{out}}
<pre>
Average error : 3
Crowd error : .11111
Diversity : 2.88889
Average error : 14.5
Crowd error : 4
Diversity : 10.5
</pre>
==={{header|PureBasic}}===
Line 607 ⟶ 783:
crowd-error: 4
diversity: 10.5</pre>
=={{header|EasyLang}}==
{{trans|BASIC256}}
<syntaxhighlight>
proc calc TrueVal test[] . .
for test in test[]
h = (test - TrueVal)
Vari += h * h
Sum += test
c += 1
.
AvgErr = Vari / c
RefAvg = Sum / c
h = (TrueVal - RefAvg)
CrowdErr = h * h
print "Average error : " & AvgErr
print " Crowd error : " & CrowdErr
print " Diversity : " & AvgErr - CrowdErr
print ""
.
calc 49 [ 48 47 51 ]
calc 49 [ 48 47 51 42 ]
</syntaxhighlight>
=={{header|Factor}}==
Line 625 ⟶ 824:
=={{header|Fōrmulæ}}==
{{FormulaeEntry|page=https://formulae.org/?script=examples/Diversity_prediction_theorem}}
'''Solution'''
[[File:Fōrmulæ - Diversity prediction theorem 01.png]]
'''Test case 1.''' A true value of 49 with crowd estimates of 48, 47 and 51
[[File:Fōrmulæ - Diversity prediction theorem 02.png]]
[[File:Fōrmulæ - Diversity prediction theorem 03.png]]
'''Test case 2.''' A true value of 49 with crowd estimates of 48, 47, 51 and 42
[[File:Fōrmulæ - Diversity prediction theorem 04.png]]
[[File:Fōrmulæ - Diversity prediction theorem 05.png]]
=={{header|Go}}==
Line 1,741 ⟶ 1,953:
the crowd error: 4
prediction diversity: 10.5
</pre>
=={{header|RPL}}==
{{works with|HP|48G}}
{| class="wikitable" ≪
! RPL code
! Comment
|-
|
« → pivot
« 1 « pivot - SQ » DOLIST
∑LIST LASTARG SIZE /
» » '<span style="color:blue">SQDIF</span>' STO
« → preds truth
« preds truth <span style="color:blue">SQDIF</span> "avg_err" →TAG
preds ∑LIST LASTARG SIZE /
DUP truth - SQ "cwd_err" →TAG
preds ROT <span style="color:blue">SQDIF</span> "pred_div" →TAG
3 →LIST
» » '<span style="color:blue">CROWD</span>' STO
|
<span style="color:blue">SQDIF</span> ( { values } pivot → average((value-pivot)²) )
get (value-pivot)²
get average
<span style="color:blue">CROWD</span> ( { preds } truth → { report } )
avg_err = mean((pred-truth)²)
average = ∑preds / number of preds
cwd_err = (average-truth)²
prd_div = mean((pred-cwd_err)²)
put them all into a list
|}
{ 48 47 51 } 49 <span style="color:blue">CROWD</span>
{ 48 47 51 42 } 49 <span style="color:blue">CROWD</span>
{{out}}
<pre>
2: { avg_err:3 cwd_err:0.111111111111 pred_div:2.88888888889 }
1: { avg_err:14.5 cwd_err:4 pred_div:10.5 }
</pre>
Line 1,876 ⟶ 2,129:
=={{header|Wren}}==
{{trans|Go}}
<syntaxhighlight lang="
var averageSquareDiff = Fn.new { |f, preds|
|