2016-06-13 11 views
1

私は、semPLSパッケージ内の関数semplsを介して実行される部分最小二乗パスモデル(形成潜在変数と反射潜在変数の混合物)を持っています。モデル残差(潜在変数間の通常の最小二乗回帰によって生成される)の空間自己相関を調べたいが、最初にそれらを抽出する方法を理解しなければならない。 link to data filesempls {semPLS}(またはdensityplot {semPLS})から残差を抽出する方法は?

land2011g <- read.table("percover2011.csv", header=T, sep=',', row.names=1) 
land2011<-land2011g[c(1:2,4:16),] 
topaphids<-land2011[c('A.cracc','R.padi','A.nerii','T.trifolii','R.maidis', 
'Tetr.sp.','Pemphigus.sp.')] 
r1 <- land2011[c(1:3,128:131)] 
r1.s <- as.data.frame(scale(r1, center=T, scale=T)) 
r2 <- land2011[c(11:13,132:135)] 
r2.s <- as.data.frame(scale(r2, center=T, scale=T)) 
r3 <- land2011[c(21:23,136:139)] 
r3.s <- as.data.frame(scale(r3, center=T, scale=T)) 
r4 <- land2011[c(31:33,140:143)] 
r4.s <- as.data.frame(scale(r4, center=T, scale=T)) 
r5 <- land2011[c(41:43,144:147)] 
r5.s <- as.data.frame(scale(r5, center=T, scale=T)) 
weediness<-land2011[c('largest.total.cover.m2')] 
noncols<-land2011[c('total.noncols')] 

ifrom <- c("r1","r2","r3","r4","r5","weed.cover","aphids","aphids") 
ito<-c("aphids","aphids","aphids","aphids","aphids",'aphids',"prsv","wmv") 
inner.mod<-data.frame(ifrom,ito) 
inner.mat<-as.matrix(inner.mod) 

ofrom<-c('r1.corn.wheat','r1.soy','r1a.pasture.hay.grass', 
'r1a.urban','r1a.forest.shrub','r2.corn.wheat','r2.soy', 
'r2a.pasture.hay.grass','r2a.urban','r2a.forest.shrub',  
'r3.corn.wheat','r3.soy','r3a.pasture.hay.grass','r3a.urban', 
'r3a.forest.shrub','r4.corn.wheat','r4.soy','r4a.pasture.hay.grass', 
'r4a.urban','r4a.forest.shrub', 'r5.corn.wheat','r5.soy', 
'r5a.pasture.hay.grass','r5a.urban','r5a.forest.shrub', 
'weed.cover','aphids','prsv','wmv') 
oto<-c('r1','r1','r1','r1','r1','r2','r2','r2','r2','r2','r3','r3','r3', 
'r3','r3','r4','r4','r4','r4','r4','r5','r5','r5','r5','r5', 
'largest.total.cover.m2','total.noncols','arcsin.sqrt.PRSV', 
'arcsin.sqrt.WMV') 
outer.mod<-data.frame(ofrom,oto) 
outer.mat<-as.matrix(outer.mod) 

prsv<-land2011[c("arcsin.sqrt.PRSV")] 
wmv<-land2011[c("arcsin.sqrt.WMV")] 
subsets <- cbind(r1.s,r2.s,r3.s,r4.s,r5.s,weediness,topaphids, 
noncols,prsv,wmv) 

plspm11<-plsm(data=subsets, strucmod=inner.mat, measuremod=outer.mat) 

pmodp11<-sempls(plspm11, data=subsets, method="pearson", scaled=TRUE, 
maxit=100, convCrit="square") 

残差(pmodp11)関数は、 "NULL" の値を返します。

semPLSパッケージのdensityplot関数は私の残差をプロットするので、semplsオブジェクトに格納する必要があると仮定しますが、アクセス方法はわかりません。

densityplot(pmodp11, subsets, use=c("residuals")) 

density plot of sempls object pmodp11

私もsemPLSで残差予測に関連する次のコードを見つけ、それを使用しようとすると、私は、このエラーを与える:関数の後

Error in UseMethod("predict") : no applicable method for 'predict' applied to an object of class "sempls" .

residuals.sempls <- function(object, what=c("LVs", "MVs"), scale=c("scaled", "original"), total=FALSE){ 
    what <- match.arg(what) 
    scale <- match.arg(scale) 
    model <- object$model 
    data <- object$data 
    # LVs 
    if(what=="LVs"){ 
     res <- object$factor_scores - predict(object, what=what, scale=scale, total=total) 
    } 
    # MVs 
    else{ 
     if(scale=="scaled"){ 
     pdata <- predict(object, what=what, scale=scale, total=total) 
     res <- data - pdata 
     } 
     else{ 
     data <- rescale(data) 
     pdata <- predict(object, what=what, scale=scale, total=total) 
     res <- data - pdata 
     } 
    } 
    return(res) 
} 
+0

これを再現可能な例にすることができますか(エラーを再現できるように)? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example?noredirect=1#comment63050894_5963269 –

+0

確かに - 私はデータへのリンクと残りの部分を追加しました上のコード。 – GMA

答えて

0

予測します。 sempls(R-Forge_predict.semplsで定義されている)がresiduals.sempls関数に挿入されている場合、residuals.semplsはsemplsオブジェクトを使用してmオーデル残余。

residuals.sempls <- function(object, what=c("LVs", "MVs"), scale=c("scaled", "original"), total=FALSE){ 
    what <- match.arg(what) 
    scale <- match.arg(scale) 
    model <- object$model 
    data <- object$data 
    # LVs 
    if(what=="LVs"){ 
     res <- object$factor_scores - predict.sempls(object, what=what, scale=scale, total=total) 
    } 
    # MVs 
    else{ 
     if(scale=="scaled"){ 
     pdata <- predict.sempls(object, what=what, scale=scale, total=total) 
     res <- data - pdata 
     } 
     else{ 
     data <- rescale(data) 
     pdata <- predict.sempls(object, what=what, scale=scale, total=total) 
     res <- data - pdata 
     } 
    } 
    return(res) 
} 
関連する問題