我计划一月份,最迟不超过春节,把这本伍德里奇的初级计量教程已有的stata环境下解决的问题统一的用R实现。希望这一实现对学习计量的人有所裨益,也希望可以吸引更多的人来了解和使用R。
首先,我需要获得该书的数据;再次要获得网上既有的Stata软件实现的结果:这些不需要一步一步的点击下载,也不需要使用另外的什么专门的下载软件。因为在R中有内置的函数可以完成这项工作,而且非常容易就可以实现了。下面是代码:
(我们事先必须知道数据文件在网络上的位置,帮助文件在网络上的位置;感谢Denver兄告诉我下载的地址。)
# download.file("
http://fmwww.bc.edu/gstat/examples/wooldridge/wooldridge2.html","E:/ch2.html")
# 设置下载路径名称,保存到本地文件的名称
# 使用setwd设置相应帮助文件下载后的路径,比如setwd("E:/WooldHelp/")
webpath <- "
http://fmwww.bc.edu/gstat/examples/wooldridge/wooldridge"
webpath <- paste("\"",webpath,2:18,".html\"",sep="")
filepath <- paste("\"ch",2:18,".html\"",sep="")
# 组合成为命令,输出成为R脚本,然后调用source函数运行
cmd <- paste("download.file(", webpath, ",", filepath, ")\n")
sink("cmd.r")
# 这里完全是为了节省code,使用了粗暴的做法,而未进行R语言运算
cat(cmd)
sink()
source("cmd.r")
file.remove("cmd.r")
######################################################################################################
######################################################################################################
# 从web上下载stata数据,使用download.file函数
# 路径为:
http://fmwww.bc.edu/ec-p/data/wooldridge/
# file.names为所有数据的名称
# 使用setwd设置相应帮助文件下载后的路径,比如setwd("E:/WooldStataData/")
datapath <- "
http://fmwww.bc.edu/ec-p/data/wooldridge/"
file.names <- c(
"401K.DTA" , "401KSUBS.DTA", "ADMNREV.DTA", "affairs.dta", "airfare.dta",
"APPLE.DTA", "ATHLET1.DTA", "ATHLET2.DTA",
"ATTEND.DTA" , "AUDIT.DTA" ,"BARIUM.DTA" , "BWGHT.DTA" , "bwght2.dta" ,
"campus.dta" , "CARD.DTA", "cement.dta" ,
"CEOSAL1.DTA" ,"CEOSAL2.DTA" ,"consump.dta" , "CORN.DTA" , "CPS78_85.DTA",
"cps91.dta", "CRIME1.DTA" , "CRIME2.DTA" ,
"CRIME3.DTA" ,"CRIME4.DTA" ,"discrim.dta" , "EARNS.DTA" , "engin.dta" ,
"EZANDERS.DTA" ,"ezunem.dta" , "FAIR.DTA" ,
"FERTIL1.DTA" ,"FERTIL2.DTA" ,"FERTIL3.DTA" , "FISH.DTA" , "FRINGE.DTA" ,
"GPA1.DTA" , "gpa2.dta" , "GPA3.DTA" ,
"hprice1.dta" ,"HPRICE2.DTA" ,"HPRICE3.DTA" , "HSEINV.DTA" , "HTV.DTA" ,
"INFMRT.DTA" , "INJURY.DTA" , "INTDEF.DTA" ,
"INTQRT.DTA" , "INVEN.DTA" ,"JTRAIN.DTA" , "JTRAIN2.DTA", "KIELMC.DTA" ,
"LAWSCH85.DTA" ,"loanapp.dta" , "LOWBRTH.DTA" ,
"mathpnl.dta" , "MEAP93.DTA" , "MLB1.DTA" , "MROZ.DTA" , "MURDER.DTA" ,
"nbasal.dta" , "NYSE.DTA" , "OPENNESS.DTA" ,
"PENSION.DTA" , "PHILLIPS.DTA", "PNTSPRD.DTA" , "PRISON.DTA" , "PRMINWGE.DTA",
"RDCHEM.DTA" , "rdtelec.dta" , "RECID.DTA" ,
"RENTAL.DTA" , "RETURN.DTA" , "SAVING.DTA" , "SLEEP75.DTA" , "SLP75_81.DTA",
"SMOKE.DTA" , "TRAFFIC1.DTA", "TRAFFIC2.DTA" ,
"twoyear.dta" , "VOLAT.DTA" , "VOTE1.DTA" , "VOTE2.DTA" , "WAGE1.DTA" ,
"WAGE2.DTA" , "WAGEPAN.DTA", "WAGEPRC.DTA" , "wine.dta")
# 数据集的数量为setnum
setnum <- length(file.names)
full.path <- paste(datapath, file.names, sep="")
for(i in 1:setnum) download.file(full.path[1],paste(file.names
, sep=""))
######################################################################################################
# 提取下载后的数据,具体路径设置和下载位置相同
rm(list=ls(all=T))
library(foreign) # 使用read.dta函数直接读取stata数据
file.names <- dir("E:/AbelRS/WooldridgeBookData/STATA/")
full.names <- paste("E:/AbelRS/WooldridgeBookData/STATA/", file.names, sep="")
file.list <- lapply(full.names,read.dta)
dat.names <- unlist(strsplit(file.names,".",fixed=T))[2*(1:length(file.names))-1]
names(file.list) <- dat.names
# 将包含所有数据的列表存储在当前路径下,文件名是DataSets.RData,
# 全部变换为R可以直接使用的数据了
# 文件大小和压缩后的dta差不多大
save("file.list", file="DataSets.RData")
rm(list=ls(all=T))
load("E:/AbelRS/WooldridgeBookData/DataSets.RData")
attach(file.list) # 加载该列表,使得可以直接调用数据框
我们现在一次性的将这些数据文件放在了我们本机硬盘上。当然,可以在需要使用Stata数据的时候逐一下载,比如:
download.file("http://fmwww.bc.edu/ec-p/data/wooldridge/NYSE.dta", "NYSE.dta")
# library(foreign)
NYSE <- read.dta("NYSE.dta")
attach(NYSE)
随后就可以进行我们所需要的分析了……