# Histo Blocks

### 3 collaborators

Uri Wilensky (Author)
Josh Unterman (Author)
Dor Abrahamson (Author)

### Tags

(This model has yet to be categorized with any tags)
Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0.4 • Viewed 231 times • Downloaded 30 times • Run 0 times

## WHAT IS IT?

This model is a part of the ProbLab curriculum. The ProbLab Curriculum is currently under development at the Embodied Design Research Laboratory (EDRL), University of California, Berkeley. For more information about the ProbLab Curriculum please refer to http://ccl.northwestern.edu/curriculum/ProbLab/.

Histo-Blocks is a model for exploring the binomial function. The random generator is a "4-Block," a 2-by-2 matrix, in which each of the four squares independently can be either green or blue. The 4-Block is thus just like four coins that each can land either on heads or tails, only that here you can easily adjust the collective chance of these four independent singleton events. For instance, you could adjust the model so that it will behave like four coins that each has a .6 chance of landing on heads. The model shows connections between the random generator's sample space, probabilities of its singleton events, its expected outcome distribution, and the binomial function.

(This model is on theoretical probability only -- not empirical probability -- so there is no simulated experiment here.)

## HOW IT WORKS

The View displays the 16 unique elemental events of the green/blue 4-Block, arranged in five columns by the number of green squares in each permutation (0 through 4). Labels on each of the singleton green squares show the current p value, and labels on the blue blocks show the complementary (1 - p) value. The p value can be changed using a slider that is below the View. When you click and hold the mouse button over a column in the View, three monitors to the left of the View display information: the number of blocks in that column (n-choose-k), the compound probability of each of the blocks in that column (the product of the probabilities of the four independent singleton events), and the product of these two latter components. This product -- the number of blocks in a column multiplied by the probability of each block in the column -- represents the chance of randomly getting any one of the blocks in that column, when you operate the random generator (that is, the chance of getting the combination regardless of the particular permutation). For example, the chance of getting any 4-Block with exactly 1 green is the same as the chance of getting exactly one heads when you toss four coins.

The plot shows a special histogram, in which each column is partitioned equally into as many parts as there are blocks in its corresponding View column, below. For example, the "2" column in the histogram in partitioned into 6 equal segments, because there are 6 unique 4-blocks that have two green squares in the block. Whereas the blocks are equal in height within the columns, they differ in height between columns (for p values other than .5). The relative heights index the compound probability. So the histogram blocks -- the "histo-blocks" -- feature both factors at play in the binomial function: the n-choose-k coefficients are represented by the number of blocks in the column, and p^k * (1 - p)^(n - k) is represented by these blocks' individual heights.

## HOW TO USE IT

Press on SETUP, then GO. Now, grab the slider and change the p value.

Buttons: SETUP builds the "combinations tower" in the View. GO enables the functioning of clicking on the screen and of the slider.

Switch: PLOT-INDIVIDUAL-BLOCKS? toggles between having or not having the histogram partitioned. AUTO-ADJUST-Y-AXIS? when set to 'On,' the histogram will keep adjusting for new p values so that the tallest column reaches to the top. When off, the max y value is 1.

Sliders: P sets the p value.

Monitors: When you click and hold down the mouse button over a given column in the view, the NUMBER OF ITEMS IN THIS COLUMN, PROBABILITY OF EACH ITEM IN THIS COLUMN, and N-CHOOSE K * COMPOUND P monitors update to provide information about that column.

## THINGS TO NOTICE

Note the probability values appearing in little labels on the squares. Also note the shape of the histogram. Both the labels and histogram change with p.

## THINGS TO TRY

Set the p value (on the slider) to .6. Looking at the plot, what is special about this p value? Can you find other p values that give this same effect? With p set to .6, click anywhere on the middle column (2-green column). Observe the monitors. Now, with the mouse still down, drag the mouse one column to the right. What happened in the monitors?

Set the auto-adjust-y-axis? to 'Off,' and slide the p value. Look at the histogram as you do this. What is happening to the histogram? -- What is changing?; What is not changing? What does this mean, in terms of the probabilities?

## EXTENDING THE MODEL

Add empirical functions to the model: create another histogram that shows actual outcomes of a simulated probability experiment with a 4-block (a sample of 4 independent events that each take on one of two possible values). Place this new histogram on the interface such that it will readily compare to the histo-block histogram. You can partition this histogram, too, according to sub-groups in the outcomes.

## NETLOGO FEATURES

This model uses a special procedure in order to partition the histogram columns.

## RELATED MODELS

Several of ProbLab's models are related to Histo Blocks, notably Sample Stalagmite.

## CREDITS AND REFERENCES

Thanks to Dor Abrahamson for his work on the design of this model and the ProbLab curriculum. Thank you to Josh Unterman for his talent and work on producing this model.

## HOW TO CITE

If you mention this model in a publication, we ask that you include these citations for the model itself and for the NetLogo software:

• Abrahamson, D. and Wilensky, U. (2009). NetLogo Histo Blocks model. http://ccl.northwestern.edu/netlogo/models/HistoBlocks. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
• Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.

Click to Run Model

```globals [
unordered-probabilities
num-orderings
expected-results

number-of-items-in-column-text
probability-of-items-in-column-text
number-of-items-in-column
probability-of-items-in-column
]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Setup Procedures
;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup
ca reset-ticks
set-plot-x-range 0 5
setup-view
set number-of-items-in-column-text "-"
set probability-of-items-in-column-text "-"
set number-of-items-in-column "-"
set probability-of-items-in-column "-"
go
end

to setup-view
ask patches with [pcolor = black] [set pcolor grey + 1]
update-unordered-probabilities
update-num-orderings
let active-x min-x
let active-y round min-pycor
let delta-y round (world-height / 5)
let possibility-index 0
foreach n-values 5 [?] [
foreach n-values item ? num-orderings [?] [
let current-4-block item possibility-index all-possibilities
sprout 1 [
set shape "bordered-square"
ifelse item 0 current-4-block = 1 [
set color green
] [
set color blue
]
]
]
sprout 1 [
set shape "bordered-square"
ifelse item 1 current-4-block = 1 [
set color green
] [
set color blue
]
]
]
sprout 1 [
set shape "bordered-square"
ifelse item 2 current-4-block = 1 [
set color green
] [
set color blue
]
]
]
sprout 1 [
set shape "bordered-square"
ifelse item 3 current-4-block = 1 [
set color green
] [
set color blue
]
]
]
]
set active-y active-y + delta-y
set possibility-index possibility-index + 1
]
set active-y min-pycor
set active-x active-x + delta-x
]
end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Runtime Procedures
;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to go
every .1 [
handle-mouse
]
update-unordered-probabilities
update-num-orderings
set expected-results (map [?1 * ?2] unordered-probabilities num-orderings)
update-plot
ifelse color = green [
set label precision p 2
] [
set label precision (1 - p) 2
]
if length (word label) = 3 [ set label word label "0" ] ;; force to 2 decimal places
if length (word label) = 1 [ set label word label ".00" ] ;; force to 2 decimal places
]

tick
end

to handle-mouse
ifelse mouse-down? [
let column round ((mouse-xcor - min-x) / delta-x)
if column < 0 [ set column 0 ]
if column > 4 [ set column 4 ]
set number-of-items-in-column-text num-items-in-column column
set probability-of-items-in-column-text chance-of-each-item-in-column column
set number-of-items-in-column item column num-orderings
set probability-of-items-in-column item column unordered-probabilities
] [
set number-of-items-in-column-text "-"
set probability-of-items-in-column-text  "-"
set number-of-items-in-column "-"
set probability-of-items-in-column "-"
]
end

to update-unordered-probabilities
set unordered-probabilities n-values 5 [
column-prob 4 ?
]
end

to update-num-orderings
set num-orderings n-values 5 [
choose 4 ?
]
end

to-report column-prob [n c]
let result 1
repeat c [
set result result * p
]
repeat (n - c) [
set result result * (1 - p)
]
report result
end

to-report choose [n c]
report ((factorial n)/((factorial c) * (factorial (n - c))))
end

to-report factorial [n]
report ifelse-value (n = 0) [
1
] [
n * factorial (n - 1)
]
end

to update-plot
plot-pen-reset
let max-expected-result max expected-results
set-plot-y-range 0 precision ((max-expected-result * 1000 + 10) / 1000)  3
] [
set-plot-y-range 0 1
]
ifelse plot-individual-blocks? [
let greenness 0
(foreach expected-results num-orderings [
let per-block ?1 / ?2
let value-to-plot per-block
repeat ?2 [
plotxy greenness value-to-plot
set value-to-plot value-to-plot + per-block
]
set greenness greenness + 1
])
] [
foreach expected-results [
plot ?
]
]
end

;;;;;;;;;;;;;;;;;;;;;;;;
;; monitor work is below
;;;;;;;;;;;;;;;;;;;;;;;;

to-report num-items-in-column [index]
report (word 4 "-choose-" index " = " item index num-orderings)
end

to-report chance-of-each-item-in-column [index]
let result ""
foreach n-values 4 [?] [
if ? > 0 [
set result word result " * "
]
ifelse ? < index [
set result (word result precision p 2)
] [
set result (word result precision (1 - p) 2)
]
]
report (word result " ~= " (precision item index unordered-probabilities 4))
end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Reporter Procedures
;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to-report min-x
report round (2 * min-pxcor / 3) - 1
end

to-report delta-x
report round (world-width / 6)
end

;; all possible 4-blocks

to-report all-possibilities
report (list
[0 0 0 0]

[0 0 0 1]
[0 0 1 0]
[0 1 0 0]
[1 0 0 0]

[0 0 1 1]
[0 1 0 1]
[0 1 1 0]
[1 0 0 1]
[1 0 1 0]
[1 1 0 0]

[0 1 1 1]
[1 0 1 1]
[1 1 0 1]
[1 1 1 0]

[1 1 1 1]
)
end

```

There are 10 versions of this model.

Uri Wilensky over 10 years ago Updated to NetLogo 5.0.4 Download this version
Uri Wilensky almost 11 years ago Updated version tag Download this version
Uri Wilensky almost 11 years ago Updated to version from NetLogo 5.0.3 distribution Download this version
Uri Wilensky over 11 years ago Updated to NetLogo 5.0 Download this version
Uri Wilensky over 13 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 13 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 13 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 13 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 13 years ago Model from NetLogo distribution Download this version