首先,我使用RStudio。 我有一个数据框(APD),我想将w.r.t与因子Serial_number相匹配。合身是合身的。然后我想用这个拟合进行校准(校准()来自investr-package。
以下是我的数据的示例图片:
以下是数据:Data
目前我通过Serial_number使用以下行:
Coefficients<- APD %>%
group_by(Serial_number) %>%
do(tidy(fit<- lm(log(log(Amplification)) ~ Voltage_transformed, .)))
但是在这里,我不能应用calibrate() - 函数。校准函数需要一个继承自&#34; lm&#34;的对象。并且整洁仅适用于S3 / S4对象。
你有什么想法吗?
答案 0 :(得分:1)
在您发布的代码中,您尝试从每个模型中rbind
预测值,而不是系数。系数函数只是coefficients(object)
。
我还建议取消嵌套代码,因为这会使以后难以阅读和更改。这里有两个通用函数(每个都做出假设,因此根据需要进行编辑):
lm_by_variable <- function(data_, formula_, byvar) {
by(
data_,
data_[[byvar]],
FUN = lm,
formula = formula_,
simplify = FALSE
)
}
combine_coefficients <- function(fit_list) {
all_coefficients <- lapply(fit_list, coefficients)
do.call('rbind', all_coefficients)
}
lm_by_variable(...)
应该是不言自明的:按byvar
分组,在每个子集上使用给定公式的lm
,而不是简化结果。简化结果实际上只对交互式工作有用。在脚本中,最好确切地知道将返回什么。在这种情况下,列表。
下一个函数combine_coefficients(...)
返回拟合系数的matrix
。它假设fit_list
中的每个拟合模型都具有相同的术语。我们可以添加逻辑以使其更加健壮,但在这种情况下似乎没有必要。