陈放
lls<-function(x, y, h, grid, method=1,iker = 1)
{ # SIMPLE BUT NAIVE IMPLEMENTATION of
# local constant or local linear with kernel symmetric beta kernel
# (1-u^2)^iker and bandwidth h, evaluated at "grid".
#method = 0, local linear fit;
# = 1, local constant fit
#iker is an integer.
#result: grid, est
ngrid<-length(grid)
res <- rep(0,ngrid)
for (j in 1:ngrid)
{ w <- locw(x,grid[j],h) #Epanechnikov kernel
x0 <- x[ w > 0] #local data
y0 <- y[ w > 0]
w <- w[w > 0]
w <- w^iker
coef <- lsfit(x0-grid[j],y0,w)$coef
if(method==1)
res[j] <- lsfit(x0-grid[j],y0,w)$coef[1]
else
res[j] <- lsfit(x0-grid[j],y0,w,intercept=FALSE)$coef[1]
}
list(grid=grid,est=res)
}
ep=function(t)
(3/4)*(1-t^2)*(1-t^2>=0)
locw=function(T,t,h){
y=T-t;Kh=ep(y/h)/h;
s1=t(Kh)%*%y;s2=t(Kh)%*%(y^2);
return(Kh*(s2-s1*y)/sum(Kh*(s2-s1*y)));
}
fdbsjhc
一般来说,R 中的程序包都是可以打开看的,而且我自己的观点是如果要用 R 来分析数据(不是程序包 Help 里的数据),必须要打开看看 相关程序包里的每个分析程序, 搞明白每个程序编写者的对每个参数的赋值, 比如CV或者GCV算法中 GCV(lambda)中 ln(lambda) 的 grid 默认取值是多少(100, 200 还是其他), 再比如取节点时默认取的是6,10,还是20。。。等等这些问题如果没有事先搞清楚,很容易犯错误。
另外关于核估计回归,局部多项式回归,对于 y = f(x) +beta Z + e, e ~N(0, sigma^2) 的回归问题来说,无论是采用核估计、局部多项式回归还是样条回归中的哪一种,都已有比较成熟的程序包了,耐心地在R的1000多个程序包中寻找吧,总能找到你自己需要的。对我自己来说,寻找答案的过程是最愉快的过程,每时每刻都有可能发现新的东西。
不过目前,有些国外的研究生写完自己的论文以后就将所写的code原原本本地放在了R的packages家族群里,当然你可以用,不过一定要找到这些程序包不适合分析的数据。(没有人发表的论文是解决了所有问题的,这样的文章也大概在top 10 的期刊中无法发表)
关于纵向数据,实际可以自己编写程序。纵向数据是一类混合效应模型,教科书上是以线性混合效应模型为主讲述的,但几年之前有些文献已经开始讨论非线性的了,所以如果写文章的话,还是要自己编写程序。