小编Fal*_*Guy的帖子

使用特征值来测试奇点:识别共线列

我试图使用特征值方法检查我的矩阵是否是奇异的(即,如果其中一个特征值为零,那么矩阵是奇异的).这是代码:

z <- matrix(c(-3,2,1,4,-9,6,3,12,5,5,9,4),nrow=4,ncol=3) 
eigen(t(z)%*%z)$values
Run Code Online (Sandbox Code Playgroud)

我知道特征值按降序排序.如果有办法找出特征值与矩阵中的哪个列相关联,有人可以告诉我吗?我需要删除共线列.

在上面的示例中可能很明显,但它只是一个示例,旨在为您节省创建新矩阵的时间.

r eigen

6
推荐指数
1
解决办法
3084
查看次数

选择R中没有缺失值的行

我是R和for循环的新用户.我试图从数据中取样并检查是否有共线柱.我想在该迭代中记录共线列存在并将其记录在向量中(baditr).另外,我想打印一行表示"colinearity is iteration i".然后我希望代码跳转到第二次迭代并继续运行.对于每次迭代,我希望代码保存矩阵的相应行中的列的总和.

我的问题是,我正在为不良迭代获得NA.我的目的是将错误的迭代完全包含在我的矩阵中.这是我的代码:

a0=rep(1,40)
a=rep(0:1,20)
b=c(rep(1,20),rep(0,20))
c0=c(rep(0,12),rep(1,28))
c1=c(rep(1,5),rep(0,35))
c2=c(rep(1,8),rep(0,32))
c3=c(rep(1,23),rep(0,17))
da=matrix(cbind(a0,a,b,c0,c1,c2,c3),nrow=40,ncol=7)
sing <- function(nrw){
  sm <- matrix(NA,nrow=nrw,ncol=ncol(da))
  baditr <- NULL
  for(i in 1:nrw){
    ind <- sample(1:nrow(da), nrow(da),replace =TRUE)
    smdat <- da[ind,]
    evals <- eigen(crossprod(smdat))$values
    if(any(abs(evals) < 1e-7)){
      baditr <- c(baditr,i)
      cat("singularity occurs at", paste(i),"\n")
      next
    }
  sm[i,] <- apply(smdat,2,sum)
  }
  return(sm)
}
sing(20)
Run Code Online (Sandbox Code Playgroud)

我将得到以下输出:

singularity occurs at 9 
singularity occurs at 13 
      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
 [1,]   40   23   22   25    5    8   26
 [2,] …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
5228
查看次数

R中函数内的函数

你可以向我解释为什么代码抱怨说Samdat找不到?

我试图在模型之间切换,所以我声明了一个包含这些特定模型的函数,我只需要将此函数作为函数中的一个参数调用,get.f其中重新采样将改变模型中每个设计矩阵的结构.代码抱怨Samdat发现时找不到.

另外,有没有办法可以创建条件语句if(Model == M1())而不必创建另一个参数M来设置if(M==1)

这是我的代码:

dat <-  cbind(Y=rnorm(20),rnorm(20),runif(20),rexp(20),rnorm(20),runif(20), rexp(20),rnorm(20),runif(20),rexp(20))
nam <- paste("v",1:9,sep="")
colnames(dat) <- c("Y",nam)

M1 <- function(){
    a1 = cbind(Samdat[,c(2:5,7,9)])
    b1 = cbind(Samdat[,c(2:4,6,8,7)])
    c1 = b1+a1
    list(a1=a1,b1=b1,c1=c1)}

M2 <- function(){
    a1= cbind(Samdat[,c(2:5,7,9)])+2
    b1= cbind(Samdat[,c(2:4,6,8,7)])+2
    c1 = a1+b1
    list(a1=a1,b1=b1,c1=c1)}

M3 <- function(){
    a1= cbind(Samdat[,c(2:5,7,9)])+8
    b1= cbind(Samdat[,c(2:4,6,8,7)])+8
    c1 = a1+b1
    list(a1=a1,b1=b1,c1=c1)}
#################################################################
get.f <- function(asim,Model,M){
    sse <-c()
    for(i in 1:asim){
        set.seed(i)
        Samdat <- dat[sample(1:nrow(dat),nrow(dat),replace=T),]
        Y <- Samdat[,1]
        if(M==1){ …
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
2
解决办法
3万
查看次数

根据主变量从R表中删除零

我在R中有这个数据集

dd=data.frame(
main=c("G","G","G","R","R","R","Y","Y","Y"),test=c(0,1,1,0,1,1,0,1,1),
a = c(1,0,0,2,0,0,3,0,0), b= c(0,3,0,0,6,0,0,4,0), c=c(0,0,5,0,0,8,0,0,9))
Run Code Online (Sandbox Code Playgroud)

我想看起来像这样

     main test a   b   c  
[1,] G 1 1 3 5
[2,] R 1 2 6 8
[3,] Y 1 3 4 9
Run Code Online (Sandbox Code Playgroud)

我有一些代码,但它不能正常工作.

你帮忙很多

r

-3
推荐指数
1
解决办法
70
查看次数

标签 统计

r ×4

eigen ×1