【问题标题】:Linear regression function malfunction线性回归函数故障
【发布时间】:2017-01-16 11:34:30
【问题描述】:
variables.null.model <- paste('utalter', 'lcsex', 'utcigreg', 'utbmi',    'month', sep = '+')
variables.full.model <- paste('utalter', 'lcsex', 'utcigreg', 'utbmi',   'month', 'ltedyrs','occ_status', 'marital_status', 'social_cat','GC_linc125_07', 'GC_linc250_07', 'GC_linc500_07', 'GC_linc1000_07', 'GC_linc5000_07', 'GC_pop500_08','utalkkon', 'activity', 'utpyrs', 'cvd', 'utmstati', 'utmfibra', 'utantihy', 'utmeddia', 'utmadins','utwhrat','ul_choln', sep='+')
pollutants_3 <- c('GC_PM10_09', 'GC_PM25_09', 'GC_Coarse_09', 'GC_BS25_09', 'GC_NOX_09', '$GC_NO2_09')

null <- paste(variables.null.model, pollutants_3, sep='+')
full <- paste(variables.full.model, pollutants_3, sep='+')

fun.model.summary <- function(x) {
formula    <- as.formula(paste("log_sfrp5 ~", x))
lm <- lm(formula, data = kalonji.na )
coef(summary(lm))
}

lm.summary <- lapply(full, fun.model.summary)

我正在处理一些空气污染数据,并希望运行线性回归函数并总结系数。我上面有以下代码,但出现此错误:

解析错误(文本 = x,keep.source = FALSE): :1:269: 意外的'$'

有什么办法可以解决这个问题吗?

【问题讨论】:

  • pollutants_3 由什么组成?而且我认为lapply(c(null, full), ...) 应该可以工作
  • 你的full变量是一个长度为1的字符向量。那么,你为什么要在上面使用lapply呢?
  • @Istrel 再看一遍,它的长度 > 1。
  • 老实说,你根本不应该在这里使用字符向量。 R 有更好的方法来构建公式。使用字符串是一个弯路,并且会导致导致错误的复杂性,如下所示。

标签: r


【解决方案1】:

您的最后一个污染物是'$GC_NO2_09'。注意流浪的$ 符号。

但正如我在评论中所说,我强烈建议不要在此处使用字符串1。通过 as.name 将字符串转换为 R 标识符,直接从 R 对象构造公式。

您可以使用Reducecall 将名称列表组合成一个总和。例如:

make_addition = function (lhs, rhs)
    call('+', lhs, rhs)

variables_null_model = c('utalter', 'lcsex', 'utcigreg', 'utbmi', 'month')
interaction_terms_full_model = Reduce(make_addition, lapply(variables_null_model, as.name))

fun_model_summary = function (x) {
    formula = call('~', quote(log_sfrp5), call('+', interaction_terms_full_model, as.name(x)))
    lm = lm(formula, data = kalonji_na)
    coef(summary(lm))
}

lm_summary = lapply(pollutants_3, fun_model_summary)

1 作为背景知识,这里使用字符串颠覆了类型系统,并用无类型的字符串替换了正确的、不同的类型。这被称为stringly typing,它是一种反模式,因为它隐藏了错误。您的问题就是此类错误的一个示例。

【讨论】:

    猜你喜欢
    • 2019-09-15
    • 2017-03-22
    • 1970-01-01
    • 2021-07-19
    • 2018-10-03
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    相关资源
    最近更新 更多