[英]Predict values of dataframe in R
嗨,我有一个巨大的数据框 ( df ),其名称是不同的 Tenor,在我的列中,每个 Tenor 都有值。 对于最后两个男高音,我有一些缺失的行,我想根据非缺失行的给定数据完成这些行。 我的数据框如下所示:
1095 1825 2555 3650 5475 7300 10950
0.00116034 0.00170552 0.00274189 0.00472176 0.00697495 NA NA
0.00112157 0.00188056 0.00295159 0.0050669 0.00728063 0.00816778 0.00842034
0.00138009 0.00225073 0.00339548 0.00549386 0.00780401 0.00871812 0.00897222
我一直在使用 predict() 和 lm。 我想获得那些缺失值。 抱歉这个基本问题,但我很着急,我已经被困了一个多小时。
提前致谢。
编辑我想用数据框创建一个线性模型,比如说 df2
df2 <-df[rowSums(is.na(df)) > 0,])
并使用 predict 找到 7300、10950 的缺失值。
编辑2:
感谢@Zheyuan Li 我已经取得了一些进展,但我无法获得我的预测数据,我尝试使用两个选项:
b<-setNames(stack(df2),c("value", "Tenor"))
data.lm <- lm(value~Tenor, data = b, na.action = na.exclude)
pred<-predict(data.lm)
如果我执行此代码,我会得到与 b 具有相同值的 pred。
另一方面,如果我使用以下代码,我会为所有预测值获得相同的值。
aov <- aov(data.lm,data=b)
pred<-predict(aov)
编辑3:
我已经修改了我的代码并删除了最后一列以使事情变得更容易。 现在我有以下数据:
1095 1825 2555 3650 5475 7300
0.00116034 0.00170552 0.00274189 0.00472176 0.00697495 NA
0.00112157 0.00188056 0.00295159 0.0050669 0.00728063 0.00816778
0.00138009 0.00225073 0.00339548 0.00549386 0.00780401 0.00871812
我的新代码如下所示:
setDT(df)
variables<-setdiff(names(df),c('7300',"DATE"))
y_var<-"7300"
Line<-function (train_dat, test_dat, variables, y_var, family = "gaussian")
{
fm <- as.formula(paste(y_var, " ~", paste(variables, collapse = "+")))
glm1 <- glm(fm, data = train_dat, family = family)
pred <- predict(glm1, newdata = test_dat)
return(pred)
}
df[is.na(`7300`),`7300`:=
Line(train_dat=df[!is.na(`7300`),],
test_dat=df[is.na(`7300`)],
variables,
y_var)
]
现在我收到以下错误:
Error in terms.formula(formula, data = data) :
invalid term in model formula
你知道如何解决吗?
我不确定这是否是您要查找的内容,但您可以通过以下方式使用示例数据集来估算一些缺失的数据
data(mtcars) #pulling in some data to help out
# setting up missing data -------------------------------------------------
set.seed(1)
setDT(mtcars) #i like to work in data.table
sa<-sample(2,nrow(mtcars),prob=c(.1,.9),replace=T)
mtcars[,mpg_na:=mpg]
mtcars[sa==1,mpg_na:=NA]
现在我们有一些缺失的数据!
mpg cyl disp hp drat wt qsec vs am gear carb mpg_na
1: 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 21.0
2: 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 21.0
3: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 22.8
4: 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 NA
5: 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 18.7
6: 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 18.1
7: 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 NA
# function to predict using linear model ----------------------------------------
Line<-function (train_dat, test_dat, variables, y_var, family = "gaussian")
{
fm <- as.formula(paste(y_var, " ~", paste(variables, collapse = "+")))
glm1 <- glm(fm, data = train_dat, family = family)
pred <- predict(glm1, newdata = test_dat)
return(pred)
}
variables<-setdiff(names(mtcars),c('mpg','mpg_na'))
y_var<-'mpg'
mtcars[!is.na(mpg_na),mpg_pred:=mpg] #setting up
mtcars[is.na(mpg_na),mpg_pred:=
Line(train_dat=mtcars[!is.na(mpg_na),],
test_dat=mtcars[is.na(mpg_na)],
variables,
y_var)
]
我们是怎么做的???
mpg cyl disp hp drat wt qsec vs am gear carb mpg_na mpg_pred
1: 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 21.0 21.00000
2: 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 21.0 21.00000
3: 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 22.8 22.80000
4: 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 NA 21.48683
5: 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 18.7 18.70000
6: 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 18.1 18.10000
7: 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 NA 16.91128
还有其他观察结果,但这里显示的两个(第 4 行和第 7 行)看起来相当接近
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.