线性回归函数故障

时间:2017-01-16 11:34:31

标签: r

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)

我正在研究一些空气污染数据,并希望运行线性回归函数并总结系数。我上面的代码如下,但是我收到了这个错误:

  

解析时出错(text = x,keep.source = FALSE):       :1:269:意外的'$'

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

1 个答案:

答案 0 :(得分:0)

您的最后一种污染物是'$GC_NO2_09'。请注意迷路$符号。

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

您可以使用Reducecall将名单列表合并为一笔。 E.g:

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,它是一种反模式,因为它隐藏了错误。你的问题是这种错误的一个例子。