R 根据可用的非缺失列数据应用正确的模型

R 根据可用的非缺失列数据应用正确的模型,r,R,示例数据: var1 <- matrix(sample(c(NA, 1:3), 10, replace = TRUE), 10,1) var2 <- matrix(sample(c(NA, 1:3), 10, replace = TRUE), 10,1) var3 <- matrix(sample(c(NA, 1:3), 10, replace = TRUE), 10,1) var4 <- matrix(sample(c(NA, 1:3), 10, replace = T

示例数据:

var1 <- matrix(sample(c(NA, 1:3), 10, replace = TRUE), 10,1)
var2 <- matrix(sample(c(NA, 1:3), 10, replace = TRUE), 10,1)
var3 <- matrix(sample(c(NA, 1:3), 10, replace = TRUE), 10,1)
var4 <- matrix(sample(c(NA, 1:3), 10, replace = TRUE), 10,1)
var5 <- matrix(sample(c(NA, 1:3), 10, replace = TRUE), 10,1)

NewDataframe <- as.data.frame(cbind(var1,var2,var3,var4,var5))
names(NewDataframe) <- c("var1","var2","var3","var4","var5")

NewDataframe[is.na(NewDataframe)] <- ""
par1 <- data.frame(var1=2,var3=5,var4=3)
par2 <- data.frame(var2=4,var5=7)
用正确的
par
variables
var1
atc预乘每行新数据帧。
par1
par2
不适用的行保留为空。如何处理这个问题?谢谢

我已经简化了您的一些代码,使用
predict()
作为自己进行矩阵乘法的更方便的替代方法

dataframe <- data.frame(y=rbinom(100,2,0.4),var1=rnorm(100,2,2),var2=rnorm(100,3,4),var3=rnorm(100,4,5),var4=rnorm(100,5,6),var5=rnorm(100,30,3))

model1 <- lm(y~var1+var3, data=dataframe)
model2 <- lm(y~var2+var4+var5, data=dataframe)

var1 <- matrix(sample(c(NA, 1:3), 100, replace = TRUE), 100,1)
var2 <- matrix(sample(c(NA, 1:3), 100, replace = TRUE), 100,1)
var3 <- matrix(sample(c(NA, 1:3), 100, replace = TRUE), 100,1)
var4 <- matrix(sample(c(NA, 1:3), 100, replace = TRUE), 100,1)
var5 <- matrix(sample(c(NA, 1:3), 100, replace = TRUE), 100,1)

NewDataframe <- as.data.frame(cbind(var1,var2,var3,var4,var5))
names(NewDataframe) <- c("var1","var2","var3","var4","var5")
生成两个向量,一个使用
model1
表示相关列中没有
NA
s的行,另一个使用
model2
表示所有其他行

y.hat1 <- predict(model1, newdata=NewDataframe[m1.ids, ])
y.hat2 <- predict(model2, newdata=NewDataframe[!m1.ids, ])

y.hat1如果我理解正确,您有两种模型:首选但变量更多(且
NA
的可能性更高),和不太详细(但对
NA
更稳健)。您希望有选择地选择估算值,首选第一个模型,如果无法获得估算值,则使用第二个模型。对吗?对,对。我要简化我的问题。希望这次我能做到正题!
y.hat1 <- predict(model1, newdata=NewDataframe[m1.ids, ])
y.hat2 <- predict(model2, newdata=NewDataframe[!m1.ids, ])
NewDataframe <- rbind(data.frame(NewDataframe[m1.ids,], y.hat=y.hat1),
                      data.frame(NewDataframe[!m1.ids,], y.hat=y.hat2))