首先,我想说我对R和编码本身一无所知。我只需要为我的学士论文做一个带有聚类标准错误的回归,我不能在Excel中做到这一点。
我设法用聚类标准错误进行线性回归,但多重回归(即使没有聚类)给我错误信息:无法分配大小为4.7gb的向量。
我的PC上运行了64位windows7版本,可用RAM为8GB。那些8gb也被R.
考虑
> memory.limit()
[1] 8168
这是我使用的函数,错误消息R吐出:
mregt=biglm(GAAP.ETR~TIME+ADVERTISING.EXPENSE+INTANGIBLE.ASSETS+LEVERAGE+LOG.ASSETS+PP.E+R.D.EXPENSE+SPECIAL.ITEMS,data=Control.Variables)
Error: cannot allocate vector of size 4.7 Gb
In addition: Warning messages:
1: In array(c(rep.int(c(1, numeric(n)), n - 1L), 1), d, dn) :
Reached total allocation of 8168Mb: see help(memory.size)
2: In array(c(rep.int(c(1, numeric(n)), n - 1L), 1), d, dn) :
Reached total allocation of 8168Mb: see help(memory.size)
3: In array(c(rep.int(c(1, numeric(n)), n - 1L), 1), d, dn) :
Reached total allocation of 8168Mb: see help(memory.size)
4: In array(c(rep.int(c(1, numeric(n)), n - 1L), 1), d, dn) :
Reached total allocation of 8168Mb: see help(memory.size)
正如你在函数中看到的那样,我已经尝试使用big.memory包,要么我做错了(非常可能),要么就是没有用。
我使用的数据库具有38104个观察值,其中10列=> 38104 * 10
我用于聚类简单回归的函数是:
function(dat,fm, cluster1, cluster2){
attach(dat, warn.conflicts = F)
library(sandwich);library(lmtest)
cluster12 = paste(cluster1,cluster2, sep="")
M1 <- length(unique(cluster1))
M2 <- length(unique(cluster2))
M12 <- length(unique(cluster12))
N <- length(cluster1)
K <- fm$rank
dfc1 <- (M1/(M1-1))*((N-1)/(N-K))
dfc2 <- (M2/(M2-1))*((N-1)/(N-K))
dfc12 <- (M12/(M12-1))*((N-1)/(N-K))
u1j <- apply(estfun(fm), 2, function(x) tapply(x, cluster1, sum))
u2j <- apply(estfun(fm), 2, function(x) tapply(x, cluster2, sum))
u12j <- apply(estfun(fm), 2, function(x) tapply(x, cluster12, sum))
vc1 <- dfc1*sandwich(fm, meat=crossprod(u1j)/N )
vc2 <- dfc2*sandwich(fm, meat=crossprod(u2j)/N )
vc12 <- dfc12*sandwich(fm, meat=crossprod(u12j)/N)
vcovMCL <- vc1 + vc2 - vc12
coeftest(fm, vcovMCL)}
随后我使用:
mcl(All,regt,All$Company.Name,All$Data.Year...Fiscal)
我在这里和其他网站上查了一些帖子。试了几件事,但它只是给了我同样的错误信息。 再一次,我真的不知道R和编码,所以我真的需要最简单的方法来做到这一点:D