簡體   English   中英

預測 R 中數據幀的值

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM