2017-12-18 3 views
0

Ich versuche, die MISE eines Schätzers zu berechnen und für die ich brauche das Integral zu tun:eine Summe in R

(fp(x) - f(x))^2 where f(x) is exp(-x) and fp(x) is : sum_{i}^n { (1/n)*((K((x - X[i])/h))/h) } 

Das Problem hierbei ist, dass X eine Matrix ist, und i don‘ t wissen, wie diese Summe integriert wird. Ich habe dies versucht:

Kgauss <- function(u) dnorm(u) #Gaussian kernel 
    func = function(x, n, h, X){ ((1/n) * sum(Kgauss((x-X[0:n])/h)/h) - exp(-x))^2 } # h, n are constants 
    vfunc = Vectorize(func) 
    integrate(vfunc, n = 3, K = Kgauss, h = 0.25, X = rexp(3), lower = 0, Inf) 

Aber leider hat es nicht geklappt. Das große Problem ist hier fp(x), es besteht aus der Summe mehrerer Funktionen. Ich hoffe, du kannst mir mit diesem helfen, ich kämpfe seit einer Weile.

Grundsätzlich möchte ich machen: Integral ((K (X1) + ... + K (Xn) - exp (-x)) ²)

+0

Ihre Problemstellung nicht 'nicht definiert X' als Objekt. In diesem Fall denke ich, dass das unmittelbare Problem darin besteht, dass "Vectorize" (aka 'mapply') versucht, die Kguass-Funktion zu indizieren. Es ist nicht klar, warum Sie diese Funktion nicht nur in 'func' einbauen. –

+0

Ich habe gerade X in die Argumente eingefügt (und auch hier bearbeitet), aber es gibt mir immer noch genau den gleichen Fehler. Was meinst du mit dem Aufbau dieser Funktion in func? Wenn du über Kgauss sprichst, liegt das daran, dass ich Kgauss an mehreren Stellen in meinem Code benutzt habe, also stelle ich es einfach als Parameter dar, aber ich denke, ich hätte es in der Funktion verwenden können. –

Antwort

1

Sie können die n, h, und K definieren außerhalb die func und dann x als einziger Parameter haben:

n = 3; h = 0.25; X = rexp(3) 
func = function(x){ ((1/n) * sum(dnorm((x-X[0:n])/h)/h) - exp(-x))^2 } 
vfunc = function(x) { sapply(x, func)} 
integrate(vfunc, lower = 0, Inf) 
# 0.2070893 with absolute error < 1.7e-05 

(.. ich bin nicht sicher, dass Sie auch func vektorisiert müssen Sie mit vektorisiert Funktionen integriert ist bereits)

+0

Vielen Dank, es hat funktioniert :) –