[英]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.