【问题标题】:How to predict compositional data in R如何预测 R 中的成分数据
【发布时间】:2018-07-13 13:42:15
【问题描述】:

我有两组成分变量,一组在设备 1 上测量,另一组在设备 2 上测量。我想开发一个模型来将Device1 的数据转换为Device2。为此,我想使用 R 的组合包。模型的构建似乎工作正常,但我无法使用此模型预测旧数据 (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]))

【问题讨论】:

    标签: r regression prediction


    【解决方案1】:

    问题是由于 predict 需要一个 data.frame ,其中的列具有 lm 拟合中公式中提到的对象的确切名称。成分回归模型对整个成分使用“集体名称”(X),而不是识别公式中的每个变量。为了让 predict 在这种情况下工作,我们需要创建一个 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-21
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 2019-12-25
      相关资源
      最近更新 更多