'R Error: Wasn't able to determine range of domain

I am working with the R programming language.

I randomly generated the following data :

x1 = rnorm(1,5,5)
x2 = rnorm(1,5,5)
x3 = rnorm(1,5,5)
x4 = rnorm(1,5,5)
x5 = rnorm(1,5,5)
x6 = rnorm(1,5,5)
x7 = rnorm(1,5,5)
x8 = rnorm(1,5,5)
x9 = rnorm(1,5,5)
x10 = rnorm(1,5,5)
x11 = rnorm(1,5,5)
x12 = rnorm(1,5,5)
x13 = rnorm(1,5,5)
x14 = rnorm(1,5,5)
x15 = rnorm(1,5,5)
x16 = rnorm(1,5,5)
x17 = rnorm(1,5,5)
x18 = rnorm(1,5,5)
x19 = rnorm(1,5,5)
x20 = rnorm(1,5,5)

Then I defined this function (Likelihood of a Normal Distribution):

  my_function <- function(mu,sigma) {

a = log((1/sqrt(2*pi*sigma^2)) * (exp((x1-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x2-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x3-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x4-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x5-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x6-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x7-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x8-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x9-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x10-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x11-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x12-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x13-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x14-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x15-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x16-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x17-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x18-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x19-mu)/sigma)^2)) +
log((1/sqrt(2*pi*sigma^2)) * (exp((x20-mu)/sigma)^2))
}

However, the problem happens when I try to plot it:

library(plotly)

input_1 <- seq(-100, 100,1)
input_2 <- seq(-100, 100,1)


z <- outer(input_1, input_2, my_function)

plot_ly(x = input_1, y = input_2, z = z) %>% add_surface()

The following error is produced:

Error in scales::col_numeric(pal, rng, na.color = na.color) : 
  Wasn't able to determine range of domain

Can someone please show me why this error is coming and what can I do to fix this problem?



Solution 1:[1]

So your problem is pathological in two ways:

  • a negative sigma is a problem
  • a zero-valued sigma is a problem

So here is my updated code:

my_function <- function(mu,sigma) {

  
  a = log((1/sqrt(2*pi*sigma^2)) * (exp((x1-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x2-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x3-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x4-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x5-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x6-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x7-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x8-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x9-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x10-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x11-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x12-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x13-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x14-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x15-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x16-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x17-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x18-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x19-mu)/sigma)^2)) +
    log((1/sqrt(2*pi*sigma^2)) * (exp((x20-mu)/sigma)^2))
}

library(plotly)

x1 = rnorm(1,5,5)
x2 = rnorm(1,5,5)
x3 = rnorm(1,5,5)
x4 = rnorm(1,5,5)
x5 = rnorm(1,5,5)
x6 = rnorm(1,5,5)
x7 = rnorm(1,5,5)
x8 = rnorm(1,5,5)
x9 = rnorm(1,5,5)
x10 = rnorm(1,5,5)
x11 = rnorm(1,5,5)
x12 = rnorm(1,5,5)
x13 = rnorm(1,5,5)
x14 = rnorm(1,5,5)
x15 = rnorm(1,5,5)
x16 = rnorm(1,5,5)
x17 = rnorm(1,5,5)
x18 = rnorm(1,5,5)
x19 = rnorm(1,5,5)
x20 = rnorm(1,5,5)

input_1 <- seq(-100, 100,1)
input_2 <- seq(1, 100,1)


z <- outer(input_1, input_2, my_function) 

plot_ly(x = input_1, y = input_2, z = z) %>% add_surface()

it gives me this plot: your plot showed up looking like this plot

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 EngrStudent