繁体   English   中英

如何在R中预测成分数据

[英]How to predict compositional data in R

我有两组组成变量,一组在设备1上测量,另一组在设备2上测量。我想开发一个模型,将Device1的数据转换为Device2 为此,我想使用R的composition包。模型的构建似乎可以正常工作,但是我无法使用该模型预测旧数据的组合( OldData )。 如何获得OldData数据框中每个样本的预测组成? 我在下面提供了我的代码的可复制示例。 任何帮助将不胜感激。

#loading library
library(compositions)

#Generate data
Device1 <- data.frame(
x = runif(50, min = 0.2, max = 0.6), 
y = runif(50, min = 0.2, max = 0.5),   
z = runif(50, min = 0.1, max = 0.7))  
Device2 <- data.frame(
x = runif(50, min = 0.2, max = 0.6), 
y = runif(50, min = 0.2, max = 0.5),   
z = runif(50, min = 0.1, max = 0.7))  

#Make data compositional
dataset1 <- acomp(dataset1)
dataset2 <- acomp(dataset2)

#Model
mod <- lm(ilr(Y)~ilr(X), data=list(X=Device1, Y=Device2))
summary(mod)

#Generate data to be predicted
OldData <- data.frame(
x = runif(100, min = 0.2, max = 0.6), 
y = runif(100, min = 0.2, max = 0.5),   
z = runif(100, min = 0.1, max = 0.7))  

#Prediction of new compositions
ilrInv(predict(mod, X=OldData[1:100]))

该问题是由以下事实引起的:预测需要一个data.frame,并且其列具有lm fit中公式中提到的对象的确切名称。 成分回归模型对整个成分使用“集合名称”(X),而不是标识公式中的每个变量。 为了使预测在这种情况下起作用,我们需要创建一个data.frame,其中的适当名称列包含整个合成! 有几种方法可以做到这一点,例如:

# create a fake data.frame with the right number of rows
newdt = data.frame(placeholder=0*OldData$x)
# append a single column containing the whole composition
newdt$X = OldData
# now we can indeed call predict:
ilrInv(predict(mod, newdata=newdt))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM