收藏 分销(赏)

用R语言做非参数和半参数回归笔记复习课程.docx

上传人:丰**** 文档编号:3867272 上传时间:2024-07-22 格式:DOCX 页数:21 大小:128.13KB
下载 相关 举报
用R语言做非参数和半参数回归笔记复习课程.docx_第1页
第1页 / 共21页
用R语言做非参数和半参数回归笔记复习课程.docx_第2页
第2页 / 共21页
用R语言做非参数和半参数回归笔记复习课程.docx_第3页
第3页 / 共21页
用R语言做非参数和半参数回归笔记复习课程.docx_第4页
第4页 / 共21页
用R语言做非参数和半参数回归笔记复习课程.docx_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、用R语言做非参数和半参数回归笔记由詹鹏整理,仅供交流和学习根据南京财经大学统计系孙瑞博副教授的课件修改,在此感谢孙老师的辛勤付出!教材为:Luke Keele: Semiparametric Regression for the Social Sciences. John Wiley & Sons, Ltd. 2008.-第一章 introduction: Global versus Local Statistic一、主要参考书目及说明1、Hardle(1994). Applied Nonparametic Regresstion. 较早的经典书2、Hardle etc (2004). Non

2、parametric and semiparametric models: an introduction. Springer. 结构清晰3、Li and Racine(2007). Nonparametric econometrics: Theory and Practice. Princeton. 较全面和深入的介绍,偏难4、Pagan and Ullah (1999). Nonparametric Econometrics. 经典5、Yatchew(2003). Semiparametric Regression for the Applied Econometrician. 例子不错6

3、、高铁梅(2009). 计量经济分析方法与建模:EVIEWS应用及实例(第二版). 清华大学出版社. (P127/143)7、李雪松(2008). 高级计量经济学. 中国社会科学出版社. (P45 ch3)8、陈强(2010). 高级计量经济学及Stata应用. 高教出版社. (ch23/24)【其他参看原ppt第一章】二、内容简介方法:移动平均(moving average)核光滑(Kernel smoothing)K近邻光滑(K-NN)局部多项式回归(Local Polynormal)Loesss and Lowess样条光滑(Smoothing Spline)B-splineFriedm

4、an Supersmoother模型:非参数密度估计非参数回归模型非参数回归模型时间序列的半参数模型Panel data 的半参数模型Quantile Regression三、不同的模型形式1、线性模型linear models2、Nonlinear in variables3、Nonlinear in parameters四、数据转换 Power transformation(对参数方法)In the GLM framework, models are equally prone(倾向于) to some misspecification(不规范) from an incorrect fun

5、ctional form.It would be prudent(谨慎的) to test that the effect of any independent variable of a model does not have a nonlinear effect. If it does have a nonlinear effect, analysts in the social science usually rely on Power Transformations to address nonlinearity.ADD: 检验方法见Sanford Weisberg. Applied

6、Linear Regression (Third Edition). A John Wiley & Sons, Inc., Publication.(本科的应用回归分析课教材)-第二章Nonparametric Density Estimation非参数密度估计一、三种方法1、直方图 Hiatogram2、Kernel density estimate3、K nearest-neighbors estimate二、Histogram 对直方图的一个数值解释Suppose x1,xN f(x), the density function f(x) is unknown.One can use t

7、he following function to estimate f(x)【与x的距离小于h的所有点的个数】三、Kernel density estimateBandwidth: h; Window width: 2h.1、Kernel function的条件The kernel function K(.) is a continuous function, symmetric(对称的) around zero, that integrates(积分) to unity and satisfies additional bounded conditions:(1) K() is symmet

8、ric around 0 and is continuous;(2),;(3) Either(a) K(z)=0 if |z|=z0 for z0Or(b) |z|K(z) 0 as;(4), whereis a constant.2、主要函数形式3、置信区间其中,4、窗宽的选择实际应用中,。其中,s是样本标准差,iqr是样本分位数级差(interquartile range)四、K nearest-neighbors estimate五、R语言部分da - read.table(PSID.txt,header=TRUE)lhwage - da$lhwage#* bandwidth 相等,核函

9、数不同 *den1 -density(lhwage,bw=0.45,kernel=epan)den2 - density(lhwage,bw=0.45,kernel=gauss)den3 - density(lhwage,bw=0.45,kernel=biwe)den4 - density(lhwage,bw=0.45,kernel=rect)plot(den4,lty=4,main= ,xlab=Log Hourly Wage,ylab=Kernel density estimates)lines(den3,lty=3,col = red)lines(den2,lty=2, col=gree

10、n)lines(den1,lty=1,col=blue)#* bandwidth 不相等,核函数也不同 *den5 - density(lhwage,bw=0.545,kernel=epan)den6 - density(lhwage,bw=0.246,kernel=gauss)den7 - density(lhwage,bw=0.646,kernel=biwe)den8 - density(lhwage,bw=0.214,kernel=rect)plot(den8,lty=4,main= ,xlab=Log Hourly Wage,ylab=Kernel density estimates)

11、lines(den7,lty=3,col = red)lines(den6,lty=2, col=green)lines(den5,lty=1,col=blue)-第三章smoothing and local regression一、简单光滑估计法Simple Smoothing1、Local Averaging 局部均值按照x排序,将样本分成若干部分(intervals or “bins”);将每部分x对应的y值的均值作为f(x)的估计。三种不同方法:(1)相同的宽度(equal width bins):uniformly distributed.(2)相同的观察值个数(equal no.

12、of observations bins):k-nearest neighbor.(3)移动平均(moving average)K-NN:等窗宽:2、kernel smoothing 核光滑其中,二、局部多项式估计Local Polynomial Regression1、主要结构局部多项式估计是核光滑的扩展,也是基于局部加权均值构造。local constant regressionlocal linear regressionlowess (Cleveland, 1979)loess (Cleveland, 1988)【本部分可参考:Takezana(2006). Introduction

13、to Nonparametric Regression.(P185 3.7 and P195 3.9)Chambers and Hastie(1993). Statistical models in S. (P312 ch8)】2、方法思路(1)对于每个xi,以该点为中心,按照预定宽度构造一个区间;(2)在每个结点区域内,采用加权最小二乘法(WLS)估计其参数,并用得到的模型估计该结点对应的x值对应y值,作为y|xi的估计值(只要这一个点的估计值);(3)估计下一个点xj;(4)将每个y|xi的估计值连接起来。【R操作library(KernSmooth) #函数locpoly()librar

14、y(locpol) #locpol(); locCteSmootherC()library(locfit) #locfit()#weight funciton: kernel=”tcub”. And “rect”, “trwt”, “tria”, “epan”, “bisq”, “gauss”】3、每个方法对应的估计形式(1)变量个数p=0, local constant regression (kernel smoothing)min(2)变量个数p=1, local linear regressionmin(3)Lowess (Local Weighted scatterplot smoo

15、thing)p=1:min【还有个加权修正的过程,这里略,详见原书或者PPT】(4)Loess (Local regression)p=1,2:min【还有个加权修正的过程,这里略,详见原书或者PPT】(5)Friedman supersmoothersymmetrick-NN, using local linear fit,varying span, which is determined by local CV,not robust to outliers, fast to computesupsmu( )inR三、模型选择需要选择的内容:(1)窗宽the span;(2)多项式的度the

16、 degree of polynomial for the local regression models;(3)权重函数the weight functions。【其他略】四、R语言部分library(foreign)library(SemiPar)library(mgcv)jacob - read.table(jacob.txt,header=TRUE)#第一部分,简单的光滑估计#1、Kernel Density Estimation#Illustration of Kernel Concepts#Defining the Window Widthattach(jacob)x0 - sor

17、t(perotvote)75diffs - abs(perotvote - x0)which.diff - sort(diffs)120#Applying the Tricube Weight#.Tricube functiontricube - function(z) ifelse (abs(z) 1, (1 - (abs(z)3)3, 0)#.a - seq(0,1, by=.1)tricube(a)#Figure 2.5plot(range(perotvote), c(0,1), xlab=Perot Vote (%), ylab=Tricube Weight, type=n, bty=

18、l)abline(v=c(x0-which.diff, x0+which.diff), lty=2)abline(v=x0)xwts - seq(x0-which.diff, x0+which.diff, len=250)lines(xwts,tricube(xwts-x0)/which.diff), lty=1, lwd=1)points(x.n, tricube(x.n - x0)/which.diff), cex=1)#2、Kernel Smoothing#Figure 2.6par(mfrow=c(3,1)plot(perotvote, chal.vote, pch=., cex=1.

19、95,xlab=Perot Vote (%), ylab=Challengers Vote Share (%),main=Bandwidth = 4, bty=l)lines(ksmooth(perotvote, chal.vote,bandwidth=4)plot(perotvote, chal.vote, pch=., cex=.65,xlab=Perot Vote (%), ylab=Challengers Vote Share (%),main=Bandwidth = 8, bty=l)lines(ksmooth(perotvote, chal.vote, kernel=box,ban

20、dwidth=8), lty=1)plot(perotvote, chal.vote, pch=., cex=.65,xlab=Perot Vote (%), ylab=Challengers Vote Share (%),main=Bandwidth = 12, bty=l)lines(ksmooth(perotvote, chal.vote, bandwidth=12), lty=1)#* Kernel smoothing中选取box和normal核函数的比较,带宽相等plot(perotvote, chal.vote, pch=., cex=.65, xlab=Perot Vote (%

21、), ylab=Challengers Vote Share (%), main=Bandwidth = 8, bty=l)lines(ksmooth(perotvote, chal.vote,kernel=box,bandwidth=8), lty=1)lines(ksmooth(perotvote, chal.vote,kernel=normal,bandwidth=8), lty=2,col=red)#第二部分,LPR模型#Data Prep For Local Average Regression Step-by-Stepcong - as.data.frame(jacob,2:3)c

22、ong - congorder(cong$perotvote),1:2y - as.matrix(cong$chal.vote)x - as.matrix(cong$perotvote)n - length(y)#.tricube - function(z) ifelse (abs(z) 1, (1 - (abs(z)3)3, 0)#.x0 - x75diffs - abs(x - x0)which.diff - sort(diffs)120x.n - xdiffs= which.diffy.n - ydiffs = which.diffweigh=tricube(x.n-x0)/which.

23、diff)mod which.diff, ydiffs which.diff, pch=16, cex=1, col=gray(.80)points(xdiffs = which.diff, ydiffs = which.diff, cex=.85)abline(mod, lwd=2, col=1)text(27.5, 50,expression(paste(Fitted Value of y at ,x0) #这里expression的用法比较有意思arrows(25, 47, 15, 37, code =2, length = .10)#2、Now Putting It Together

24、For Local Regression Demonstration.#OLS Fit for Comparisonols - lm(chal.vote perotvote, data=jacob)#The loess fitmodel.loess -loess(chal.vote perotvote, data=jacob,span= 0.5)#* 默认设置 degree=2,family=gauss, tricube加权 *n - length(chal.vote)x.loess - seq(min(perotvote), max(perotvote), length=n)y.loess

25、-predict(model.loess, data.frame(perotvote=x.loess) #得到预测值便于比较#The lowess fitmodel.lowess -lowess(chal.vote perotvote, data=jacob,f= 0.5)#* 默认设置 robust linear tricube加权 *n - length(chal.vote)x.lowess - seq(min(perotvote), max(perotvote), length=n)y.lowess -predict(model.lowess, data.frame(perotvote=

26、x.lowess) #得到预测值便于比较#Figure 2.8plot(perotvote, chal.vote, pch=.,ylab=Challengers Vote Share (%), xlab=Vote for Perot (%), bty=l)lines(x.loess, y.loess)lines(x.lowess, y.lowess)abline(ols)legend(15,20, c(Loess,Lowess, OLS) , lty=c(1,2,1), bty=n, cex=.8)#3、lowess中不同robust的比较m1.lowess - lowess(perotvot

27、e, chal.vote, f = 0.5,iter=0)#* 没有进行第二步的robust加权估计 *m2.lowess - lowess(perotvote, chal.vote, f = 0.5)#* 默认 iter=3,要进行3次robust加权估计 *m0.loess - loess(chal.vote perotvote, data=jacob,span = 0.5, degree=1, family=symm,iterations=1) #* no robustm1.loess - loess(chal.vote perotvote, data=jacob,span = 0.5,

28、 degree=1) #* 没有进行第二步的robust加权估计 *m2.loess - loess(chal.vote perotvote, data=jacob,span = 0.5, degree=1, family=symm, iterations=3)#* 进行3次robust加权估计 *plot(perotvote, chal.vote, pch=., ylab=Challengers Vote Share (%), xlab=Vote for Perot (%)lines(m1.lowess)lines(sort(perotvote), m1.loess$fitorder(per

29、otvote), lty=3, col=green)lines(sort(perotvote), m0.loess$fitorder(perotvote), lty=9,col=18)lines(m2.lowess, lty=2, col=red)lines(sort(perotvote), m2.loess$fitorder(perotvote), lty=4, col=blue)-第四章样条估计spline一、基本思想按照x将样本分成多个区间,对每个区间分别进行估计。不同于核估计,这里不用移动计算,从而减小了计算量。二、最简单的形式Linear Spline with k knots:其中

30、,三、其他样条模型1、p次样条估计二次样条Quadratic Spline (basis functions with k knots)三次样条Cubic Spline (with k knots, use quadratic basis functions)p-order spline (with k knots)2、B-splines (with k knots cubic B-spline basis)其中,3、Natural Splines以上估计方法对结点(knots)之间的估计比较准确,但对边界的拟合效果较差。自然样条的思想是,在自变量最小值和最大值处各增加一个结点,用线性模型拟合

31、边界位置的样本点。4、k的选择和模型比较采用AIC准则四、光滑样条smoothing spline基于如果目标得到参数估计值min五、模型比较的F检验六、R语言部分library(foreign)jacob - read.dta(jacob.dta)attach(jacob)#第一部分,B样条和natural B 样条library(splines)#* P61 Perform Spline Regression *m.bsp - lm(chal.votebs(perotvote, df=5), data=jacob)#* 3次B样条公式: df=k+3 (不含常数项)m.nsp - lm(c

32、hal.votens(perotvote, df=5), data=jacob)#* df=5对应结点为4个;3次natural B样条公式:df=k+1perot - seq(min(perotvote), max(perotvote), length=312)bsfit -predict(m.bsp, data.frame(perotvote=perot)nsfit - predict(m.nsp, data.frame(perotvote=perot)AIC(m.bsp) #计算AIC值#第二部分,光滑样条估计plot(perotvote, chal.vote, pch=.,ylab=C

33、hallengers Vote Share (%), xlab=Vote for Perot (%),bty=l, main = df = 2, cex.main = .95)lines(smooth.spline(perotvote, chal.vote,df=2)#第三部分,置信区间library(splines)m.nsp - lm(chal.votens(perotvote, df=4), data=jacob)perot - seq(min(perotvote), max(perotvote), length=312)nsfit - predict(m.nsp, inteval=co

34、nfidence,se.fit=TRUE, data.frame(perotvote=perot)#Figure 3.8plot(perotvote, chal.vote, pch=., ylab=Challengers Vote Share (%), xlab=Vote for Perot (%)lines(perot, nsfit$fit)lines(perot, nsfit$fit + 1.96*nsfit$se.fit, lty=2)lines(perot, nsfit$fit - 1.96*nsfit$se.fit, lty=2)#* 偏移调整的置信区间#* Figure 3.9#*

35、 Overlay Natural cubic B-pline Fit and Confidence Intervalslibrary(mgcv)m.smsp -gam(chal.vote s(perotvote, bs=cr, k=4, fx=TRUE)plot(m.smsp, rug=FALSE, se=TRUE,ylab=Challengers Vote Share (%), xlab=Vote for Perot (%),residual=FALSE, shift=33.88) #绘制调整以后的上下界lines(perot, nsfit$fit + 1.96*nsfit$se.fit,

36、lty=3)lines(perot, nsfit$fit - 1.96*nsfit$se.fit, lty=3)legend(3,47, c(natural cubic B-spline Pointwise Bands, Bias Adjusted Bands),lty=c(3, 2), bty=n)#第四部分,模型比较ols - lm(chal.vote 1)#Use Automated R F-test Function Anovaanova(ols, m.nsp)anova(ols, m.smsp)#* 三个不同的函数做smoothing spline,进行比较plot(x,y, xla

37、b=X, ylab=Y)#方法1library(SemiPar)fit -spm(y f(x)lines(fit, se=FALSE, lwd=1,lty=1,col=1)#方法2library(pspline)lines(sm.spline(x,y, df=31),lty=5,col=5)#方法3lines(smooth.spline(x,y,df=31),lty=6,col=6)legend(0,-0.8,c(spm,sm.spline,smooth.spline),lty=c(1,5,6),col=c(1,5,6),cex=0.8,bty=n)-第五章Automated Smoothin

38、g Techniques自动光滑技术一、Span by Cross-Validation其中s指窗宽span。【CV和GCV在LPR中表现不佳】二、自动光滑技术两种方法:1、采用MLE(极大似然估计);2、采用CV选择。1、MLE方法得到。其中,是随机效应(the random effect)的方差估计,是随机误差项(the error term)的方差估计2、最小化CV或GCV三、R语言部分setwd(D:/课程/nonparameter regression/2010/ch3)jacob - read.table(jacob.txt,header=TRUE)attach(jacob)#第一

39、部分,计算GCV并绘图library(locfit)alpha - seq(0.2,0.8, by=0.05)plot(gcvplot(chal.voteperotvote, data=jacob,alpha=alpha), type=o)#第二部分,比较MLE方法和robust得到的估计结果#* P89 Figure 4.2 *plot(perotvote, chal.vote, pch=., cex=1.75,ylab=Challengers Vote Share (%), xlab=Vote for Perot (%)fit -locfit(chal.voteperotvote, dat

40、a=jacob, alpha=0.2)lines(fit)lines(lowess(perotvote, chal.vote, f = 0.2), lty=2,col=2) # robustlines(lowess(perotvote, chal.vote, f = 0.2,iter=0), lty=3,col=3) # no robustlegend(23,16, c(locfit with likelihood,robust lowess,norobust lowess),lty=1:3,col=1:3,bty=n,cex=0.8)#第三部分,在光滑样条中是哟花姑娘GCVlibrary(p

41、spline) #使用其函数sm.spline()plot(perotvote, chal.vote, pch=.,ylab=Challengers Vote Share (%), xlab=Vote for Perot (%),main = cubic smoothing spline With GCV)lines(sm.spline(perotvote, chal.vote, cv=F),lty=2,col=2) #GCV Smoothing Selectionlines(smooth.spline(perotvote, chal.vote, cv=F),lty=3,col=3)#第四部分,基于GCV的LS方法和MLE方法比较library(mgcv) #使用其函数gam()library(SemiPar) #使用其函数spm()smsp1 -gam(chal.vote s(perotvote,bs=cr) # 用LS方法估计,GCVsmsp2 -spm(chal.vote f(perotvote) # 光滑样条的混合模

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服