OLS回帰でxの特定の値の信頼区間を使用してyの予測値を推定する方法を見つけようとしています。私のモデルには交互作用項が含まれており、モデルではクラスター化された標準誤差と重みを使用しています。
以前に同様の質問と回答がありましたが、これは良い出発点になると思いました。
問題は、モデルに交互作用項または重みがある場合、ここで提供されるソリューションが機能しないことです。重みと交互作用項の両方がある場合、結果が生成されます。これは紛らわしいと思いましたが、私はRに比較的慣れていないため、問題の原因を理解できませんでした.
2 番目と 3 番目の例 (lm2 & lm3) では、「Error in X %*% V : non-conformable arguments」というメッセージが表示されます。3 番目のケースのエラーの原因は、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)))