Skip to content

Instantly share code, notes, and snippets.

View willtownes's full-sized avatar

Will Townes willtownes

View GitHub Profile
@willtownes
willtownes / poisson_prediction_interval.Rmd
Created November 21, 2023 21:34
Prediction interval for Poisson regression
---
title: "Poisson prediction interval"
author: "Will Townes"
output: html_document
---
Poisson prediction interval based on [Kim et al 2022](https://doi.org/10.1002/wics.1568)
```{r}
n<-100
@willtownes
willtownes / grigorev_twitter_question.py
Created February 5, 2021 16:46
Grigorev twitter interview question
"""
From https://twitter.com/Al_Grigor/status/1357028887209902088
Most candidates cannot solve this interview problem:
* Input: "aaaabbbcca"
* Output: [("a", 4), ("b", 3), ("c", 2), ("a", 1)]
Write a function that converts the input to the output
I ask it in the screening interview and give it 25 minutes
How would you solve it?
"""
@willtownes
willtownes / gpflow_multioutput.py
Created September 21, 2020 15:04
GPflow multioutput
from gpflow.conditionals import conditional
from gpflow.inducing_variables import SeparateIndependentInducingVariables
from gpflow.kernels import SeparateIndependent
#note: object 'm' is of type gpflow.models.svgp.SVGP
ind_conditional = conditional.dispatch(
object, SeparateIndependentInducingVariables, SeparateIndependent, object)
gmu, gvar = ind_conditional(
X,
@willtownes
willtownes / loess_vs_gp.R
Last active February 17, 2022 16:23
Is LOESS a special case of a Gaussian process?
library(pdist)
n<-200
X<-matrix(10*runif(n),ncol=1)
y<-sin(X[,1])#+rnorm(n,sd=.2)
#plot(X[,1],y)
#xnew<-3
#span<-1
my_loess<-function(xnew,X,y,span=.75){
@willtownes
willtownes / omptest.cpp
Created October 5, 2018 21:32
Test whether clang++ recognizes openmp
#include <omp.h>
#include <stdio.h>
//clang++ -Xpreprocessor -fopenmp -lomp omptest.cpp -o omptest
int main() {
#pragma omp parallel
printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
@willtownes
willtownes / fuzzy_clustering_eval.R
Created August 22, 2018 15:53
Fuzzy Clustering Jaccard and Rand Indices
#Fuzzy version of Jaccard and Rand Indices
#based on Suleman: "Assessing a Fuzzy Extension of Rand Index and Related Measures"
L<-4 #number of clusters
N<-50 #number of objects
X<-gtools::rdirichlet(N,rep(.01,L)) #NxL soft random clustering
y<-apply(X,1,which.max) #hard cluster version of X
table(y)
Y<-model.matrix(~factor(y)-1) #hard cluster version of X
Z<-matrix(1/L,nrow=N,ncol=L) #perfect uncertainty soft clustering
@willtownes
willtownes / pca_missing.R
Created July 18, 2018 02:36
Probabilistic Principal Components Analysis with incomplete data via gradient descent
#gradient descent probabilistic PCA with missing data
#Will Townes
L<-2 #number of latent dimensions, more dims=more complexity
#tune these hyperparameters until get good results
penalty<- 1e-8
learn_rate<- .1
niter<-100000 #number of iterations
data(iris)
#splatter experimenting with cell-specific dropouts
#pertains to https://github.com/Oshlack/splatter/issues/25
#devtools::install_github("Oshlack/splatter@dropout")
library(splatter)
data("sc_example_counts")
# Estimate parameters from example data
params <- splatEstimate(sc_example_counts)
# Simulate data using estimated parameters
sim1 <- splatSimulate(params, dropout.type = "experiment")
assay(sim1,"logcounts")<-log2(1+assay(sim1,"counts"))
@willtownes
willtownes / compositions.R
Created March 31, 2018 17:00
Compositional Data Transformations
#compositional analysis
library(compositions)
x<-c(.1,.5,.4)
V<-t(ilrBase(x))
D<-rbind(c(1,0,-1),c(0,1,-1))
x_alr<-D%*%log(x)
x_ilr<-V%*%log(x)
x_alr
alr(x)
x_ilr
@willtownes
willtownes / ars.R
Created February 16, 2017 04:58
Adaptive Rejection Sampling without Derivatives
### Adaptive Rejection Sampling
# by Will Townes
rexp_trunc<-function(n,slope=-1,lo=0,hi=Inf){
#draw n samples from the truncated exponential distribution
#the distribution is proportional to exp(slope*x)
#default is standard exponential
#slope cannot equal zero
#lo is lower truncation point, can be -Inf
#hi is upper truncation point, can be +Inf