我必须编写一个函数来绘制 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")
但是这些图与理论图几乎没有相似之处,我看不出问题出在哪里。有什么想法吗?
我必须编写一个函数来绘制 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))