我正在运行ivreg,但由于多重共线性,我的数据矩阵是单数的。我想提取导致共线性的变量并再次执行ivreg。我尝试使用VIF(它没有工作),ALIAS(它只检测导致共线性但不能用于ivreg的列),...
我决定使用条件编号创建一个执行我想要的过程的函数。接下来是:
`estikappa<-function(reg,formula,data,crv,...){(if(kappa(reg)>crv)
{if(is.null(alias(reg)$Complete)==T)
{reg<-lm(formula,data)return(reg)}else{ld.vars<-attributes(alias(reg)$Complete)$dimnames[[1]]
formulan<-as.formula(paste(paste(deparse(formula),collapse = ""),
paste(ld.vars,collapse = "-"),
sep="-"))
regn<-lm(formulan,data)
reg<-regn
return(reg)}})
(if(kappa(reg)<-crv){reg<-lm(formula,data)
return(reg)})
}`
不幸的是,estikappa()仅适用于lm,而不适用于&#34; ivreg&#34;类。因此,我尝试手工制作2SLS(打字),但是&#34; Betas&#34;第二阶段和ivreg()是不同的,原因之一是我无法弄清楚。因此,我决定找到一种替代方法来提取导致多重共线性的变量,但我并不幸运。
任何帮助我都会非常感激。