首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

用R语言做非参数

2022-09-13 来源:华拓网
用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). Nonparametric 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、高铁梅(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-spline

——Friedman Supersmoother 模型:

——非参数密度估计——非参数回归模型

——非参数回归模型

——时间序列的半参数模型

——Panel data 的半参数模型——Quantile Regression 三、不同的模型形式

1、线性模型linear models

2、Nonlinear in variables

3、Nonlinear in parameters

四、数据转换 Power transformation(对参数方法) In the GLM framework, models are equally prone(倾向于) to some misspecification(不规范) from an incorrect functional 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 Linear Regression (Third Edition). A John Wiley & Sons, Inc., Publication.(本科的应用回归分析课教材)]

----------------------------------------------------------------------------第二章 Nonparametric Density Estimation非参数密度估计 一、三种方法

1、直方图 Hiatogram

2、Kernel density estimate

3、K nearest-neighbors estimate二、Histogram 对直方图的一个数值解释

Suppose x1,…xN – f(x), the density function f(x) is unknown.

One can use the following function to estimate f(x)

【与x的距离小于h的所有点的个数】 三、Kernel density estimate

Bandwidth: 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 symmetric around 0 and is continuous;(2) ,,(3) Either

(a) K(z)=0 if |z|>=z0 for z0 Or

(b) |z|K(z) à0 as (4)

2、主要函数形式

, where

;

is a constant.

;

3、置信区间

其中,

4、窗宽的选择

实际应用中,。其中,s是样本标准差,iqr

是样本分位数级差(interquartile range) 四、K nearest-neighbors estimate

五、R语言部分

da <- read.table(\"PSID.txt\lhwage <- da$lhwage #*** bandwidth 相等,核函数不同 ***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=\" \Wage\lines(den3,lty=3,col = \"red\")lines(den2,lty=2, col=\"green\")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=\" \Wage\lines(den7,lty=3,col = \"red\")lines(den6,lty=2, col=\"green\")lines(den5,lty=1,col=\"blue\")----------------------------------------------------------------------------

第三章 smoothing and local regression一、简单光滑估计法 Simple Smoothing 1、Local Averaging 局部均值

按照x排序,将样本分成若干部分(intervals or “bins”);将每部分x对应的y值的均值作为f(x)的估计。 三种不同方法:

(1)相同的宽度(equal width bins):uniformly distributed. (2)相同的观察值个数(equal no. of observations bins):k-nearest neighbor.

(3)移动平均(moving average) K-NN:

等窗宽:

2、kernel smoothing 核光滑

其中,

二、局部多项式估计Local Polynomial Regression1、主要结构

局部多项式估计是核光滑的扩展,也是基于局部加权均值构造。 ——local constant regression——local linear regression

——lowess (Cleveland, 1979)——loess (Cleveland, 1988)【本部分可参考:

Takezana(2006). Introduction 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()

library(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 regression

min

(3)Lowess (Local Weighted scatterplot smoothing)p=1:

min

【还有个加权修正的过程,这里略,详见原书或者PPT】 (4)Loess (Local regression)p=1,2:

min

【还有个加权修正的过程,这里略,详见原书或者PPT】 (5)Friedman supersmoother

symmetric k-NN, using local linear fit,

varying span, which is determined by local CV, not robust to outliers, fast to computesupsmu( ) in R三、模型选择

需要选择的内容:(1)窗宽the span;(2)多项式的度the degree of polynomial for the local regression models;(3)权重函数the weight functions。 【其他略】 四、R语言部分

library(foreign)library(SemiPar)library(mgcv)jacob <- read.table(\"jacob.txt\################################################################################第一部分,简单的光滑估计 #1、Kernel Density Estimation#Illustration of Kernel Concepts#Defining the Window Widthattach(jacob)x0 <- sort(perotvote)[75]diffs <- 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\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=\".\xlab=\"Perot Vote (%)\main=\"Bandwidth = 4\lines(ksmooth(perotvote, chal.vote, bandwidth=\"4\")) plot(perotvote, chal.vote, pch=\".\xlab=\"Perot Vote (%)\main=\"Bandwidth = 8\lines(ksmooth(perotvote, chal.vote, kernel=\"box\plot(perotvote, chal.vote, pch=\".\xlab=\"Perot Vote (%)\main=\"Bandwidth = 12\lines(ksmooth(perotvote, chal.vote, bandwidth=\"12\"), lty=1) #******* Kernel smoothing中选取box和normal核函数的比较,带宽相等 plot(perotvote, chal.vote, pch=\".\Vote (%)\main=\"Bandwidth = 8\lines(ksmooth(perotvote, chal.vote, kernel=\"box\lines(ksmooth(perotvote, chal.vote, kernel=\"normal\###################################################################################第二部分,LPR模型 #Data Prep For Local Average Regression Step-by-Stepcong <- as.data.frame(jacob[,2:3])cong <- cong[order(cong$perotvote),1:2]y <- 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 <- x[75]diffs <- abs(x - x0)which.diff <- sort(diffs)[120]x.n <- x[diffs<= which.diff]y.n <- y[diffs <= which.diff]weigh=tricube((x.n-x0)/which.diff)mod <- lm(y.n ~ x.n, weights=weigh)#Figure 2.7plot(x, y, type=\"n\ylab=\"Challenger's Vote Share (%)\abline(v=c(x0 - which.diff, x0 + which.diff), lty = 2)abline(v=x0)points(x[diffs > which.diff], y[diffs > which.diff], pch=16, cex=1, col=gray(.80))points(x[diffs <= which.diff], y[diffs <= which.diff], cex=.85)abline(mod, lwd=2, col=1)text(27.5, 50, expression(paste(\"Fitted Value of y at \x[0]))) #这里expression的用法比较有意思 arrows(25, 47, 15, 37, code =2, length = .10)##################################################################################2、Now Putting It Together 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 <- 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=x.lowess)) #得到预测值便于比较#Figure 2.8plot(perotvote, chal.vote, pch=\".\ylab=\"Challengers' Vote Share (%)\(%)\lines(x.loess, y.loess)lines(x.lowess, y.lowess)abline(ols)legend(15,20, c(\"Loess\bty=\"n\##################################################################################3、lowess中不同robust的比较 m1.lowess <- lowess(perotvote, 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, degree=1) #*** 没有进行第二步的robust加权估计 ***m2.loess <- loess(chal.vote ~ perotvote, data=jacob, span = 0.5, degree=1, family=\"symm\#*** 进行3次robust加权估计 ***plot(perotvote, chal.vote, pch=\".\ylab=\"Challengers' Vote Share (%)\lines(m1.lowess)lines(sort(perotvote), m1.loess$fit[order(perotvote)], lty=3, col=\"green\")lines(sort(perotvote), m0.loess$fit[order(perotvote)], lty=9,col=18)lines(m2.lowess, lty=2, col=\"red\")lines(sort(perotvote), m2.loess$fit[order(perotvote)], lty=4, col=\"blue\")---------------------------------------------------------------------------- 第四章 样条估计spline一、基本思想

按照x将样本分成多个区间,对每个区间分别进行估计。不同于核估计,这里不用移动计算,从而减小了计算量。 二、最简单的形式

Linear Spline with k knots:

其中,,

三、其他样条模型 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)之间的估计比较准确,但对边界的拟合效果较差。自然样条的思想是,在自变量最小值和最大值处各增加一个结点,用线性模型拟合边界位置的样本点。 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.vote~bs(perotvote, df=5), data=jacob)#*** 3次B样条公式: df=k+3 (不含常数项)m.nsp <- lm(chal.vote~ns(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=\"Challengers' Vote Share (%)\(%)\bty=\"l\lines(smooth.spline(perotvote, chal.vote, df=2))###################################################################第三部分,置信区间 library(splines)m.nsp <- lm(chal.vote~ns(perotvote, df=4), data=jacob)perot <- seq(min(perotvote), max(perotvote), length=312)nsfit <- predict(m.nsp, inteval=\"confidence\ se.fit=TRUE, data.frame(perotvote=perot))#Figure 3.8plot(perotvote, chal.vote, pch=\".\ylab=\"Challengers' Vote Share (%)\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#*** Overlay Natural cubic B-pline Fit and Confidence Intervals library(mgcv)m.smsp <- gam(chal.vote ~ s(perotvote, bs=\"cr\fx=TRUE))plot(m.smsp, rug=FALSE, se=TRUE, ylab=\"Challengers' Vote Share (%)\(%)\residual=FALSE, shift=33.88) #绘制调整以后的上下界 lines(perot, nsfit$fit + 1.96*nsfit$se.fit, 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, xlab=\"X\#方法1library(SemiPar)fit <- spm(y ~ f(x))lines(fit, se=FALSE, lwd=1,lty=1,col=1)#方法2 library(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\1,5,6),col=c(1,5,6),cex=0.8,bty=\"n\") ----------------------------------------------------------------------------

第五章 Automated Smoothing 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\attach(jacob)############################################################################第一部分,计算GCV并绘图 library(locfit)alpha <- seq(0.2,0.8, by=0.05)plot(gcvplot(chal.vote~perotvote, data=jacob, alpha=alpha), type=\"o\") #第二部分,比较MLE方法和robust得到的估计结果 #***** P89 Figure 4.2 *****plot(perotvote, chal.vote, pch=\".\ylab=\"Challengers' Vote Share (%)\(%)\")fit <- locfit(chal.vote~perotvote, data=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\lowess\lty=1:3,col=1:3,bty=\"n\#第三部分,在光滑样条中是哟花姑娘GCVlibrary(pspline) #使用其函数sm.spline()plot(perotvote, chal.vote, pch=\".\ylab=\"Challengers' Vote Share (%)\(%)\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)) # 光滑样条的混合模型表示,用极大似然方法估计! smsp1 # or summary(smsp1)summary(smsp2)#***** P92 Figure 4.3 *****par(mfrow=c(1,2))plot(smsp1, rug=FALSE, se=FALSE, ylab=\"Challengers' Vote Share (%)\(%)\residual=TRUE, shift=33.88, bty=\"l\points(perotvote, chal.vote, pch=\".\plot(perotvote, chal.vote, pch=\".\ylab=\"Challengers' Vote Share (%)\(%)\main=\"Likelihood Smoothing\lines(smsp2, se=FALSE, lwd=1, rug=FALSE) ----------------------------------------------------------------------------

第六章 Additive and Semiparametric Regression Models可加回归模型和半参数回归模型

R语言部分

jacob <- read.table(\"jacob.txt\attach(jacob)#第一部分,广义可加模型 library(mgcv)gam1 <- gam(chal.vote ~ s(perotvote, bs=\"cr\") + s(checks, bs=\"cr\"), data=jacob) summary(gam1)#画图 par(mfrow = c(1,2))plot(gam1, select=1, rug=F, se=TRUE, ylab=\"Challengers' Vote Share (%)\(%)\bty=\"l\points(perotvote, chal.vote, pch=\".\plot(gam1, select=2, rug=F, se=TRUE, ylab=\"Challengers' Vote Share (%)\Overdrafts\bty=\"l\points(checks, chal.vote, pch=\".\#进行检查 gam.check(gam1)##############---------------------------------------------------------------#模型比较的卡方检验 #OLS Modelols1 <- gam(chal.vote ~ perotvote + checks, data=jacob)#或 ols <- lm(chal.vote ~ perotvote + checks, data=jacob) #速度更快 summary(gam1)$n #自由度 或者用sum(gam1$edf)#Chi sqaured test:将线性模型与非参的可加模型进行比较 #deviance计算模型的变异度 LR <- summary(gam1)$n*(log(deviance(ols1)) - log(deviance(gam1)))df <- sum(gam1$edf) - sum(ols1$edf)1 - pchisq(LR, df)#第二种比较方法,采用anovaanova(ols1, gam1, test=\"Chisq\")###########################################################第二部分,半参数模型 library(mgcv)#**** P123 Baseline Model ******** no transformations ******ols <- gam(chal.vote ~ exp.chal + chal.spend + inc.spend + pres.vote + checks + marginal + partisan.redist + perotvote, data=jacob) #******* Test each continuous covariategam1 <- gam(chal.vote ~ exp.chal + s(chal.spend, bs=\"cr\") + inc.spend + pres.vote + checks + marginal + partisan.redist + perotvote, data=jacob) gam2 <- gam(chal.vote ~ exp.chal + chal.spend + s(inc.spend, bs=\"cr\") + pres.vote + checks + marginal + partisan.redist + perotvote, data=jacob)gam3 <- gam(chal.vote ~ exp.chal + chal.spend + inc.spend + s(pres.vote, bs=\"cr\") + checks + marginal + partisan.redist + perotvote, data=jacob)gam4 <- gam(chal.vote ~ exp.chal + chal.spend + inc.spend + pres.vote + s(checks, bs=\"cr\") + marginal + partisan.redist + perotvote, data=jacob)gam5 <- gam(chal.vote ~ exp.chal + chal.spend + inc.spend + pres.vote + checks + marginal + partisan.redist + s(perotvote, bs=\"cr\"), data=jacob) anova(ols,gam1,test=\"Chi\")anova(ols,gam2,test=\"Chi\")anova(ols,gam3,test=\"Chi\")anova(ols,gam4,test=\"Chi\")anova(ols,gam5,test=\"Chi\") ----------------------------------------------------------------------------

第七章 Generalized Additive Models广义可加模型

一、广义线性模型GLM

probit model: ;

logit model: ;

possion regression:

二、广义可加模型

三、估计方法

MLE: use Newton-Raphson algorithmIRLS: backfitting algorithm (in ch5)四、假设检验

LR=-2(LogLikelihood0 – LogLikelihood1) 【这是两个模型进行比较】 五、R语言部分

setwd()library(foreign)war <- read.dta(\"PHdata.dta\")attach(war)#第一部分,用广义可加模型做Logit回归【与glm的用法区别】 library(mgcv)war.glm <- gam(dispute ~ nudem + nugrow + allies + contig + nucapab + trade + sumdisp + s(year, bs=\"cr\"), data = war, family=binomial) summary(war.glm)#进行预测 war.smooth7 <- gam(dispute ~ s(nudem, bs=\"cr\") + nugrow + allies + contig + nucapab + trade + sumdisp + s(year, bs=\"cr\"), data = war, family=binomial) summary(war.smooth7)new <- data.frame(nudem=nudem, nugrow=nugrow, allies=allies, contig=contig, nucapab=nucapab, trade=trade, sumdisp=sumdisp, year=year)sa <- predict(war.smooth7, newdata=new) #*** eta(i) = XB+f(X)ui <- plogis(sa) #*** plogis为logistic分布的分布函数,计算概率 summary(ui)summary(war.smooth7$fit)sa2 <- predict(war.smooth7, newdata=new,type=\"terms\")#*** 可以得到模型的每一项(terms)的预测值 sa2[,7] #*** f(nudem) 那一列 ######################################################################第二部分,用广义可加模型做多分类logit模型(顺序) library(foreign)couples <- read.dta(\"D:/课程/nonparameter regression/2010/Rprog/Chapter 6/couples.dta\")attach(couples)library(VGAM)gam1 <- vgam(violence ~ chabting + minority + s(fagunion) + s(misolatn) + s(ecndisad) + alcdrug + s(duryrs) + s(econ_alc) + s(disagmnt) + s(comstyle), cumulative(parallel=T), data=couples)summary(gam1)par(mfrow=c(3,3))plot(gam1,which.term=3, se=TRUE, rug=FALSE, bty=\"l\")plot(gam1,which.term=4, se=TRUE, rug=FALSE, bty=\"l\")plot(gam1,which.term=5, se=TRUE, rug=FALSE, bty=\"l\")plot(gam1,which.term=7, se=TRUE, rug=FALSE, bty=\"l\")plot(gam1,which.term=8, se=TRUE, rug=FALSE, bty=\"l\")plot(gam1,which.term=9, se=TRUE, rug=FALSE, bty=\"l\")plot(gam1,which.term=10, se=TRUE, rug=FALSE, bty=\"l\")【关于预测方法的说明没有看明白】 ######################################################################第三部分,用广义可加模型做possion模型 library(foreign)Scourt <- read.dta(\"scourt.dta\")attach(Scourt)library(mgcv)m1 <- gam(nulls ~ tenure + congress + unified, data=Scourt, family=poisson) summary(m1)m2 <- gam(nulls ~ tenure + s(congress, bs=\"cr\") + unified, data=Scourt, family=poisson) summary(m2)anova(m1, m2, test=\"Chisq\")#进行预测 predict.data <- data.frame(expand.grid(list(congress=seq(1, 101, by=1), tenure = 10.35, unified = 0)))#Created Fitted Values Using Fake Data 方法1predict.fit <- predict(m2, newdata = predict.data, se.fit=TRUE) #Created Fitted Values Using Fake Data 方法2 predict.fit1 <- predict.gam(m1, newdata = predict.data, se.fit=TRUE) predict.fit2 <- predict.gam(m2, newdata = predict.data, se.fit=TRUE) #********************** Negative Binomial regression **********************library(MASS)m4 <- gam(nulls~ tenure + s(congress, bs=\"cr\k=10) + unified, data=Scourt, family=negative.binomial(1), control = gam.control(maxit = 150))anova(m2, m4, test=\"Chisq\")######################################################################第四部分,cox proportional hazards regression model【本部分的理论没有弄懂】 library(foreign)riot <- read.dta(\"repriot.dta\")library(survival)m1 <- coxph(Surv(newend, cens) ~ lognwun + manuwage + unemrate + percfor + x15 + sumpi + lstwkall + lwka2 + d6768 + pasthist, data=riot)summary(m1)zph.m1 <- cox.zph(m1) m.base <- coxph(Surv(newend, cens) ~ pspline(nonwhtunemp, df=4) + pspline(manuwage, df=4) + pspline(unemrate, df=4) + pspline(percfor, df=4) + pspline(x15, df=4) + pspline(sumpi, df=4) + pspline(lstwkall, df=4) + d6768 + pasthist, data=riot)summary(m.base)#Test Nonproportional Hazardszph.m.base <- cox.zph(m.base)zph.m.basetermplot(m.base, term=2, se=TRUE, rug=TRUE, ylab=\"Log Hazard\#Fit Parsimonious Modelm.trim <- coxph(Surv(newend, cens) ~ pspline(nonwhtunemp, df=4) + pspline(manuwage, df=4) + unemrate + percfor + pspline(x15, df=4) + pspline(sumpi, df=4) + pspline(lstwkall, df=4) + d6768 + pasthist, data=riot)#Test Nonproportional Hazardszph.m.trim <- cox.zph(m.trim)zph.m.trimsummary(m.trim)#Plot The Effectspar(mfrow=c(2,3))termplot(m.trim, term = 1, se = TRUE, ylab = \"Log Hazard\Unemployment\") termplot(m.trim, term = 2, se = TRUE, ylab = \"Log Hazardermplot(m.trim, term = 5, se = TRUE, ylab = \"Log Hazard\xlab = \"Non-White Unemployment x Percent Foreign Born\") termplot(m.trim, term = 6, se = TRUE, ylab = \"Log Hazardermplot(m.trim, term = 7, se = TRUE, ylab = \"Log Hazard\Diffusion\") #Figure 6.8par(mfrow =c(1,2))termplot(m.trim, term = 2, se = TRUE, ylab = \"Log Hazard\rug=FALSE, xlab = \"Manufacturing Wage\bty=\"l\") termplot(m.trim, term = 1, se = TRUE, ylab = \"Log Hazard\Unemployment\anova(m.trim, m.base, test=\"Chisq\")

因篇幅问题不能全部显示,请点此查看更多更全内容