- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题与估计 Malthusian growth model 中的人口增长率有关。 .作为一个玩具示例,考虑一个玩具数据集 df
:
structure(list(x= c(0L, 24L, 48L, 72L, 96L, 120L, 144L, 168L
), y = c(10000, 18744.0760659189, 35134.0387564953, 65855.509495469,
123440.067934292, 231377.002294256, 433694.813090781, 812920.856596808
)), .Names = c("x", "y"), row.names = c(NA, -8L), class = "data.frame")
y = 10000 * (e^(r * x))
r
.使用时
非线性 回归
nls()
:
fit <- nls(y ~ (10000 * exp(r*x)), data=df)
Error in getInitial.default(func, data, mCall = as.list(match.call(func, :
no 'getInitial' method found for "function" objects
lm()
fit <- lm(log(y) ~ (10000 * exp(r*x)), data=df)
Error in terms.formula(formula, data = data) :
invalid model formula in ExtractVars
glm()
合理的?
最佳答案
使用 lm()
请阅读 ?formula
正确指定公式。现在我将继续假设您已经阅读了该内容。
首先是你的模型,拍下后log
LHS 和 RHS 上的变换,变为:
log(y) = log(10000) + r * x
offset
在
lm
.
lm
像这样:
# "-1" in the formula will drop intercept
fit <- lm(log(y) ~ x - 1, data = df, offset = rep(log(10000), nrow(df)))
# Call:
# lm(formula = log(y) ~ x - 1, data = df, offset = rep(log(10000), nrow(df)))
# Coefficients:
# x
# 0.02618
fit
是长度为 13 的列表。请参阅
?lm
的“值”部分你会更好地了解它们是什么。其中,拟合值为
$fitted
,因此您可以通过以下方式绘制您的情节:
plot(df)
lines(df$x, exp(fit$fitted), col = 2, lwd = 2) ## red line
exp(fit$fitted)
,因为我们为
log(y)
拟合了一个模型现在我们要回到原来的规模。
fit <- lm(log(y/10000) ~ x - 1, data = df)
fit <- lm(log(y) - log(10000) ~ x - 1, data = df)
log(y)
但是
log(y/10000)
现在,所以当你制作情节时,你需要:
lines(df$x, 10000 * exp(fit$fitted), col = 2, lwd = 2)
nls()
nls()
是这样的:
nls(y ~ 10000 * exp(r * x), data = df, start = list(r = 0.1))
start
.
Error in nls(y ~ 10000 * exp(r * x), data = df, start = list(r = 0.1)) :
number of iterations exceeded maximum of 50
?nls
:
Warning:
*Do not use ‘nls’ on artificial "zero-residual" data.*
nls()
用于您的玩具数据集
df
不起作用。
lm()
中的拟合模型:
fit$residuals
# 1 2 3 4 5
#-2.793991e-16 -1.145239e-16 -2.005405e-15 -5.498411e-16 3.094618e-15
# 6 7 8
# 1.410007e-15 -1.099682e-15 -1.007937e-15
lm()
在这种情况下完全合适。
One last thing that I haven't been able to figure out is why the parameter
r
is not used inlm
's formula specification.
lm
之间的公式其实有些区别和
nls
.也许你可以这样理解:
lm()
的公式称为模型公式,您可以从?formula
阅读.它在 R 中非常基础。模型拟合例程使用它,例如 lm
, glm
, 而很多函数都有公式方法,比如 model.matrix
, aggregate
, boxplot
等nls()
的公式更像是一个函数规范,并没有被广泛使用。许多其他函数进行非线性迭代,如 optim
不会接受公式,而是直接接受函数。所以,请善待 nls()
作为特例。 So would it make sense to do it using the linear model? Simply what I am trying to model here is using Malthusian growth model.
nls()
给出真实的人口数据(当然有噪音)用于曲线拟合,或使用
glm(, family = poisson)
对于泊松响应,GLM 比拟合线性模型具有更好的基础。
glm()
调用您的数据将是:
glm(y ~ x - 1, family = poisson(), data = df, offset = rep(log(10000), nrow(df)))
log
转型是一个明显的胜利。在统计建模中,变量变换是
很常见 ,因此没有令人信服的理由拒绝使用线性模型来估计人口增长率。
glm()
,我们也可以试试:
glm(y ~ x - 1 + offset(log(10000)), family = gaussian(link="log"))
offset
规范,我们可以使用
offset
参数在
lm
/
glm
,或
offset()
Ben 的功能。
关于r - 使用 lm()、nls()(和 glm()?)估计马尔萨斯增长模型中的人口增长率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38001345/
我对 lm 的一些令人不安的行为感兴趣函数和相关的predict.lm R 中的函数。splines基础包提供函数bs生成 b 样条展开,然后可用于使用 lm 拟合样条模型,一个通用的线性模型拟合函数
我使用 minpack.lm 包中的 nls.lm 来拟合许多非线性模型。 由于初始参数估计时的奇异梯度矩阵,它经常在 20 次迭代后失败。 问题是当我在失败之前查看迭代(trace = T)时,我可
我有一个稍微进入饱和状态的外部校准曲线。所以我拟合了一个二阶多项式和一个测量样本的数据框,我想知道其中的浓度。 df_calibration=structure(list(dilution = c(0
我试图弄清楚默认 r plot 的残差与拟合图中使用了哪种平滑线对于 lm对象,所以我通过输入 ?plot.lm 查看了帮助页面,因为据我了解 .是如何定义不同对象类型的这些默认行为的。 正如预期的那
我正在尝试使用 R 创建一个线性模型并使用它来预测一些值。主题是棒球数据。如果我这样做: obp <- lm(offense$R ~ offense$OBP) predict(obp, newdata
我有两个变量,我想找到它们之间的相关性。问题是,根据我使用的方法,我似乎得到了不同的结果。 我知道的一种方法是使用 scale() 函数中的自变量和因变量运行 lm() 函数。 所以下面的变量看起来像
我在使用 C Makefile 时遇到了一些问题。 Makefile 的内容如下: PROJECT = 3D-ELM MPICC = mpicc CLAGS = -g -O3 LIBS = -lm S
我使用 caret R 包作为一个非常方便的建模包装器。虽然这是一个奇怪的用法,但在使用模型类型 =“lm”和“无”的交叉验证时,我在从模型中提取结果时遇到了一些麻烦。参见下面的示例: library
我想使用 lm 在 R 中拟合线性模型获得总模型拟合的系数估计值和 p 值 + p 值(类似方差分析),因此基本上来自 summary.lm 的输出. 问题是我想使用我自己的模型矩阵,而不是在调用 l
我建了一个 lm不使用 data= 的模型范围: m1 <- lm( mdldvlp.trim$y ~ gc.pc$scores[,1] + gc.pc$scores[,2] + gc.pc$sco
我是 R 的新手,我只是在学习 apply功能及其工作方式。我只想从 lm 中提取系数适合几年内产品颜色和品牌的变量 x。 我知道我可以创建一个 for 循环并按型号年份对数据进行子集化并拟合它,但我
如何计算 df 中存储在列中的多个变量的行向 lm()/系数? 我有这种数据(只是例子): set.seed(1) foo trialNumber Nr1 Nr2
我对在 ggplot2 中自动绘制模型很感兴趣。基于 discussion在 ggplot2 问题跟踪器上,我相信像下面这样的包装器应该可以工作。 geom_predict Warning: Com
我正在对多个属性(包括两个分类属性B和F)进行线性回归,但是我没有获得每个系数水平的系数值。 B具有9个级别,而F具有6个级别。当我最初运行模型(带有截距)时,我得到了8个B系数和5个F系数,我将其理
我一直试图弄清楚 subset R 中的参数 lm()功能有效。特别是以下代码对我来说似乎很可疑: data(mtcars) summary(lm(mpg ~ wt, data=mtcars))
我有以下数据框 > df df2 Economy ConditionA ConditionB ConditionC ConditionD 1 FRANCE 9
我正在使用来自包鼠标的男孩数据集的数据。当我对其中一个因子变量 (phb) 运行回归时,输出会显示这些因子,但给它们的名称与数据中的名称不同。我想知道为什么会这样。有没有办法纠正它? library(
通常,我和你(假设你不是机器人)很容易识别预测器是分类的还是定量的。例如,性别显然是分类的。您的最后一票可以分类。 基本上,我们可以轻松识别分类预测变量。但是当我们在 R 中输入一些数据时会发生什么,
我们从中得到了一个 lm 对象并想提取标准错误 lm_aaa<- lm(aaa~x+y+z) 我知道函数摘要、名称和系数。 但是,摘要似乎是手动访问标准错误的唯一方法。 你知道我怎么能输出se吗? 谢
我正在拟合一个模型来分解数据并进行预测。如果newdata中的predict.lm()包含模型未知的单个因子级别,则所有predict.lm()都会失败并返回错误。 有没有一种好方法可以让predic
我是一名优秀的程序员,十分优秀!