R:在'isat'中的连续和分类变量之间的相互作用。回归('获得'包)

时间:2015-07-01 12:12:53

标签: r

我想根据分类变量z计算y到x(连续)的微分响应。

在标准的lm设置中:

lm(y~ x:z)

但是,我希望在允许“获取”中的脉冲指示器饱和度(IIS)的同时执行此操作。包。但是,以下语法会产生错误:

isat(y, mxreg=x:z, iis=TRUE)

错误消息的格式为:

" solve.qr中的错误(out,tol = tol,LAPACK = LAPACK):   奇异矩阵' a'在'解决"

1:在x:z中:   数值表达式有96个元素:只使用第一个

2:在x:z中:   数值表达式有96个元素:只有第一个使用"

我应该如何修改语法?

谢谢!

1 个答案:

答案 0 :(得分:1)

目前,唉,isat并未在分类/字符变量上提供与lm相同的功能,也没有使用*:。我们希望在将来的版本中解决这个问题。

与此同时,您必须在数据集中创建表示交互的不同变量。我猜想有类似的事情......

    library(gets)
    N <- 100
    x <- rnorm(N)
    z <- c(rep("A",N/4),rep("B",N/4),rep("C",N/4),rep("D",N/4))
    e <- rnorm(N)
    y <- 0.5*x*as.numeric(z=="A") + 1.5*x*as.numeric(z=="B") - 0.75*x*as.numeric(z=="C") + 5*x*as.numeric(z=="D") + e

    lm.reg <- lm(y ~ x:z)

    arx.reg.0 <- arx(y,mxreg=x:z)

    data <- data.frame(y,x,z,stringsAsFactors=F)
    for(i in z[duplicated(z)==F]) {
      data[[paste("Zx",i,sep=".")]] <- data$x * as.numeric(data$z==i)
    }

    arx.reg.1 <- arx(data$y,mxreg=data[,c("x","Zx.A","Zx.B","Zx.C")])
    isat.1 <- isat(data$y,mc=TRUE,mxreg=data[,c("x","Zx.A","Zx.B","Zx.C")],max.block.size=20)

请注意,由于您要为每个类别创建虚拟对象,因此这些虚拟对象会导致您的解释变量矩阵的奇点(如果在我的示例中,isat会自动使用4个街区)。使用参数max.block.size可以避免此问题。

如果我没有解决你的具体问题,请告诉我。