r - 如何预测 R 中的成分数据
问题描述
我有两组成分变量,一组在设备 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]))
解决方案
问题是由于 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))
推荐阅读
- python - Python Google Drive API 下载私人文件 Google 登录屏幕
- google-sheets - 如何将数据从一个电子表格导入另一个 Google 表格?
- c# - 获取数组中数字的匹配索引
- apache-spark - 列名更改和数据类型更改时如何读取 Spark DF 中的数据
- c - 重复调用 inet_ntop() 函数
- python - 访问烧瓶模板中由外键连接的表中的值
- python-3.x - 如何使用授权 API 设置部分身份验证
- go - Gorm extra where 1 <> 1 in many2many
- postgresql - PostgreSQL 计算拆分后的前缀组合
- asp.net-core - .Net Core 2.2 File.ReadAllBytes(fileName) 为 UNC 路径抛出 System.UnauthorizedAccessException