绘制 F 分布密度的函数

问题描述 投票:0回答:1

我必须编写一个函数来绘制 F 分布的密度函数,以便将其与内置 rf() 进行比较

这就是我所做的:

fdis <- function(m, n){
  X = sqrt(((m*n)**m)*n**n / (m*x+n)**(m+n)) / x*beta(m/2, n/2)
}

x <- seq(0, 10, .1)
y.ecuacion <- fdis(x, length(x) - 1)
plot(y.ecuacion ~ x, type = "l")


y.generador <- rf(x, length(x) -1, length(x) - 1)
y.generador <- y.generador[y.generador > -10 & y.generador < 10]
d <- density(y.generador)
plot(d)
lines(y.ecuacion ~ x, col = "green")


y.generador.10 <- rf(10, 9, 9)
y.generador.100 <- rf(100, 99, 99)
y.generador.1000 <- rf(1000, 999, 999)
y.generador.10000 <- rf(10000, 9999, 9999)

recorta <- function(y, li, ls){
  return(y[y>li & y<ls])
}

x <- seq(-4, 4, .1)
y.normal <- fdis(x, length(x) - 1)
y.tgl1 <- rf(1000, 1, 1)
y.tgl5 <- rf(1000, 5, 5)
y.tgl10 <- rf(1000, 10, 10)
y.tgl100 <- rf(1000, 100, 100)

y.tgl1 <- recorta(y.tgl1, -4, 4)
y.tgl5 <- recorta(y.tgl5, -4, 4)
y.tgl10 <- recorta(y.tgl10, -4, 4)
y.tgl100 <- recorta(y.tgl100, -4, 4)

par(mfrow=c(2,2))

plot(density(y.tgl1), main="1 gl")
lines(y.normal~x, col="green")

plot(density(y.tgl5), main="5 gl")
lines(y.normal~x, col="green")

plot(density(y.tgl10), main="10 gl")
lines(y.normal~x, col="green")

plot(density(y.tgl100), main="1000 gl")
lines(y.normal~x, col="green")

但是这些图与理论图几乎没有相似之处,我看不出问题出在哪里。有什么想法吗?

r density-plot
1个回答
0
投票

我必须编写一个函数来绘制 F 分布的密度函数,以便将其与内置函数进行比较

rf()

基于here给出的定义的简单实现:

Fpdf = \(x, d1, d2) {
  1L / beta(d1 / 2L, d2 / 2L) * (d1 / d2) ^ (d1 / 2L) * 
    x ^ (d1 / 2L - 1L) * (1L + d1 / d2 * x) ^ (- (d1 + d2) / 2L)
}

对于您的示例之一,我们获得:

x = seq(0, 10, .1)
par(mfrow = c(1, 2))
plot(df(x^2,length(x) - 1, length(x) - 1), type = "l")
plot(x, Fpdf(x^2, length(x) - 1, length(x) - 1), type = "l")
# par(mfrow = c(1, 1))

© www.soinside.com 2019 - 2024. All rights reserved.