如何在R语言中计算变量出现次数

4

对于模拟数据,我希望找出VIF。我还想知道在不同的迭代中有多少次变量出现了VIF>10。

    for (i in 1:10){
     z1<-rnorm(1000,0,1)
     z2<-rnorm(1000,0,1)
     z3<-rnorm(1000,0,1)

          x1<-z1
          x2<-z1*2+z2
          x3<-z2+z3
          X<-cbind(x1,x2,x3)
          sx<-scale(X)/sqrt(999)

      for(v in 1:ncol(X)){
          R2<-summary(lm(X[,v]~X[,-v]))$r.squared  
          vif<-1/(1-R2)
          if(vif>10) 
            cname<-as.data.frame(colnames(X)[v])
            table(cname)
      }
    } 

提前感谢您。


X来自哪里,模拟在哪里?请确保可重复。 - Roland
请通过提供可重现的示例(即代码和示例数据)来帮助我们帮助您,详情请参见https://dev59.com/eG025IYBdhLWcg3whGSx。 - Paul Hiemstra
已添加最小工作代码。谢谢。 - itfeature.com
1个回答

1
如果我理解正确,您需要这个。
set.seed(12345)
SimNo <- 10
mat <- matrix(data=NA, nrow=SimNo, ncol=3, byrow=TRUE)
for (i in 1:SimNo){
     z1<-rnorm(1000,0,1)
     z2<-rnorm(1000,0,1)
     z3<-rnorm(1000,0,1)

          x1<-z1
          x2<-z1*2+z2
          x3<-z2+z3
          X<-cbind(x1,x2,x3)
          sx<-scale(X)/sqrt(999)

      for(v in 1:ncol(X)){
          R2<-summary(lm(X[,v]~X[,-v]))$r.squared
          vif<-1/(1-R2)
          if(vif>10) mat[i, v] <- 1 else mat[i, v] <- 0
      }
    }
mat



      [,1] [,2] [,3]
 [1,]    0    1    0
 [2,]    0    0    0
 [3,]    0    1    0
 [4,]    0    1    0
 [5,]    0    0    0
 [6,]    0    0    0
 [7,]    0    0    0
 [8,]    0    1    0
 [9,]    0    1    0
[10,]    0    1    0

colSums(mat)

[1] 0 6 0

感谢您的帮助。如果将变量名作为标题,例如x1 x2 x3 // 0 6 0,它将得到改进。 - itfeature.com
如果@itfeature.com能帮你解决问题,请考虑通过检查勾号将其视为正确答案。谢谢。 - MYaseen208

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接