2015-07-01 59 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可以避免此問題。

如果我沒有解決您的問題,請告訴我。

相關問題