好的,这个问题困扰了我三天以上,但即使到现在仍然没有更接近解决方案的一步,因此我想在这里试试运气。
过去,我曾针对一个特定的排序数据集编写过一些代码,它是这样的:
n <- length(data)
maxobs <- max(data)
minobs <- min(data)
FG <- function(m=NULL, h = NULL){
n<- length(data) #Number of observations
if (m<minobs){FG = 0} else {
if (m >maxobs){FG = 1} else {
FG = sum(pnorm((m - data)/h)-pnorm((minobs-data)/h))/sum(pnorm((maxobs - data)/h)-pnorm((minobs-data)/h))
}}
return(FG)
}
f<- function(m,h){
f<- FG(m,h)^n
return(f)
}
##Integration
max <- NULL
delta<- function(h,max=maxobs){
delta <- integrate(Vectorize(f), minobs, max, h)$value
return (delta)
}
这个功能完美运行。例如,如果选择数据:= c(1,2,3,4,5),则可以获得正确的结果。
> delta(0.1, maxobs)
[1] 0.6300001
然而,现在我正在试图将其推广到每个已排序的数据集,所以我所做的是(为了清楚起见:数据集x在执行所有这些函数之前已经排序)
FG <- function(x, m=NULL, h = NULL){
n<- length(x) #Number of observations
maxobs <- max(x)
minobs <- min(x)
if (m<minobs){FG = 0} else {
if (m >maxobs){FG = 1} else {
FG = sum(pnorm((m - x)/h)-pnorm((minobs-x)/h))/sum(pnorm((maxobs - x)/h)-pnorm((minobs-x)/h))
}}
return(FG)
}
f<- function(x,m,h){
n <- length(x)
f<- FG(x,m,h)^n
return(f)
}
##Integration
delta<- function(x,h,maxu= max(x)){
minobs <- min(x)
delta <- integrate(Vectorize(f), minobs, maxu, h)$value
return (delta)
}
但现在,
delta(data,0.1)
的输出结果为:delta(data,0.1)
[1] 0.
这对我来说毫无意义。同样的函数、相同的数据集,但现在却出现了错误的值。我做错了什么?
非常感谢您提供任何帮助。
编辑:在更仔细地查看Vectorize函数和Integrate函数后,我现在已经编辑了我的Delta函数:
delta<- function(x,h,maxu= max(x)){
minobs <- min(x)
delta <- integrate(Vectorize(f, vectorize.args= c("m","h")), minobs, maxu, h)$value
return (delta)
}
但是现在出现了另一个错误:
我以为Vectorize应该可以防止这样的错误发生?在将(Vectorize(f, vectorize.args = c("m", "h")),lower = minobs)整合时出错:函数的评估结果长度错误