これは私に3日以上の間悩まされていますが、まだ解決策に一歩近づいていないので、ここで私の運を試してみようと思います。過去にはRでの積分/積分:キャッチを見つける
は、私は特定の1つのソートされたデータセットのいくつかのコードを書いたのだが、このように書きます:完璧に動作
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)
}
。 1のデータを選択した場合たとえば、:=のC(1,2,3,4,5)を、1は
> 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)
はdoesnの
delta(data,0.1)
[1] 0.
います私には意味がありません。同じ関数、同じデータセットですが、間違った値になりました。私は間違って何をしていますか?
ご迷惑をおかけして申し訳ございません。
EDIT: ベクタライズ機能に近い見てみると機能を統合した後、私は今まで私のデルタ関数を編集した:
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)
}
が、これは今ちょうど別のエラーが発生:
Error in integrate(Vectorize(f, vectorize.args = c("m", "h")), lower = minobs, : evaluation of function gave a result of wrong length
私はこのようなエラーを防ぐためにVectorizeが考えられましたか?