statistics/normal_distribution.R

123 lines
3.8 KiB
R

result <- dbSendQuery(conn, query_frames)
data <- fetch(result)
get_variance <- function(dataset = vector(), mean = 0) {
sum <- 0
for (item in dataset) {
sum <- sum + ((item - mean) ^ 2)
}
variance <- sum / length(dataset)
return(variance)
}
get_standard_deviation <- function(variance = 0) {
return(round(sqrt(variance)))
}
dnorm_plot <- function(filename = "dnorm", dataset = vector(), title = "Title", xlab = "X Label") {
mean <- round(mean(dataset))
standard_deviation <- get_standard_deviation(get_variance(dataset, mean))
possibility <- dnorm(dataset, mean, standard_deviation)
png(file = filename)
plot(dataset,
possibility,
xlab = xlab,
ylab = "Probability Density",
col = "blue",
main = title)
abline(v = c(mean, mean - standard_deviation, mean + standard_deviation),
col = c("green", "red", "red"),
lty = c(2, 2, 2))
legend("topright",
legend = c(round(mean, 2), standard_deviation),
col = c("green", "red"),
lty = 2,
lwd = 1,
box.lty = 1)
}
pnorm_less <- function(dataset = vector(), value = 0, word = "") {
mean <- mean(dataset)
standard_deviation <- get_standard_deviation(get_variance(dataset, mean))
probability_text <- "The probability of getting less than"
probability_text <- paste(probability_text, value)
probability_text <- paste(probability_text, word)
probability_text <- paste(probability_text, "is")
probability_text <- paste(probability_text, round(pnorm(value, mean, standard_deviation) * 100, 2))
probability_text <- paste(probability_text, "%", sep = "")
print(probability_text)
}
pnorm_more <- function(dataset = vector(), value = 0, word = "") {
mean <- mean(dataset)
standard_deviation <- get_standard_deviation(get_variance(dataset, mean))
probability_text <- "The probability of getting more than"
probability_text <- paste(probability_text, value)
probability_text <- paste(probability_text, word)
probability_text <- paste(probability_text, "is")
probability_text <- paste(probability_text, round(pnorm(value, mean, standard_deviation, lower.tail = FALSE) * 100, 2))
probability_text <- paste(probability_text, "%", sep = "")
print(probability_text)
}
pnorm_between <- function(dataset = vector(), min = 0, max = 0, word = "") {
mean <- mean(dataset)
standard_deviation <- get_standard_deviation(get_variance(dataset, mean))
probability_text <- "The probability of getting between"
probability_text <- paste(probability_text, min)
probability_text <- paste(probability_text, "and")
probability_text <- paste(probability_text, max)
probability_text <- paste(probability_text, "coins is")
probability_text <- paste(probability_text, round((pnorm(max, mean, standard_deviation) - pnorm(min, mean, standard_deviation)) * 100, 2))
probability_text <- paste(probability_text, "%", sep = "")
print(probability_text)
}
dnorm_plot("out/dnorm_coins.png", sort(data[, 1]), "Coins Normal Distribution", xlab = "Coins")
dnorm_plot("out/dnorm_time.png", sort(data[, 2]), "Time Normal Distribution", xlab = "Time (s)")
min <- 0
max <- 13
while (T) {
cat("Minimum number of coins: ")
input <- readLines("stdin", n = 1)
input <- as.numeric(input)
if (!is.na(input) && input >= min && input < max) {
min <- input
break
}
}
while (T) {
cat("Maximum number of coins: ")
input <- readLines("stdin", n = 1)
input <- as.numeric(input)
if (!is.na(input) && input > min && input <= max) {
max <- input
break
}
}
pnorm_less(sort(data[, 1]), min, "coins")
pnorm_more(sort(data[, 1]), min, "coins")
pnorm_less(sort(data[, 1]), max, "coins")
pnorm_more(sort(data[, 1]), max, "coins")
pnorm_between(sort(data[, 1]), min, max, "coins")