Ok, vì vậy điều này khiến tôi bối rối hơn 3 ngày và sau khi vẫn chưa tiến gần hơn đến giải pháp, tôi sẽ thử vận may của mình ở đây.Tích hợp/Tích phân trong R: Tìm bắt
Trong quá khứ, tôi đã viết một số mã cho một tập dữ liệu được sắp xếp trong cụ thể và nó đi như thế này:
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)
}
mà hoạt động hoàn hảo. Ví dụ: nếu người dùng chọn dữ liệu: = c (1,2,3,4,5), người dùng sẽ nhận được kết quả chính xác cho
> delta(0.1, maxobs)
[1] 0.6300001
Tuy nhiên, bây giờ tôi đang cố gắng tổng quát dữ liệu cho mỗi tập dữ liệu được sắp xếp, vì vậy những gì tôi đã làm được (phải rõ ràng: các tập dữ liệu x được sắp xếp trước thực hiện tất cả những chức năng này)
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)
}
Nhưng bây giờ, delta(data,0.1)
cho
delta(data,0.1)
[1] 0.
nào doesn không có ý nghĩa với tôi. Hàm tương tự, cùng một tập dữ liệu, nhưng bây giờ có giá trị sai. Tôi đang làm gì sai?
Mọi trợ giúp sẽ được đánh giá cao.
EDIT: Sau khi tham gia một cái nhìn gần gũi hơn với các chức năng Vectorize và chức năng tích hợp, bây giờ tôi đã thay đổi nội dung hàm delta tôi để:
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)
}
nhưng điều này bây giờ chỉ cần dẫn đến lỗi khác:
Error in integrate(Vectorize(f, vectorize.args = c("m", "h")), lower = minobs, : evaluation of function gave a result of wrong length
Tôi nghĩ Vectorize có nghĩa vụ ngăn chặn các lỗi như vậy?