- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想标准化生物数据集的变量。我需要使用不同的响应变量运行 glm、glm.nb 和 lm。
该数据集包含按地块划分的给定树种的数量(所有地块大小相同)和一系列定性变量:植被类型、土壤类型和牛的存在/不存在。
数据
library(standardize)
library(AICcmodavg)
set.seed(1234)
# Short version of the dataset missing other response variables
dat <- data.frame(Plot_ID = 1:80,
Ct_tree = sample(x = 1:400, replace = T),
Veg = sample(x = c("Dry", "Wet", "Mixed"), size = 80, replace = T),
Soil = sample(x = c("Clay", "Sandy", "Rocky"), size = 80, replace = T),
Cattle = rep(x = c("Yes", "No"), each = 5))
m1 <- standardize(formula = Ct_tree ~ 1, data = dat, family = "gaussian", scale = 1)
# Error in standardize(formula = Ct_tree ~ 1, data = dat, family = "gaussian": no variables in formula
m2 <- standardize(formula = Ct_tree ~ Veg, data = dat, family = "gaussian", scale = 1)
m3 <- standardize(formula = Ct_tree ~ Soil, data = dat, family = "gaussian", scale = 1)
m4 <- standardize(formula = Ct_tree ~ Cattle, data = dat, family = "gaussian", scale = 1)
m5 <- standardize(formula = Ct_tree ~ Veg + Soil, data = dat, family = "gaussian", scale = 1)
m6 <- standardize(formula = Ct_tree ~ Veg + Cattle, data = dat, family = "gaussian", scale = 1)
m7 <- standardize(formula = Ct_tree ~ Soil + Cattle, data = dat, family = "gaussian", scale = 1)
m8 <- standardize(formula = Ct_tree ~ Veg + Soil + Cattle, data = dat, family = "gaussian", scale = 1)
# m1_st <- standardize(formula = m1$formula, data = m1$data)
m2_st <- lm(formula = m2$formula, data = m2$data)
# [...]
m8_st <- lm(formula = m8$formula, data = m8$data)
# Produce a summary table of AICs
models <- list(Veg = m2_st, Soil = m3_st, Cattle = m4_st, VegSoil = m5_st, VegCattle = m6_st, SoilCattle = m7_st, VegSoilCattle = m8_st)
aic_tbl <- aictab(models, second.ord = TRUE, sort = TRUE)
最佳答案
我的回答可能有偏见。另外,我是生物学家而不是数学家,所以有更好数学背景的人可以给出更合理的答案。
第一个问题是为什么我们需要标准化?基本上,我们使用它是为了比较不同预测变量的效果大小。假设我们想估计植物质量 (M) 如何取决于土壤中的氮浓度 (N) 和水的可用性 (W)。将有两个具有不同单位和不同幅度的预测变量。两个预测变量都是连续的,这一点非常重要。我们可以从原始数据中估计回归系数。让我们假设最终的生物量可以表示为
M = 0.1 * N + 0.2 * W + 误差
那么,哪个因素更重要呢?当然,我们不能仅从这些系数中推断出这一点。为了进行比较,我们需要考虑因素的单位和可变性。因此,仅报告系数可能不足以了解您的创立。标准化可能是这种情况的解决方案。
现在让我们假设我们得到了相同的回归系数,但预测变量以前是标准化的。在这种情况下,很明显,当氮浓度变化 1 个标准偏差单位时,植物质量变化 0.1。水也是如此(每 1 sd 单位为 0.2 质量单位)。如果您的实验结合了广泛的水和氮条件,您可以建议水比氮重要两倍。因此,标准化对于比较连续预测变量的效果很有用。
在您的情况下,预测变量是分类的,即因素。您最初的问题是“不同条件组的树木数量是否不同?”。在这里,您的结果将有所不同。例如,粘土土壤上每块地的树木平均比沙质土壤多 50 棵树。这是一个很明显的结果。如果某些条件导致树木数量发生较大变化,则其影响会更大。所以似乎不需要标准化。
不过,您可以再问一个问题“50 棵树的差异是否很大?”。如果平均树数为 10000 棵树,那么增加 50 棵树是可以忽略的。但是如果每个地块平均有 100 棵树,那么变化真的很大。为了处理这样的问题,您可以标准化您的响应变量。因此,您将获得标准偏差单位的差异(类似于 Cohen 的 d)。
无论如何,标准化或不标准化的选择应该由您根据您在该领域的专业知识来决定。如果标准化能帮助你解释你的结果,那就去做吧。如果您认为标准偏差单位的差异更具说明性并且对您的读者更容易理解,那么就去做。
至于我,我建议保留原始值,但以相对单位 (%) 呈现结果。例如,粘土上的树木比沙土上的树木多 15%。但这又应该是你的决定。
作为结论:
base::scale
就足够了。 关于r - 标准化 R 中的定性变量以执行 glm、glm.nb 和 lm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53954875/
我对 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
我是一名优秀的程序员,十分优秀!