You can look up the mean and variance of a distribution on Wikipedia. This is the distribution of a single visitor and whether this visitor signs up (1) or not (0).
// A pure Javscript implementation of binomial distribution | |
// This is for educational purposes. These numbers can become unreliable | |
// when the numerators and denominators get too big. This is because | |
// of floating point arithmetic. | |
// | |
// Use a more robust statistical library for mission critical calculations | |
function factorial(n) { | |
let total = 1; | |
for(let i=n; i>1; i--) { |
CREATE TYPE avg_state AS ( | |
total numeric, | |
count integer | |
); | |
CREATE OR REPLACE FUNCTION my_avg_state(state avg_state, value numeric) | |
RETURNS avg_state AS $$ | |
BEGIN | |
IF value IS NOT NULL THEN | |
state.total := state.total + value; |
CREATE OR REPLACE FUNCTION my_count_state(state integer, value anyelement) | |
RETURNS integer AS $$ | |
BEGIN | |
IF value IS NOT NULL THEN | |
RETURN state + 1; | |
ELSE | |
RETURN state; | |
END IF; | |
END; | |
$$ LANGUAGE plpgsql; |
I’m assuming a lot of people in the audience haven’t studied statistics, but because this is Rubyconf, plenty of you know the principles of test-driven-development (TDD). If you haven’t studied statistics before, it follows the same principle as TDD.
In TDD, you demonstrate that your code is correct in two steps. First, assume your code is wrong. Second, try to disprove that assumption. The first step is when you write the test so that it fails. The second step is to change your application code so that the test passes.
In statistics we do the same thing. We first assume the opposite of what we want to prove. If we want to show that a drug treats a disease, we first assume that this drug has no effect. That’s what the placebo group is for. The placebo group is the “red” portion of “red-green refactoring.” The group that’s treated with the drug is (hopefully) the “green” portion of “red-green” factoring.
A statistical test will never PROVE that t
var file_path = "/Users/stevezelaznik/src/gnar/aarp-foundation-pta/app/javascript/src/tools/mn-2023/tables/renters_refund_table.csv" | |
var fs = require("fs"); | |
var Papa = require("papaparse"); | |
var sourceText = fs.readFileSync(file_path).toString(); | |
function hydrateType(types, cell, column_index) { | |
const type = typeof cell | |
switch(type) { | |
case 'string': |
import React, { useContext, createContext } from "react"; | |
const NestedHeaderContext = createContext<number>(2); | |
type HxCallback = (component: typeof Hx) => React.ReactNode; | |
type HxProps = { | |
children: React.ReactNode; | |
[x: string]: any; | |
}; |
function equalize_widths(table) { | |
var col_count = [...table.querySelectorAll('thead > tr > th')].length; | |
var total_table_width = 0; | |
for (let i=0; i<col_count; i++) { | |
let elements = [...table.querySelectorAll(`thead > tr > th:nth-child(${i+1}), tbody > tr > td:nth-child(${i+1})`)]; | |
let max_column_width = elements.reduce(function(acc, el) { | |
let computedStyle = window.getComputedStyle(el); |
require 'rspec/expectations' | |
=begin | |
# Example use case in a test suite: | |
# Make sure to have defined a factory in factory-bot for "job_application" | |
describe JobApplication, type: :model do | |
it { is_expected.to enforce_uniqueness_of(:uuid) } | |
end | |
=end |
require 'openssl' | |
# THIS IS A WORK IN PROGRESS | |
# NOT READY FOR PRODUCTION | |
# YOU'VE BEEN WARNED | |
class PostgresEncryptionSerializer | |
VALID_DATA_PATTERN = /\\x([0-9a-fA-F]{4})+/ | |
def self.load(binary_encrypted_data) | |
if binary_encrypted_data.nil? |