Compare commits

...

5 Commits

@ -23,5 +23,9 @@ There previously was a form here, but I think someone was inputting random email
</form>
<p>
...or send me an email to list@nunosempere.com with subject "Subscribe to blog" and your name.
...or send me an email to list@nunosempere.com with subject "Subscribe to blog" and your name.
</p>
<p>
The point about malicious entries is curious, so I thought I'd explain it: People wanting to overflow someone's inbox can subscribe them to a lot of newsletters. Sending a confirmation email doesn't fix this, because then the victim is just overflowed with confirmation emails. Apparently substack has also been experiencing problems with this. Anyways, that's why I'll only accept subscriptions for which the person gives a real-sounding name.
</p>

@ -1,4 +1,19 @@
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
getAmountForYearAreaPair(df3, 2022, "Longtermism")
amounts <- c()
for(i in c(1:dim(df4)[1])){
amount <- getAmountForYearAreaPair(df3, df4$year[i], df4$area[i])
amounts <- c(amounts, amount)
}
df4$amount <- amounts
df4$cummulative_amount_for_its_area = sapply(df4$area, function(area) {
return(getAmountForArea(df3, area))
})
## Plotting longtermist funding
title_text="Open Philanthropy allocation by year and cause area"
subtitle_text="restricted to longtermism & GCRs"
palette = "Classic Red-Blue"
direction = -1
open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, group=cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
title=title_text,
@ -14,7 +29,7 @@ y=element_blank()
scale_fill_d3( "category20", alpha=0.8) +
# scale_fill_uchicago("dark") +
# scale_fill_startrek() +
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"), breaks = c(0:6)*10^8)+
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"))+
scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
@ -24,234 +39,15 @@ plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7, hjust = 0.5)
legend.text=element_text(size=7)
) +
geom_text(aes(label=ifelse(amount > 25e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, position = position_stack(vjust = 0.5)) +
geom_text(aes(label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.3, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
title=title_text,
subtitle=subtitle_text,
x=element_blank(),
y=element_blank()
) +
# scale_fill_wsj() +
# scale_fill_tableau(dir =1) +
# scale_fill_tableau(palette, dir=direction) +
# scale_fill_viridis(discrete = TRUE) +
# scale_fill_brewer(palette = "Set2") +
scale_fill_d3( "category20", alpha=0.8) +
# scale_fill_uchicago("dark") +
# scale_fill_startrek() +
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"), breaks = c(0:6)*10^8)+
scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7, hjust = 0.5)
) +
geom_text(aes(label=ifelse(amount > 25e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.2, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
getwd() ## Working directory on which the file will be saved. Can be changed with setwd("/your/directory")
height = 5
width = 5
ggsave(plot=open_philanthropy_plot, "open_philanthropy_grants_stacked_with_amounts.png", width=width, height=height, bg = "white")
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
title=title_text,
subtitle=subtitle_text,
x=element_blank(),
y=element_blank()
) +
# scale_fill_wsj() +
# scale_fill_tableau(dir =1) +
# scale_fill_tableau(palette, dir=direction) +
# scale_fill_viridis(discrete = TRUE) +
# scale_fill_brewer(palette = "Set2") +
scale_fill_d3( "category20", alpha=0.8) +
# scale_fill_uchicago("dark") +
# scale_fill_startrek() +
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"), breaks = c(0:6)*10^8)+
scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7, hjust = 0.5)
) +
geom_text(aes(label=ifelse(amount > 25e6, paste0(round(amount / 1e6, 0), "M"), ""), colour="white"), size = 2, position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.2, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
title=title_text,
subtitle=subtitle_text,
x=element_blank(),
y=element_blank()
) +
# scale_fill_wsj() +
# scale_fill_tableau(dir =1) +
# scale_fill_tableau(palette, dir=direction) +
# scale_fill_viridis(discrete = TRUE) +
# scale_fill_brewer(palette = "Set2") +
scale_fill_d3( "category20", alpha=0.8) +
# scale_fill_uchicago("dark") +
# scale_fill_startrek() +
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"), breaks = c(0:6)*10^8)+
scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7, hjust = 0.5)
) +
geom_text(aes(label=ifelse(amount > 25e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="white", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.2, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
title=title_text,
subtitle=subtitle_text,
x=element_blank(),
y=element_blank()
) +
# scale_fill_wsj() +
# scale_fill_tableau(dir =1) +
# scale_fill_tableau(palette, dir=direction) +
# scale_fill_viridis(discrete = TRUE) +
# scale_fill_brewer(palette = "Set2") +
scale_fill_d3( "category20", alpha=0.8) +
# scale_fill_uchicago("dark") +
# scale_fill_startrek() +
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"), breaks = c(0:6)*10^8)+
scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7, hjust = 0.5)
) +
geom_text(aes(label=ifelse(amount > 25e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#D3D3D3", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.2, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
title=title_text,
subtitle=subtitle_text,
x=element_blank(),
y=element_blank()
) +
# scale_fill_wsj() +
# scale_fill_tableau(dir =1) +
# scale_fill_tableau(palette, dir=direction) +
# scale_fill_viridis(discrete = TRUE) +
# scale_fill_brewer(palette = "Set2") +
scale_fill_d3( "category20", alpha=0.8) +
# scale_fill_uchicago("dark") +
# scale_fill_startrek() +
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"), breaks = c(0:6)*10^8)+
scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7, hjust = 0.5)
) +
geom_text(aes(label=ifelse(amount > 25e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#C2C2C2", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.2, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
getwd() ## Working directory on which the file will be saved. Can be changed with setwd("/your/directory")
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
title=title_text,
subtitle=subtitle_text,
x=element_blank(),
y=element_blank()
) +
# scale_fill_wsj() +
# scale_fill_tableau(dir =1) +
# scale_fill_tableau(palette, dir=direction) +
# scale_fill_viridis(discrete = TRUE) +
# scale_fill_brewer(palette = "Set2") +
scale_fill_d3( "category20", alpha=0.8) +
# scale_fill_uchicago("dark") +
# scale_fill_startrek() +
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"), breaks = c(0:6)*10^8)+
scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7, hjust = 0.5)
) +
geom_text(aes(label=ifelse(amount > 25e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#D3D3D3", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.2, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
getwd() ## Working directory on which the file will be saved. Can be changed with setwd("/your/directory")
height = 5
width = 5
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, group=cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
title=title_text,
@ -267,27 +63,44 @@ y=element_blank()
scale_fill_d3( "category20", alpha=0.8) +
# scale_fill_uchicago("dark") +
# scale_fill_startrek() +
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"), breaks = c(0:6)*10^8)+
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"))+
scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
legend.text.align = 0,
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7, hjust = 0.5)
legend.text=element_text(size=7)
) +
geom_text(aes(label=ifelse(amount > 25e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(aes(label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.2, vjust = -0.5
stat = 'summary', fun = sum, size=2.3, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
open_philanthropy_plot_lt
df3 <- list()
df3$year <- as.vector(sapply(data$Date, getYear))
df3$amount <- as.vector(sapply(data$Amount, parse_number))
df3$amount <- ifelse(is.na(df$amount), 0, df$amount)
df3$area <- as.vector(data$Focus.Area)
df3 <- as.data.frame(df3)
df3$area <- as.vector(data$Focus.Area)
## Including Dustin Moskovitz's wealth
coeff <- 10^7*4
wealth <- c(6, 8, 12, 15, 18, 12, 14, 19, 14)
df2$wealth <- rep(wealth * coeff, num_areas)
make_fortune_plot <- function(show_fortune_legend = FALSE) {
open_philanthropy_plot_with_fortune <- ggplot(data=df2, aes(x=year, y=amount, fill=area, group = cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
geom_point(
aes(x=year, y=wealth), size=2, color="darkblue", shape=4,
show.legend=show_fortune_legend
)+
labs(
title=title_text,
subtitle=subtitle_text,
@ -302,7 +115,18 @@ y=element_blank()
scale_fill_d3( "category20", alpha=0.8) +
# scale_fill_uchicago("dark") +
# scale_fill_startrek() +
scale_y_continuous(labels = scales::dollar_format(scale = 0.000001, suffix = "M"), breaks = c(0:6)*10^8)+
scale_y_continuous(
labels = scales::dollar_format(scale = 0.000001, suffix = "M"),
name="OpenPhil donations",
breaks = c(0:5)*10^8,
sec.axis = sec_axis(
~.*1,
name="Dustin Moskovitz's fortune\n(est. Bloomberg)",
breaks = seq(0,20,by=5)*coeff,
labels = c("$0B", "$5B","$10B","$15B", "$20B")
),
limits=c(0,8*10^8)
)+
scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
@ -312,19 +136,94 @@ plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7, hjust = 0.5)
) +
geom_text(aes(label=ifelse(amount > 25e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 1.7, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.2, vjust = -0.5
axis.title.y = element_text(vjust=3, hjust=0.25, size=10),
axis.title.y.right = element_text(vjust=3, hjust=0.5, size=10),
legend.text=element_text(size=8)
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot
getwd() ## Working directory on which the file will be saved. Can be changed with setwd("/your/directory")
height = 5
guides(fill=guide_legend(nrow=4,byrow=TRUE))
# open_philanthropy_plot_with_fortune
height = 6
width = 5
ggsave(plot=open_philanthropy_plot, "open_philanthropy_grants_stacked_with_amounts.png", width=width, height=height, bg = "white")
filename = ifelse(
show_fortune_legend,
"open_philanthropy_plot_with_fortune.png",
"open_philanthropy_plot_with_fortune_clean_labels.png"
)
ggsave(plot=open_philanthropy_plot_with_fortune, filename, width=width, height=height, bg = "white")
}
make_fortune_plot(TRUE)
make_fortune_plot(FALSE)
## Look at the different longtermist areas independently.
longtermism <- c("Biosecurity & Pandemic Preparedness", "Potential Risks from Advanced AI", "Science Supporting Biosecurity and Pandemic Preparedness", "Longtermism")
df3 <- list()
df3$year <- as.vector(sapply(data$Date, getYear))
df3$amount <- as.vector(sapply(data$Amount, parse_number))
df3$amount <- ifelse(is.na(df$amount), 0, df$amount)
df3$area <- as.vector(data$Focus.Area)
df3 <- as.data.frame(df3)
df3$area <- as.vector(data$Focus.Area)
df3 <- df3 %>% dplyr::filter(area %in% longtermism)
df$area <- ifelse(df3$area %in% ea_growth, "EA Community Building", df$area)
## Group area
df3
df3$area <- ifelse(df$area %in% pure_longtermism, "Longtermism", df$area)
pure_longtermism = c("Longtermism")
biorisk = c("Biosecurity & Pandemic Preparedness", "Science Supporting Biosecurity and Pandemic Preparedness")
ai_risk = c( "Potential Risks from Advanced AI")
df3$area <- ifelse(df$area %in% pure_longtermism, "Longtermism", df$area)
df3$area <- ifelse(df$area %in% biorisk, "Biosecurity & Pandemic Preparedness", df$area)
df3$area <- ifelse(df$area %in% ai_risk, "Potential Risks from Advanced AI", df$area)
df3 <- list()
df3$year <- as.vector(sapply(data$Date, getYear))
df3$amount <- as.vector(sapply(data$Amount, parse_number))
df3$amount <- ifelse(is.na(df$amount), 0, df$amount)
df3$area <- as.vector(data$Focus.Area)
df3 <- as.data.frame(df3)
df3$area <- as.vector(data$Focus.Area)
df3 <- df3 %>% dplyr::filter(area %in% longtermism)
pure_longtermism = c("Longtermism")
biorisk = c("Biosecurity & Pandemic Preparedness", "Science Supporting Biosecurity and Pandemic Preparedness")
ai_risk = c( "Potential Risks from Advanced AI")
df3$area <- ifelse(df$area %in% pure_longtermism, "Longtermism", df$area)
df3$area <- ifelse(df$area %in% biorisk, "Biosecurity & Pandemic Preparedness", df$area)
df3 <- list()
df3$year <- as.vector(sapply(data$Date, getYear))
df3$amount <- as.vector(sapply(data$Amount, parse_number))
df3$amount <- ifelse(is.na(df$amount), 0, df$amount)
df3$area <- as.vector(data$Focus.Area)
df3 <- as.data.frame(df3)
df3$area <- as.vector(data$Focus.Area)
df3 <- df3 %>% dplyr::filter(area %in% longtermism)
pure_longtermism = c("Longtermism")
biorisk = c("Biosecurity & Pandemic Preparedness", "Science Supporting Biosecurity and Pandemic Preparedness")
ai_risk = c( "Potential Risks from Advanced AI")
df3$area <- ifelse(df3$area %in% pure_longtermism, "Longtermism", df3$area)
df3$area <- ifelse(df3$area %in% biorisk, "Biosecurity & Pandemic Preparedness", df3$area)
df3$area <- ifelse(df3$area %in% ai_risk, "Potential Risks from Advanced AI", df3$area)
years <- c(2014: 2022) # as.vector(unique(df$year))
num_years <- length(years)
area_names <- longtermism
num_areas <- length(area_names)
df4 <- list()
df4$area <- sort(rep(area_names, num_years))
df4$year <- rep(years, num_areas)
df4 <- as.data.frame(df4)
# View(df4)
getAmountForYearAreaPair(df3, 2022, "Longtermism")
amounts <- c()
for(i in c(1:dim(df4)[1])){
amount <- getAmountForYearAreaPair(df3, df4$year[i], df4$area[i])
amounts <- c(amounts, amount)
}
df4$amount <- amounts
df4$cummulative_amount_for_its_area = sapply(df4$area, function(area) {
return(getAmountForArea(df3, area))
})
## Plotting longtermist funding
title_text="Open Philanthropy allocation by year and cause area"
subtitle_text="restricted to longtermism & GCRs"
palette = "Classic Red-Blue"
direction = -1
open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, group=cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
@ -346,6 +245,7 @@ scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
legend.text.align = 0,
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
@ -353,18 +253,14 @@ legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7)
) +
geom_text(aes(label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 1.7, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(aes(label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.3, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot_lt
getwd() ## Working directory on which the file will be saved. Can be changed with setwd("/your/directory")
height = 5
width = 6
## open_philanthropy_plot_lt
ggsave(plot=open_philanthropy_plot_lt, "open_philanthropy_grants_lt_labeled.png", width=width, height=height, bg = "white")
longtermism_labels = c(pure_longtermism, biorisk, ai_risk)
open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, group=cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
@ -386,6 +282,7 @@ scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
legend.text.align = 0,
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
@ -393,13 +290,36 @@ legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7)
) +
geom_text(aes(fill="#f9f9f9", label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 1.7, position = position_stack(vjust = 0.5)) +
geom_text(aes(label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.3, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot_lt
years <- c(2014: 2022) # as.vector(unique(df$year))
num_years <- length(years)
area_names <- longtermism_labels
num_areas <- length(area_names)
df4 <- list()
df4$area <- sort(rep(area_names, num_years))
df4$year <- rep(years, num_areas)
df4 <- as.data.frame(df4)
# View(df4)
getAmountForYearAreaPair(df3, 2022, "Longtermism")
amounts <- c()
for(i in c(1:dim(df4)[1])){
amount <- getAmountForYearAreaPair(df3, df4$year[i], df4$area[i])
amounts <- c(amounts, amount)
}
df4$amount <- amounts
df4$cummulative_amount_for_its_area = sapply(df4$area, function(area) {
return(getAmountForArea(df3, area))
})
## Plotting longtermist funding
title_text="Open Philanthropy allocation by year and cause area"
subtitle_text="restricted to longtermism & GCRs"
palette = "Classic Red-Blue"
direction = -1
open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, group=cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
@ -421,6 +341,7 @@ scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
legend.text.align = 0,
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
@ -428,13 +349,54 @@ legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7)
) +
geom_text(aes(label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 1.7, position = position_stack(vjust = 0.5)) +
geom_text(aes(label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.3, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot_lt
## Look at the different longtermist areas independently.
longtermism <- c("Biosecurity & Pandemic Preparedness", "Potential Risks from Advanced AI", "Science Supporting Biosecurity and Pandemic Preparedness", "Longtermism")
df3 <- list()
df3$year <- as.vector(sapply(data$Date, getYear))
df3$amount <- as.vector(sapply(data$Amount, parse_number))
df3$amount <- ifelse(is.na(df$amount), 0, df$amount)
df3$area <- as.vector(data$Focus.Area)
df3 <- as.data.frame(df3)
df3$area <- as.vector(data$Focus.Area)
df3 <- df3 %>% dplyr::filter(area %in% longtermism)
pure_longtermism = c("Longtermism")
biorisk = c("Biosecurity & Pandemic Preparedness", "Science Supporting Biosecurity and Pandemic Preparedness")
ai_risk = c( "Potential Risks from Advanced AI")
longtermism_labels = c(pure_longtermism, biorisk, ai_risk)
df3$area <- ifelse(df3$area %in% pure_longtermism, "Longtermism", df3$area)
df3$area <- ifelse(df3$area %in% biorisk, "Biosecurity & Pandemic Preparedness", df3$area)
df3$area <- ifelse(df3$area %in% ai_risk, "Potential Risks from Advanced AI", df3$area)
years <- c(2014: 2022) # as.vector(unique(df$year))
num_years <- length(years)
area_names <- longtermism_labels
num_areas <- length(area_names)
df4 <- list()
df4$area <- sort(rep(area_names, num_years))
df4$year <- rep(years, num_areas)
df4 <- as.data.frame(df4)
# View(df4)
getAmountForYearAreaPair(df3, 2022, "Longtermism")
amounts <- c()
for(i in c(1:dim(df4)[1])){
amount <- getAmountForYearAreaPair(df3, df4$year[i], df4$area[i])
amounts <- c(amounts, amount)
}
df4$amount <- amounts
df4$cummulative_amount_for_its_area = sapply(df4$area, function(area) {
return(getAmountForArea(df3, area))
})
## Plotting longtermist funding
title_text="Open Philanthropy allocation by year and cause area"
subtitle_text="restricted to longtermism & GCRs"
palette = "Classic Red-Blue"
direction = -1
open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, group=cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
@ -456,6 +418,7 @@ scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
legend.text.align = 0,
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
@ -463,13 +426,49 @@ legend.box="vertical",
axis.text.x=element_text(angle=60, hjust=1),
legend.text=element_text(size=7)
) +
geom_text(aes(label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 1.7, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(aes(label=ifelse(amount > 5e6, paste0(round(amount / 1e6, 0), "M"), "")), size = 2, colour="#f9f9f9", position = position_stack(vjust = 0.5)) +
geom_text(
aes(label = paste0(round(after_stat(y) / 1e6, 0), "M"), group = year),
stat = 'summary', fun = sum, size=2.3, vjust = -0.5
) +
guides(fill=guide_legend(nrow=3,byrow=TRUE))
open_philanthropy_plot_lt
View(df4)
df4 <- list()
df4$area <- sort(rep(area_names, num_years))
df4 <- list()
df4$area <- sort(rep(area_names, num_years))
df4$area
longtermism_labels
longtermism_labels = c(pure_longtermism, "Biosecurity & Pandemic Preparedness", ai_risk)
df3$area <- ifelse(df3$area %in% pure_longtermism, "Longtermism", df3$area)
df3$area <- ifelse(df3$area %in% biorisk, "Biosecurity & Pandemic Preparedness", df3$area)
df3$area <- ifelse(df3$area %in% ai_risk, "Potential Risks from Advanced AI", df3$area)
years <- c(2014: 2022) # as.vector(unique(df$year))
num_years <- length(years)
area_names <- longtermism_labels
num_areas <- length(area_names)
df4 <- list()
df4$area <- sort(rep(area_names, num_years))
df4$year <- rep(years, num_areas)
df4 <- as.data.frame(df4)
# View(df4)
getAmountForYearAreaPair(df3, 2022, "Longtermism")
amounts <- c()
for(i in c(1:dim(df4)[1])){
amount <- getAmountForYearAreaPair(df3, df4$year[i], df4$area[i])
amounts <- c(amounts, amount)
}
df4$amount <- amounts
df4$cummulative_amount_for_its_area = sapply(df4$area, function(area) {
return(getAmountForArea(df3, area))
})
View(df4)
## Plotting longtermist funding
title_text="Open Philanthropy allocation by year and cause area"
subtitle_text="restricted to longtermism & GCRs"
palette = "Classic Red-Blue"
direction = -1
open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, group=cummulative_amount_for_its_area))+
geom_bar(stat="identity")+
labs(
@ -491,6 +490,7 @@ scale_x_continuous(breaks = years)+
theme_tufte() +
theme(
legend.title = element_blank(),
legend.text.align = 0,
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",

@ -122,6 +122,7 @@ open_philanthropy_plot <- ggplot(data=df2, aes(x=year, y=amount, fill=area, grou
theme_tufte() +
theme(
legend.title = element_blank(),
legend.text.align = 0,
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",
@ -224,9 +225,20 @@ df3$area <- as.vector(data$Focus.Area)
df3 <- df3 %>% dplyr::filter(area %in% longtermism)
# View(df3)
## Group area
pure_longtermism = c("Longtermism")
biorisk = c("Biosecurity & Pandemic Preparedness", "Science Supporting Biosecurity and Pandemic Preparedness")
ai_risk = c( "Potential Risks from Advanced AI")
longtermism_labels = c(pure_longtermism, "Biosecurity & Pandemic Preparedness", ai_risk)
df3$area <- ifelse(df3$area %in% pure_longtermism, "Longtermism", df3$area)
df3$area <- ifelse(df3$area %in% biorisk, "Biosecurity & Pandemic Preparedness", df3$area)
df3$area <- ifelse(df3$area %in% ai_risk, "Potential Risks from Advanced AI", df3$area)
years <- c(2014: 2022) # as.vector(unique(df$year))
num_years <- length(years)
area_names <- longtermism
area_names <- longtermism_labels
num_areas <- length(area_names)
df4 <- list()
@ -245,6 +257,8 @@ df4$amount <- amounts
df4$cummulative_amount_for_its_area = sapply(df4$area, function(area) {
return(getAmountForArea(df3, area))
})
View(df4)
## Plotting longtermist funding
title_text="Open Philanthropy allocation by year and cause area"
subtitle_text="restricted to longtermism & GCRs"
@ -272,6 +286,7 @@ open_philanthropy_plot_lt <- ggplot(data=df4, aes(x=year, y=amount, fill=area, g
theme_tufte() +
theme(
legend.title = element_blank(),
legend.text.align = 0,
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position="bottom",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 132 KiB

@ -1,9 +1,23 @@
Can GPT-3 produce new ideas? Partially automating Robin Hanson and others
==========================================================================
One small insight I've gained from studying the humanities—I'm currently taking a philosophy degree on the side—is that conceptual wins or paradigm shifts have required laborious work and the passage of time.
## Brief description of the experiment
Some "conceptual wins" in the sense that I have in mind are:
I asked a language model to replicate a few patterns of generating insight that humanity hasn't really exploited much yet, such as:
1. Variations on "if you never miss a plane, you've been spending too much time at the airport".
2. Variations on the Robin Hanson argument of "for common human behaviour X, its usual purported justification is Y, but it usually results in more Z than Y. If we cared about Y, we might do A instead".
3. Variations on the genealogical argument: that the results of historical accidents are most likely not moral necessities or optimal systems.
## Motivation behind this experiment
One of reasons to be afraid of artificial intelligence might be because, if you think in the abstract about how a system might behave as it becomes extremely intelligent, you might conclude that it might be able to completele outmanoeuvre us because of its superior ability to grasp the true structure of the world.
This possibility is scary in the same sense that a modern chemist is scary to a historical alchemist. Our current chemist can completely outmanoeuvre previous alchemists by using their superior understanding of natural laws to produce better explosions, more subtle poisons, or more addictive and mind-blowing drugs.
I do buy this fear in the limit for a being of God-like intelligence. But it's not clear to me whether it also applies to current systems or whether it will apply to their close descendants. In particular language models seem like they are powerful remixers and predictors but perhaps limited to drawing from the conceptual toolkit which humans already have. On the other hand, because they have access to so much information, they might be able to be prompted so as to reveal new relationships, connections, and insights.
Some conceptual insights which have been historically important are:
- Explaining natural phenomena not in terms of Greek or Roman anthropomorphic gods, but with reference to naturalistic, physical explanations
- Understanding acceleration as distinct from motion
@ -14,21 +28,21 @@ Some "conceptual wins" in the sense that I have in mind are:
- Randomized trials as a more robust way of generating generalizable knowledge
- The genealogical argument: understanding that systems (such as the details of the current prison system, our monetary system, the lack of color in men's clothes, or our attitudes towards gender and sex) are the result of historical accidents which could have gone differently. But often these systems are rationalized as being particularly adequate, or even morally necessary.
One of reasons to be afraid of artificial intelligence might be because, if you think in the abstract about how a system might behave as it becomes extremely intelligent, you might conclude that it might be able to completely outmaneuvre us because of its superior ontology, it's superior ability to grasp the true structure of the world. This possibility is scary in the same sense that a modern chemist is scary to a historical alchemist. Our current chemist can completely outmaneuvre previous alchemists by using their superior understanding of natural laws to produce better explosions, more subtle poisons, or more addictive and mind-blowing drugs.
But it's not clear to me whether this fear—which I do buy in the limit for a being of God-like intelligence—also applies to current systems and its descendants. In particular for language models, at first glance it seems like they are powerful remixers and predictors, but perhaps limited to drawing from the conceptual toolkit which humans already have. On the other hand, because they have access to so much information, they might be able to be prompted so as to reveal new relationships, connections and insights.
But I don't think that language models are currently able to come up with original insights like the above from scratch (this would be very scary).
So I'd be interested about the extent to which *current* AI systems are able to come up with better understandings of the world, and thus potentially in the future acquire an advantage over humans.
A simple experiment in this direction is to ask a language model to replicate a few patterns of generating insight that humanity hasn't really exploited much yet, such as:
Instead, I probe GPT-3's ability to come up with original *variations* of these three argumentative patterns:
1. Variations on "if you never miss a plane, you've been spending too much time at the airport".
2. Variations on the Robin Hanson argument of "for common human behaviour X, its usual purported justification is Y, but it usually results in more Z than Y. If we cared about Y, we might do A instead".
3. Variations on the genealogical argument above against the moral necessity of systems stemming from historical accidents.
3. Variations on the genealogical argument: that the results of historical accidents are most likely not moral necessities or optimal systems.
The first pattern is known as an [Umeshism](https://scottaaronson.blog/?p=40). I associate the second pattern with Robin Hanson, who has had part of a fruitful career exploring some of its variations—though he is also known for other ideas, e.g., prediction markets and grabby aliens. I associate the third pattern with Nietzsche (who used it to criticize Christian morals which cherished meekness with Greek morals which cherished strength) and with Foucault (who used it to meaningfully criticize many aspects of contemporary culture, e.g., treatment of prisoners, our conception of knowledge, our relationship to sex, etc).
## Pause for the reader to make predictions about GPT-3's current capabilities.
## In which I prompt the reader to make their own predictions about what will result, and I share two depictions of a cat generated by DALLE-2 and chat.openai.com
Do you think that GPT-3 can produce thoughtful, original or insightful variations of the three argumentative patterns above? Consider writing down your predictions before reading further.
Do you think that GPT-3 can produce thoughtful, original or insightful variations of the three argumentative patterns above?
To occupy space so that you can make your predictions without reading the results below, here are two depictions of a cat, one from DALLE-2 and one from GTP-3.
![A photo of a cat, generated by DALLE-2](https://i.imgur.com/8VQBkAR.png)
@ -202,11 +216,11 @@ Output:
> 10. The way in which we view money is heavily influenced by our culture of materialism. In other societies, money is seen as a tool for social good and is not a goal in and of itself.
## In conclusion
## Conclusion and my personal perspective
In conclusion, I think the above shows that current GPT-3 can generate somewhat original outputs by exploiting fertile argumentative patterns. This is still far away from e.g., inventing new types of science, or generating much better concepts. At the same time, it does feel like one could use this kind of system to generate thought-provoking blogposts using Robin Hanson's signature argumentative structure.
I also noticed that both davinci-003 and ChatGPT have tendencies to steer towards milquetoast, politically correct outputs, whereas for my purpose I want to generate more edgy, assumption-challenging stuff. This was a source of personal irritation, and because davinci-003 seemed to be less censored, I've been recommmending that people use it instead of ChatGPT.
I also noticed that both davinci-003 and ChatGPT have tendencies to steer towards milquetoast, politically correct outputs, whereas for my purpose I want to generate more edgy, assumption-challenging stuff. This was a source of personal irritation, and because davinci-003 seemed to be less censored, I've been recommending that people use it instead of ChatGPT.
You can subscribe to these blogposts [here](https://nunosempere.com/.subscribe). I also appreciate comments!

@ -1,6 +1,6 @@
I'm Nu&#xF1;o Sempere. I [do research](https://quantifieduncertainty.org/), [write software](https://github.com/NunoSempere/), and [predict the future](https://samotsvety.org/).
<img src="https://i.imgur.com/rvwA0Wr.jpg" alt="image of myself" class="img-frontpage-center">
<img src="https://i.imgur.com/W9hXYzY.jpg" alt="image of myself" class="img-frontpage-center">
### Highlights

Loading…
Cancel
Save