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æ}}==
Fōrmulæ programs are not textual, visualization/edition of programs is done showing/manipulating structures but not text. Moreover, there can be multiple visual representations of the same program. Even though it is possible to have textual representation &mdash;i.e. XML, JSON&mdash; they are intended for storage and transfer purposes more than visualization and edition.
 
{{FormulaeEntry|page=https://formulae.org/?script=examples/Diversity_prediction_theorem}}
Programs in Fōrmulæ are created/edited online in its [https://formulae.org website], However they run on execution servers. By default remote servers are used, but they are limited in memory and processing power, since they are intended for demonstration and casual use. A local server can be downloaded and installed, it has no limitations (it runs in your own computer). Because of that, example programs can be fully visualized and edited, but some of them will not run if they require a moderate or heavy computation/memory resources, and no local server is being used.
 
'''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]]
In '''[https://formulae.org/?example=Diversity_prediction_theorem this]''' page you can see the program(s) related to this task and their results.
 
=={{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="ecmascriptwren">import "./fmt" for Fmt
 
var averageSquareDiff = Fn.new { |f, preds|
2,054

edits