R 中的似然比检验误差 - ANOVA 和 lrtest
Likelihood ratio test error in R - ANOVA and lrtest
我正在尝试 运行 使用 lrtest() 在 R 中进行似然比检验,但它一直给我无法修复的错误:
dat<-read.csv("file.csv", header=TRUE)
dat1<-glm(Contact~Density + Species, data=dat, family=binomial)
dat2<-glm(Contact~Density + Species + Mass, data=dat, family = binomial)
lrtest(dat1, dat2)
Error in UseMethod("logLik") :
no applicable method for 'logLik' applied to an object of class "data.frame"
> dat1
Call: glm(formula = Contact ~ Density + Species, family = binomial,
data = dat)
Coefficients:
(Intercept) Density SpeciesNN
-2.0615 0.2522 1.3870
Degrees of Freedom: 39 Total (i.e. Null); 37 Residual
Null Deviance: 54.55
Residual Deviance: 41.23 AIC: 47.23
> dat2
Call: glm(formula = Contact ~ Density + Species + Mass, family = binomial,
data = dat)
Coefficients:
(Intercept) Density SpeciesNN Mass
-2.5584 0.2524 1.4258 0.2357
Degrees of Freedom: 39 Total (i.e. Null); 36 Residual
Null Deviance: 54.55
Residual Deviance: 41.11 AIC: 49.11
According to this link,似然比检验可以使用ANOVA或者lrtest。我尝试了方差分析方法,测试产生了结果,这与我尝试使用 lrtest() 时不同。这两者是否可以互换,或者我是否会通过使用方差分析而不是 lrtest 错过任何有用的分析?
编辑:这是来自 file.csv 的数据集示例。
Density Species Mass Contact
1 2 NN 1.29 0
2 2 NN 2.84 1
3 2 NN 2.58 0
4 2 NN 2.81 1
5 2 NN 2.69 0
6 2 N 2.12 1
7 2 N 2.30 1
8 2 N 1.95 0
9 2 N 2.35 0
10 2 N 2.28 1
11 4 NN 0.90 0
12 4 NN 2.33 0
13 4 NN 0.81 1
14 4 NN 1.37 1
15 4 NN 1.01 1
16 4 N 1.94 0
17 4 N 2.49 0
18 4 N 2.13 0
19 4 N 1.90 0
20 4 N 1.46 0
我认为您的代码没有问题。您收到的错误表明 dat1 和 dat2 不是模型而是数据框。也许您没有正确执行代码的第 2 行和第 3 行?
建议您完全重新启动 R 并试试这个:
require(lmtest)
dat=structure(list(n = 1:20, Density = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), Species = structure(c(2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L), .Label = c("N", "NN"), class = "factor"), Mass = c(1.29, 2.84, 2.58, 2.81, 2.69, 2.12, 2.3, 1.95, 2.35, 2.28, 0.9, 2.33, 0.81, 1.37, 1.01, 1.94, 2.49, 2.13, 1.9, 1.46), Contact = c(0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L)), .Names = c("n", "Density", "Species", "Mass", "Contact"), class = "data.frame", row.names = c(NA, -20L))
dat1<-glm(Contact~Density + Species, data=dat, family=binomial)
dat2<-glm(Contact~Density + Species + Mass, data=dat, family = binomial)
lrtest(dat1, dat2)
如果它不起作用,唯一可能发生不同情况的地方是当您读入 csv 文件时。
这说明了为什么您应该让其他人更容易重现您的问题。特别是您应该允许其他人轻松加载一些示例数据。 Ale 甚至给了你一个 link 解释如何去做。
我正在尝试 运行 使用 lrtest() 在 R 中进行似然比检验,但它一直给我无法修复的错误:
dat<-read.csv("file.csv", header=TRUE)
dat1<-glm(Contact~Density + Species, data=dat, family=binomial)
dat2<-glm(Contact~Density + Species + Mass, data=dat, family = binomial)
lrtest(dat1, dat2)
Error in UseMethod("logLik") :
no applicable method for 'logLik' applied to an object of class "data.frame"
> dat1
Call: glm(formula = Contact ~ Density + Species, family = binomial,
data = dat)
Coefficients:
(Intercept) Density SpeciesNN
-2.0615 0.2522 1.3870
Degrees of Freedom: 39 Total (i.e. Null); 37 Residual
Null Deviance: 54.55
Residual Deviance: 41.23 AIC: 47.23
> dat2
Call: glm(formula = Contact ~ Density + Species + Mass, family = binomial,
data = dat)
Coefficients:
(Intercept) Density SpeciesNN Mass
-2.5584 0.2524 1.4258 0.2357
Degrees of Freedom: 39 Total (i.e. Null); 36 Residual
Null Deviance: 54.55
Residual Deviance: 41.11 AIC: 49.11
According to this link,似然比检验可以使用ANOVA或者lrtest。我尝试了方差分析方法,测试产生了结果,这与我尝试使用 lrtest() 时不同。这两者是否可以互换,或者我是否会通过使用方差分析而不是 lrtest 错过任何有用的分析?
编辑:这是来自 file.csv 的数据集示例。
Density Species Mass Contact
1 2 NN 1.29 0
2 2 NN 2.84 1
3 2 NN 2.58 0
4 2 NN 2.81 1
5 2 NN 2.69 0
6 2 N 2.12 1
7 2 N 2.30 1
8 2 N 1.95 0
9 2 N 2.35 0
10 2 N 2.28 1
11 4 NN 0.90 0
12 4 NN 2.33 0
13 4 NN 0.81 1
14 4 NN 1.37 1
15 4 NN 1.01 1
16 4 N 1.94 0
17 4 N 2.49 0
18 4 N 2.13 0
19 4 N 1.90 0
20 4 N 1.46 0
我认为您的代码没有问题。您收到的错误表明 dat1 和 dat2 不是模型而是数据框。也许您没有正确执行代码的第 2 行和第 3 行?
建议您完全重新启动 R 并试试这个:
require(lmtest)
dat=structure(list(n = 1:20, Density = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), Species = structure(c(2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L), .Label = c("N", "NN"), class = "factor"), Mass = c(1.29, 2.84, 2.58, 2.81, 2.69, 2.12, 2.3, 1.95, 2.35, 2.28, 0.9, 2.33, 0.81, 1.37, 1.01, 1.94, 2.49, 2.13, 1.9, 1.46), Contact = c(0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L)), .Names = c("n", "Density", "Species", "Mass", "Contact"), class = "data.frame", row.names = c(NA, -20L))
dat1<-glm(Contact~Density + Species, data=dat, family=binomial)
dat2<-glm(Contact~Density + Species + Mass, data=dat, family = binomial)
lrtest(dat1, dat2)
如果它不起作用,唯一可能发生不同情况的地方是当您读入 csv 文件时。
这说明了为什么您应该让其他人更容易重现您的问题。特别是您应该允许其他人轻松加载一些示例数据。 Ale 甚至给了你一个 link 解释如何去做。