相关疑难解决方法(0)

使用粘贴公式创建的lme拟合无法进行anova测试

我经常指定公式参数来模拟拟合函数,lm或者lme将我需要的部分粘贴在一起,就像@DWin对这个问题的回答一样:理解lm和环境.

在实践中,这看起来像这样:

library(nlme)
set.seed(5)
ns <- 5; ni <- 5; N <- ns*ni
d <- data.frame(y=rnorm(N),
                x1=rnorm(N),
                x2=factor(rep(1:ni, each=ns)),
                id=factor(rep(1:ns, ni)))

getm <- function(xs) {
  f <- paste("y ~", paste(xs, collapse="+"))
  lme(as.formula(f), random=~1|id, data=d, method="ML")
}
m1 <- getm("x1")
m2 <- getm(c("x1", "x2"))
Run Code Online (Sandbox Code Playgroud)

但是,lmenlme包中,比较使用方式构造的两个模型anova不起作用,因为anova.lme查看保存的公式参数以确保模型适合相同的响应,并且保存的公式参数很简单as.formula(f).错误是:

> anova(m1, m2)
Error in inherits(object, "formula") : object 'f' not found
Run Code Online (Sandbox Code Playgroud)

这是anova命令应该做的(重新安装模型以使其工作):

> m1 <- lme(y~x1, random=~1|id, …
Run Code Online (Sandbox Code Playgroud)

r

8
推荐指数
1
解决办法
2768
查看次数

了解lm和环境

我执行lm()带参数formula,data,na.action,和weights.我的权重存储在数字变量中.

  • 当我将公式指定为一个字符(即formula = "Response~0+.")时,我得到一个错误,即权重不是合适的长度(即使它是).
  • 当我指定没有引号(即formula = Response~0+.)的公式时,该函数工作正常.

我在lm()文档中偶然发现了这句话:

所有权重,子集和偏移量的计算方式与公式中的变量相同,即首先在数据中,然后在公式的环境中.

这对我来说很难解释,但我觉得它包含了我的问题的答案.

r lm

6
推荐指数
2
解决办法
1691
查看次数

将 `lm` 结果传递给 `stepAIC` 在脚本中工作,在函数内部失败

MASS::stepAIC函数将lm结果作为参数并进行逐步回归以找到“最佳”模型。以下代码非常简单且有效:

library(MASS)
data("mtcars")

lm1 = lm(mpg ~ ., mtcars)
step1 = stepAIC(lm1, direction = "both", trace = FALSE)

Run Code Online (Sandbox Code Playgroud)

我试图把它放在一个函数中。最终我想做更多的事情,但是当包裹在一个函数中时,我什至无法让这两行代码工作:

fit_model = function(formula, data) {
  full_model = lm(formula = formula, data = data)
  step_model = stepAIC(full_model, direction = "both", trace = FALSE)
  return(step_model)
}

step2 = fit_model(mpg ~ ., mtcars)
Run Code Online (Sandbox Code Playgroud)
Error in eval(predvars, data, env) : 
  invalid 'envir' argument of type 'closure' 
Run Code Online (Sandbox Code Playgroud)

我在跑:

R version 3.6.2 (2019-12-12)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 19.1
Run Code Online (Sandbox Code Playgroud)

r function

5
推荐指数
1
解决办法
83
查看次数

函数内的公式错误

我想用survfit()basehaz()一个函数里面,但他们没有工作.你能看看这个问题吗?谢谢你的帮助.以下代码导致错误:

library(survival)

n <- 50      # total sample size
nclust <- 5  # number of clusters
clusters <- rep(1:nclust,each=n/nclust)
beta0 <- c(1,2)
set.seed(13)
#generate phmm data set
Z <- cbind(Z1=sample(0:1,n,replace=TRUE),
       Z2=sample(0:1,n,replace=TRUE),
       Z3=sample(0:1,n,replace=TRUE))
b <- cbind(rep(rnorm(nclust),each=n/nclust),rep(rnorm(nclust),each=n/nclust))
Wb <- matrix(0,n,2)
for( j in 1:2) Wb[,j] <- Z[,j]*b[,j]
Wb <- apply(Wb,1,sum)
T <- -log(runif(n,0,1))*exp(-Z[,c('Z1','Z2')]%*%beta0-Wb)
C <- runif(n,0,1)
time <- ifelse(T<C,T,C)
event <- ifelse(T<=C,1,0)
mean(event)
phmmd <- data.frame(Z)
phmmd$cluster <- clusters
phmmd$time <- time
phmmd$event <- event

fmla <- as.formula("Surv(time, …
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
1
解决办法
5700
查看次数

标签 统计

r ×4

function ×1

lm ×1