2015-07-01 58 views
0

我想根据分类变量z计算y对x(连续)的微分响应。R:'isat'回归中的连续变量和分类变量之间的相互作用('gets'包)

在标准LM设置:

lm(y~ x:z) 

不过,我想这样做,而在“获取”包允许脉冲指示灯饱和度(IIS)。然而,下面的语法产生一个错误:

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

该错误消息是以下形式:

“错误在solve.qr(下,TOL TOL =,LAPACK = LAPACK): 奇异矩阵'一个 '在' 解决”

1:在X:Z: 数值表达式具有96个元素:仅用于第一

2:X:Z: 数值表达式具有96个元素:仅第一次使用“

我该如何修改语法?

谢谢!

回答

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可以避免此问题。

如果我没有解决您的问题,请告诉我。

相关问题