График плотности, показывающий критическую область с использованием проверки гипотез в R? - PullRequest
1 голос
/ 23 марта 2020

Предположим, что при выборке из нормального распределения с известной дисперсией будет использоваться z-тест (не t-тест).

mu0 <- 4                ## Null hypothesis mean value
stdev <- 3              ## Known population standard deviation
signif.level <- 0.05    ## Test significance level
sample.mean <- 6.07     ## Mean of the random sample
n <- 10                 ## Sample size
mu1 <- 6.2              ## Alternative hypotesis mean value to use for error type 2 


hyp.testing <- function(mu0, stdev, signif.level, 
                        sample.mean, n, show_crit, 
                        show_pvalue, show_alt, mu1, 
                        show_beta, show_power, two_sided) {
                      } 

Мне нужен график плотности, показывающий критическую область в красных полосах.

Я попытался использовать многоугольник, который также известен как ошибка типа 1. Можем ли мы решить эту проблему с помощью многоугольника?

hyp.testing(4,3,0.05,6.07,10)  {

xval <- seq(-3.2, 3.2, length = 1000)
yval <- dnorm(xval)

 plot(xval, yval, type = "l", axes = TRUE, frame = FALSE, lwd = 3, 
 xlab = "", ylab = "")

 x <- seq(qnorm(.95), 3.2, length = 100)

 polygon(c(x, rev(x)),c(dnorm(x), rep(0, length(x))), col = "salmon")

 text(mean(x), mean(dnorm(x))+.02, "9%", cex = 1)

 text(qnorm(.95), .01, "1.645", cex = 1) }

Но я не могу получить желаемый результат следующим образом:

Ожидаемый вывод выглядит примерно так:

вывод:

enter image description here

1 Ответ

1 голос
/ 23 марта 2020

Ваш вопрос немного расплывчат в том, что вы на самом деле хотите. Если вам нужна функция для отслеживания области под вашей кривой, вы можете использовать эту мою функцию и адаптировать ее к вашим потребностям.

area_poly <- function(cur, cutoff, side=c(1,-1), col = "grey", border=NA, ...)
{
  if (side[1]>0 )# on the right
  {
    pos <- min(which(cur$x > cutoff))
    end <- length(cur$x)
  }
  else # on the left
  {
    pos <- max(which(cur$x < cutoff))
    end <- 1
  }
  polygon(x=c(cur$x[end:pos], cur$x[pos], cur$x[end]),
          y=c(cur$y[end:pos], 0, 0), col=col, border=border, ...)
}

Она принимает кривую и обрезку в качестве аргумента. Например:

cc <- curve(dnorm(x, mean = 4, sd = 3), from = -5, to = 10, n = 100, lwd = 3,
            xlab = "", ylab = "Density", frame = F)
area_poly(cc, cutoff = 6, side = 1, col = "grey50", density = 10)

enter image description here

Аргумент density управляет штриховыми линиями. Если вы хотите получить полный цвет, не указывайте плотность.

...