Получение (возможно, вручную) доверительного интервала совпадений после использования пакета многоканальной кластеризации (multiwayvcov) - PullRequest
0 голосов
/ 18 сентября 2018

Я заинтересован в построении графиков с доверительными интервалами после использования пакета двусторонней кластеризации (multiwayvcov).

Вот мои воспроизводимые данные.

rm(list=ls(all=TRUE))
library(lmtest)
library(multiwayvcov)

dv<-c(1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0)
int1<-c(0.0123, 0.3428, 0.2091, 0.8325, 0.7113, 0.7401, 0.6009, 0.5062, 0.4841, 0.8912, 0.3850, 0.2463, 0.0625, 0.5374, 0.1984)
int2<-c(0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0)
cont<-c(3, 1, 2, 4, 6, 7, 1, 4, 3, 2, 4, 3, 6, 1, 3)
cluster1<-c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3)
cluster2<-c(1, 2, 3, 1, 2, 3, 1, 2, 1, 2, 1, 2, 3, 1, 2)

mydata<-as.data.frame(cbind(dv, int1, int2, cont, cluster1, cluster2))

Это моя некластерная модель:

result_lm <- lm(dv~int1+int2+cont,data=mydata)

Чтобы получить кластеризованные результаты, используя «cluster1» и «cluster2», я использую функции в пакете «lmtest» и «multiwayvcov» следующим образом.

cluster_vcov<-cluster.vcov(result_lm, ~cluster1+cluster2)
result_2c<-coeftest(result_lm, cluster_vcov) 

Здесь "cluster_vcov" - это просто дисперсионно-ковариационная матрица, а "result_2c" - это просто атомный вектор. Таким образом, я не могу использовать функцию «прогнозирования» для построения подгонок для нового набора данных («datagrid»), такого как

grid <- seq(0,1,.2)
datagrid <- data.frame(int1=rep(grid,2),
                   int2=c(rep(0,length(grid)),
                          rep(1,length(grid))))
datagrid$cont<-mean(mydata$cont, na.rm=T)

Прежде чем перейти к тому, что я сделал, вот что-то похожее, что я хотел бы получить в конце концов.

fits <- predict(result_lm,newdata=datagrid,interval="confidence")
plotdata <- data.frame(fits,datagrid)
plotdata$int2 <- plotdata$int2==1
ggplot(plotdata,aes(x=int1,y=fit,ymin=lwr,ymax=upr,color=int2)) + geom_line(aes(linetype = int2)) + geom_ribbon(alpha=.2) + theme(legend.position="none") + scale_color_manual(values=c("red", "darkgreen")) + scale_linetype_manual(values=c("dashed", "solid"))

Результат

enter image description here

Чтобы решить проблему, заключающуюся в том, что «result_2c» не дает фрейм данных, который можно напрямую использовать с «предикатом», я решил построить данные самостоятельно следующим образом.

d_twc_result<-data.frame(matrix(0, nrow =4, ncol = 4) )  
colnames(d_twc_result) <- c("Estimate","Std. Error","t value", "Pr(>|t|)") 
rownames(d_twc_result) <-c("(Intercept)", "int1","int2", "cont")

for (j in 1:4){
  for (i in 1:4){
    d_twc_result[i, j]<-result_2c[i,j]
  }
}

Затем, используя «d_twc_result $ Estimate», я генерирую вектор, который соответствует «подгонкам», которые можно получить после выполнения «предиката».

fits<-c(1:12) 
for (i in 1:12){
  fits[i]<-d_twc_result$Estimate[1]+
    d_twc_result$Estimate[2]*datagrid$int1[i]+
    d_twc_result$Estimate[3]*datagrid$int2[i]+
    d_twc_result$Estimate[4]*datagrid$cont[i]
 }

Тем не менее, я все еще не смог построить векторы для «lwr» и «upr», что требует «остатков» или «стандартной ошибки». На самом деле я застрял в том, что кажется невозможным получить «остатки» или «стандартную ошибку», потому что в наборе данных «datagrid» нет наблюдения за «dv».

Тем не менее, «предикат» работает с набором данных «сетка данных», поэтому я предполагаю, что плохо понимаю, как работает «прогнозирование» или концепция соответствия.

Буду очень признателен, если вы поможете мне получить «lwr» и «upr» (если мое понимание концепции соответствия неверно). Спасибо за любой комментарий заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...