全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
7830 9
2010-02-27
被这个问题困扰很久,希望大牛们能帮忙看一下。
就下面一段代码来说:

subt、eta是已知数值向量,b、phi、xi如下定义都是多维的函数的向量
b <- function(x)  c(cos(4*pi*x),sin(8*pi*x))             #the true density

phi <- function(x) c(x-1/2,x^2-x+1/6)     

xi <- function(x){                              #reproducing kernel
k3 <- function(x){
k3 <- (x^3-3/2*x^2+1/2*x)/6
}
k6 <- function(x){
k6 <- (x^6-3*x^5+5/2*x^4-1/2*x^2+1/42)/720
}
xi <- k3(subt)*k3(x)+k6(abs(subt-x))           #subt: subset of all the sample
}

vec <- function(x)  c(b(x),phi(x),xi(x))       #vector containing b, phi and xi

g <- function(x){             #g(x): inner product of previous vector and eta
g <- drop(crossprod(eta,vec(x)))         注:eta和vec维数相同
}

mu <- function(ll,g,u){             #mu in the formula; ll: lower limit of integration
eg <- function(x)  exp(g(x))
ueg <- function(x)  u(x)*exp(g(x))
nume <- integrate(ueg,ll,1)$value   #numerator
deno <- integrate(eg,ll,1)$value     #denominator
mu <- nume/deno
}

然后出现下面的错误:

命令:mu(0,g,b)

错误于crossprod(x, y) : 非整合变元
此外: Warning messages:
1: 长对象之长度不是短对象之长度的整倍 in: k3(subt) * k3(x)
2: 长对象之长度不是短对象之长度的整倍 in: subt - x

简单的如下也会出错:

命令:mu(0,phi,b)

错误于integrate(ueg, ll, 1) : evaluation of function gave a result of wrong length

我觉得第二个问题可能出在积分不能对函数的向量进行,第一个就不太清楚。
希望大家能指点一下,另外不知道有没有关于函数的向量的包?谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-2-27 16:21:53
你没定义 function u
最好把subt、eta贴上,一次解决.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-2-27 21:46:04
同意楼上,ueg <- function(x)  u(x)*exp(g(x))中u(x)是什么呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-2-28 01:01:03
2# epoh
谢谢您的建议,我把前面的定义部分也补充一下:
rm(list=ls())
e <- function(x){
e <- exp(sin(8*pi*x)+cos(pi*x))
}
ei <- integrate(e,0,1)$value               
                                      
f <- function(x){
f <- e(x)/ei
}   
                                      #density
N <- 1000;
r1 <- runif(N,0,1);
r2 <- runif(N,0,1);
M <- ceiling(optimize(f,c(0,1),maximum=TRUE)$objective);            
sample <- r1[f(r1)>M*r2]   
n <- 50                 #sample size
sample <- sample[1:n]                     #rejection sampling
c <- runif(n,0,1);
delta <- rep(1,n);
delta[c<=sample] <- 0;  #indicator variate
t <- pmin(sample,c);                      #independent censoring
subt <- t[1:5];                                #sunset of the sample

lambda <- 1;  beta <-rep(1,2); d <- rep(1,2); c <- rep(1,length(subt));  #initial value
eta <- c(beta,d,c)                                   #vector containing all the parameters

t是根据密度函数用舍选抽样随机模拟的一个数据集,subt是其一个子集,eta是参数估计的初始值,这里面为了方便调试都进行了一些简化。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-2-28 01:02:21
谢谢,关于您说的u的定义,我觉得外面函数定义了u作为变量的话,里面的函数调用u是不是就算已知函数了。
3# aresblq
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-2-28 08:54:34
只要维数抓对,
xi(x) g(x),都可运行
只是依旧错误在f(x, ...) : 没有这个函数 "u"
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群