估算具有聚类标准误差的模型的置信区间

时间:2013-11-10 23:09:01

标签: r predict standard-error

我试图在OLS回归中找到一种估算y的预测值的方法,其中x的特定值具有置信区间。我的模型包含一个交互项,我在模型中使用聚类标准误差和权重。

之前有一个类似的问题被问到并回答,我认为这可能是一个很好的起点:

robust standard errors in ggplot2

问题在于,当模型中存在交互项或权重时,此处提供的解决方案不起作用。当存在权重和交互项时,它确实产生结果。我发现这令人困惑,但我对R相对较新,我无法理解问题的根源。

在第二个和第三个例子(lm2& lm3)中,我得到“X%*%V中的错误:不符合的参数”。我对第三种情况中错误来源的最佳猜测是model.frame(lm3)不包含交互项。但我不知道我是否走在正确的轨道上,无法找到解决问题的方法。除此之外我不清楚如何在这个例子中将x1设置为特定值。当x设置为特定值时,有人可以帮我修改上面的代码或提供另一种方法来获取我预测的标准错误吗?

df <- data.frame(x1 = rnorm(100), x2 = rnorm(100), w1 = runif(100,0.1,2),y = rnorm(100), group = as.factor(sample(1:10, 100, replace=T))) 
        lm1 <- lm(y ~ x1+x2, data = df)
        lm2 <- lm(y ~ x1+x2, data = df, weight=w1)
        lm3 <- lm(y ~ x1*x2, data = df)
        lm4 <- lm(y ~ x1*x2, data = df, weight=w1)

        getvcov <- function(fm,dfcw,cluster) {
          library(sandwich);library(lmtest)
          M <- length(unique(cluster))   
          N <- length(cluster)           
          K <- fm$rank                        
          dfc <- (M/(M-1))*((N-1)/(N-K))  
          uj  <- apply(estfun(fm),2, function(x) tapply(x, cluster, sum));
          dfc*sandwich(fm, meat=crossprod(uj)/N)*dfcw
        }

        V <- getvcov(lm1,1,df$group)
        X <- as.matrix(model.frame(lm1))
        se <- predict(lm1,se=TRUE)$se.fit
        se_robust1 <- sqrt(diag(X %*% V %*% t(X)))

        V <- getvcov(lm2,1,df$group)
        X <- as.matrix(model.frame(lm2))
        se <- predict(lm2,se=TRUE)$se.fit
        se_robust2 <- sqrt(diag(X %*% V %*% t(X)))

        V <- getvcov(lm3,1,df$group)
        X <- as.matrix(model.frame(lm3))
        se <- predict(lm3,se=TRUE)$se.fit
        se_robust2 <- sqrt(diag(X %*% V %*% t(X)))

        V <- getvcov(lm4,1,df$group)
        X <- as.matrix(model.frame(lm4))
        se <- predict(lm4,se=TRUE)$se.fit
        se_robust4 <- sqrt(diag(X %*% V %*% t(X)))

0 个答案:

没有答案