gpt4 book ai didi

r - 当所有出现的自变量均为 NA 时的线性模型

转载 作者:行者123 更新时间:2023-12-02 23:08:06 25 4
gpt4 key购买 nike

我正在寻找有关当自变量/解释变量的所有出现均为 NA(即下面的 x3)时如何处理线性回归中的 NA 的建议。

我知道明显的解决方案是从模型中排除相关的自/解释变量,但我正在循环多个区域,并且不希望每个区域有不同的函数形式

下面是一些示例数据:

set.seed(23409)
n <- 100

time <- seq(1,n, 1)
x1 <- cumsum(runif(n))
y <- .8*x1 + rnorm(n, mean=0, sd=2)
x2 <- seq(1,n, 1)
x3 <- rep(NA, n)
df <- data.frame(y=y, time=time, x1=x1, x2=x2, x3=x3)

# Quick plot of data
library(ggplot2)
library(reshape2)
df.melt <-melt(df, id=c("time"))

p <- ggplot(df.melt, aes(x=time, y=value)) +
geom_line() + facet_grid(variable ~ .)
p

我已阅读 lm 的文档并尝试了各种 na.action 设置,但没有成功:

lm(y~x1+x2+x3, data=df, singular.ok=TRUE)

lm(y~x1+x2+x3, data=df, na.action=na.omit)
lm(y~x1+x2+x3, data=df, na.action=na.exclude)

lm(y~x1+x2+x3, data=df, singular.ok=TRUE, na.exclude=na.omit)
lm(y~x1+x2+x3, data=df, singular.ok=TRUE, na.exclude=na.exclude)

有没有一种方法可以让 lm 无错误地运行,并简单地返回一个系数来反射(reflect)相关变量缺乏解释力(即零或 NA)?

最佳答案

这是一个想法:

set.seed(23409)
n <- 100

time <- seq(1,n, 1)
x1 <- cumsum(runif(n))
y <- .8*x1 + rnorm(n, mean=0, sd=2)
x2 <- seq(1,n, 1)
x3 <- rep(NA, n)
df <- data.frame(y=y, time=time, x1=x1, x2=x2, x3=x3)

replaceNA<-function(x){
if(all(is.na(x))){
rep(0,length(x))
} else x

}

lm(y~x1+x2+x3, data= data.frame(lapply(df,replaceNA)))
Call:
lm(formula = y ~ x1 + x2 + x3, data = data.frame(lapply(df, replaceNA)))

Coefficients:
(Intercept) x1 x2 x3
0.05467 1.01133 -0.10613 NA

lm(y~x1+x2, data=df)
Call:
lm(formula = y ~ x1 + x2, data = df)

Coefficients:
(Intercept) x1 x2
0.05467 1.01133 -0.10613

因此,您将仅包含 NA 的变量替换为仅包含 0 的变量。您得到系数值 NA,但模型拟合的所有相关部分都是相同的(期望 qr 分解,但如果需要相关信息,可以轻松修改)。请注意,组件 summary(fit)$alias(请参阅 ?alias)可能有用。

这似乎与您的其他问题相关:Replace lm coefficients in [r]

关于r - 当所有出现的自变量均为 NA 时的线性模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15397510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com