首先,我使用RStudio。我有一个数据帧(APD),我想将w.r.t拟合到因子Serial_number。拟合是一种lm拟合。然后我想使用这个fit来做一个校准(calibrate() out of the investr package)。
以下是我的数据的示例图片:

下面是数据:Data
目前,我使用以下几行代码通过Serial_number进行拟合:
Coefficients<- APD %>%
group_by(Serial_number) %>%
do(tidy(fit<- lm(log(log(Amplification)) ~ Voltage_transformed, .)))但是在这里,我不能应用calibrate()-function。Calibrate函数需要一个继承自"lm“的对象。而tidy只适用于S3/S4对象。
你有什么想法吗?
发布于 2017-07-13 03:42:56
在您发布的代码中,您将尝试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(...)应该是不言而喻的: group by byvar,在每个子集上使用带有给定公式的lm,并且不要简化结果。简化结果真的只对交互式工作有用。在脚本中,最好确切地知道将返回什么。在本例中,是一个列表。
下一个函数combine_coefficients(...)返回拟合系数的matrix。它假设fit_list中的每个拟合模型都具有相同的项。我们可以添加逻辑使其更健壮,但在这种情况下似乎没有必要。
https://stackoverflow.com/questions/44835883
复制相似问题