具有多路聚类方差 - 协方差矩阵的特效包

时间:2015-12-15 20:04:22

标签: r ggplot2

我想使用"效果"绘制与错误功能区的交互效果。包。但是,我想基于多路聚类协方差矩阵来计算误差,因为可以使用" multiwayvcov"包。 "效果"可以使用函数来计算协方差矩阵(vcov。=),但看起来该函数不会接受任何其他参数。

示例:

library(effects)
library(ggplot2)
library(multiwayvcov)
m1 <- lm(mpg ~ hp + wt + hp:wt, data=mtcars)
tmp <- as.data.frame(effect("hp:wt", model, vcov=vcov, se=TRUE, xlevels=list(wt=c(2.2,3.2,4.2))))
ggplot(data=tmp, aes(x=hp, y=fit, colour=as.factor(wt))) +
   geom_line() +
   geom_ribbon(aes(ymin=lower, ymax=upper, fill=as.factor(wt)), alpha = 0.5) +
   labs(colour="wt")

上面为使用非群集se的交互产生了类似的图。我想要的东西是相同的,但与群集se。类似的东西(想象一下&#34;齿轮&#34;和#34; cyl&#34;是mtcars数据中的群集ID):

m1 <- lm(mpg ~ hp + wt + hp:wt, data=mtcars)
cluster.ids <- data.frame(i = mtcars$gear, j = mtcars$cyl)
tmp <- as.data.frame(effect("hp:wt", m1, vcov=cluster.vcov(m1, cluster = cluster.ids), xlevels=list(wt=c(2.2,3.2,4.2))))

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

我做了一些可能对其他人有用的工作。看起来效果函数中的vcov参数只接受带有一个参数的函数,并且必须是效果第一部分的lm(或其他)对象。如果你编写一个外部函数,在内部调整协方差矩阵函数的其他参数,它将起作用。

上面的例子: 标准协方差矩阵

m1 <- lm(mpg ~ hp + wt + hp:wt, data=mtcars)
tmp1 <- as.data.frame(effect("hp:wt", m1, vcov=vcov, se=TRUE,  xlevels=list(wt=c(2.2,3.2,4.2))))

ggplot(data=tmp, aes(x=hp, y=fit, colour=as.factor(wt))) +
geom_line() +
geom_ribbon(aes(ymin=lower, ymax=upper, fill=as.factor(wt)), alpha = 0.5) +
labs(colour="wt")

hccm协方差矩阵(来自汽车包装),带有选项:

library(car)
m2 <- lm(mpg ~ hp + wt + hp:wt, data=mtcars)
hccmfunc <- function(x) {  
return(hccm(x, type="hc0"))}
tmp2 <- as.data.frame(effect("hp:wt", m2, vcov=hccmfunc,   xlevels=list(wt=c(2.2,3.2,4.2))))

最后,多路聚类协方差矩阵(再次想象齿轮和圆柱是mtcars数据中的簇ID):

m3 <- lm(mpg ~ hp + wt + hp:wt, data=mtcars)
cluster.ids <- data.frame(i = mtcars$gear, j = mtcars$cyl)
mwfunc <- function(x) {return(cluster.vcov(x, cluster= cluster.ids))}
tmp <- as.data.frame(effect("hp:wt", m3, vcov=mwfunc, xlevels=list(wt=c(2.2,3.2,4.2))))

最后一个示例会抛出NaNs错误,但这是因为示例的细节。

答案 1 :(得分:0)

2021 年 6 月更新和效果包版本 4.2-0: 底层代码略有更改,因此需要按以下方式更改源代码:

trace(effects:::Effect.lm, edit = T) # this is not permanent but has to be redone every time RStudio is loaded
# change line 162 in the windows that opens from
V <- vcov.(mod, complete = FALSE) 
# to
change to V <- vcov.(mod)
# click save

在此更改后,您可以使用 Richard Benton 建议的方法稍作调整:现在是 vcov。 [带点] 而不仅仅是效果公式中的 vcov。

mwfunc <- function(x) {return(cluster.vcov(x, cluster= cluster.ids))}
tmp <- as.data.frame(effect("hp:wt", m3, vcov.=mwfunc, xlevels=list(wt=c(2.2,3.2,4.2))))