【问题标题】:Same R code not working with 2 different .csv files but same data structure相同的 R 代码不适用于 2 个不同的 .csv 文件,但数据结构相同
【发布时间】:2021-08-09 06:29:15
【问题描述】:

您好,我有 2 段代码,它们都在做同样的事情,一个是使用 R 附带的数据集,另一个是我创建的 .csv 文件,除了更多列之外,代码没有任何变化.csv 文件具有不同的名称,但由于某种原因我得到了错误的输出

此代码的 csv 文件位于此处 https://github.com/juandavidlozano/Data_1/blob/main/high_northell.csv

这是第一个代码

library(plyr)
library(readr)
library(dplyr)
library(caret)
library(ggplot2)
library(repr)

dat <- economics

drops <- c("date")
dat <- dat[ , !(names(dat) %in% drops)]


cols = c('pce', 'pop', 'psavert', 'uempmed')

pre_proc_val <- preProcess(dat[,cols], method = c("center", "scale"))


dat[,cols] = predict(pre_proc_val, dat[,cols])




###### Linear Regression


number_days = 10

dat <- as.data.frame(dat)
new_cols <- c('Intercept', paste0(cols, '_predict'))
dat[new_cols] <- NA

inds <- nrow(dat) - number_days




dat[(number_days+1):nrow(dat), new_cols] <- do.call(rbind, lapply(seq(inds), function(x) {
  lr = lm(unemploy ~ uempmed + psavert + pop + pce, data = dat[x:(x + number_days - 1), ])
  t(lr$coefficients)
}))

dat 数据框如下所示

前 10 行有一些 NA,这是因为变量 number_days 将前 X 行留空,然后用最后 X 天数据的线性回归模型的系数填充它,依此类推.

这个数据框是正确的,所有的列都有值。

第二个代码就是这个

library(plyr)
library(readr)
library(dplyr)
library(caret)
library(ggplot2)
library(repr)

dat<-read.csv("high_northell.csv", header = TRUE, stringsAsFactors=FALSE)

drops <- c("date")
dat <- dat[ , !(names(dat) %in% drops)]


cols = c("state_covid_death","kantar_state_tv_daily","VIX", "interest_urgent_care","CPI","SPY",                       
         "kantar_state_digital_daily", "Flu_indicator","covid_cases",               
         "Search.Cost","Display.Cost")

pre_proc_val <- preProcess(dat[,cols], method = c("center", "scale"))


dat[,cols] = predict(pre_proc_val, dat[,cols])




###### Linear Regression

number_days = 10

dat <- as.data.frame(dat)
new_cols <- c('Intercept', paste0(cols, '_predict'))
dat[new_cols] <- NA

inds <- nrow(dat) - number_days

dat[(number_days+1):nrow(dat), new_cols] <- do.call(rbind, lapply(seq(inds), function(x) {
  lr = lm(Total.Visits~ state_covid_death + kantar_state_tv_daily + VIX+    interest_urgent_care+   CPI+    SPY +kantar_state_digital_daily+    Flu_indicator   + covid_cases+  Search.Cost+    Display.Cost, data = dat[x:(x + number_days - 1), ])
  t(lr$coefficients)
}))

如您所见,代码相同,但在这种情况下,dat 数据框出于某种原因,某些列填充了 NA,有些列填充了 NA,并且到处都有数据,这个数据框应该看起来像顶部的那个,除前 X 行之外的所有列都应填充。

这是第二个代码的图片数据数据框

对导致此问题的原因有任何帮助吗?

【问题讨论】:

    标签: r dplyr lm


    【解决方案1】:

    由于奇异性,线性回归未能定义一些变量。

    对于给定的 10 天子集,这些变量在所有日子里都是恒定的,因此这些变量是完全多重共线性的,并且 X'X 矩阵是奇异的。

    【讨论】:

      猜你喜欢
      • 2020-12-15
      • 1970-01-01
      • 2022-10-01
      • 2022-11-21
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多