在R中,当lm()我使用时,如果我na.action = na.pass在调用中设置lm(),那么在汇总表中,对于任何无法估计的系数都存在NA(因为在这种情况下缺少单元格).
但是,如果我只提取从摘要对象的系数,即使用summary(myModel)$coefficients或coef(summary(myModel)),那么NA的省略.
当我提取系数时,我希望包含NA,就像我打印摘要时一样.有没有办法做到这一点?
设置options(na.action = na.pass)似乎没有帮助.
这是一个例子:
> set.seed(534)
> myGroup1 <- factor(c("a","a","a","a","b","b"))
> myGroup2 <- factor(c("first","second","first","second","first","first"))
> myDepVar <- rnorm(6, 0, 1)
> myModel <- lm(myDepVar ~ myGroup1 + myGroup2 + myGroup1:myGroup2)
> summary(myModel)
Call:
lm(formula = myDepVar ~ myGroup1 + myGroup2 + myGroup1:myGroup2)
Residuals:
1 2 3 4 5 6
-0.05813 0.55323 0.05813 -0.55323 -0.12192 0.12192
Coefficients: (1 not defined because of singularities)
Estimate …Run Code Online (Sandbox Code Playgroud) 如果我在R中有一个线性模型的汇总表,我怎样才能得到仅与交互估计相关联的p值,或者只是组拦截等,而不必计算行数?
例如,对于lm(y ~ x + group)具有x连续和group分类的模型,lm对象的汇总表具有以下估计值:
我想找出一种方法将每个这些作为一组p值,即使组的数量或模型公式发生变化.也许汇总表以某种方式用于将行组合在一起的信息?
以下是具有两个不同模型的示例数据集.第一个模型有四组不同的p值我可能想单独得到,而第二个模型只有两组p值.
x <- 1:100
groupA <- .5*x + 10 + rnorm(length(x), 0, 1)
groupB <- .5*x + 20 + rnorm(length(x), 0, 1)
groupC <- .5*x + 30 + rnorm(length(x), 0, 1)
groupD <- .5*x + 40 + rnorm(length(x), 0, 1)
groupE <- .5*x + 50 + rnorm(length(x), 0, 1)
groupF <- .5*x + 60 + rnorm(length(x), 0, 1)
myData <- data.frame(x …Run Code Online (Sandbox Code Playgroud) 我有这个数据集:
x <- c(0, 40, 80, 120, 160, 200)
y <- c(6.52, 5.10, 4.43, 3.99, 3.75, 3.60)
Run Code Online (Sandbox Code Playgroud)
我使用lm()以下方法计算了线性模型
model <- lm(y ~ x)
Run Code Online (Sandbox Code Playgroud)
我想知道x如果我有新y值的预测值,例如ynew <- c(5.5, 4.5, 3.5),但如果我使用该predict()函数,它只计算新y值.
x如果我有新y值,如何预测新值?
基本上,一旦它是对数刻度,我不知道如何在我的数据上绘制最佳拟合线.我使用lm()和abline()在我的绘图上放置了一个线性回归趋势线,但是现在添加了log ="xy",这只会产生一条水平线.

这是我正在尝试做的一个非常简单的例子(但是这里完全没有这条线):
lengths = c(10000,3000,3005,3005,3010,20000)
counts = c(3,1,1,2,1,3)
line=lm(counts~lengths)
plot(lengths, counts, col="green", log="xy")
abline(line, col="blue")
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多我在类似问题上找到的东西(例如使用log10()和lines()),但他们没有使用我的数据.
请我出去!我感谢任何帮助!谢谢!
重复进行1000次重复采样我遇到了麻烦.我尝试使用replicate()来做到这一点,但它不起作用.有没有其他方法可以做到这一点?任何人都可以告诉我,如果这可能通过使用lapply完成?以下是我的代码:
#sampling 1000 betas0 & 1 (coefficients) from the data
get.beta=function(data,indices){
data=data[indices,] #let boot to select sample
lm.out=lm(y ~ x,data=data)
return(lm.out$coefficients)
}
n=nrow(data)
get.beta(data,1:n)
bootcoe=boot(data,get.beta,R=1000) #generate 1000 random samples
head(bootcoe$t) #look at the betas
Run Code Online (Sandbox Code Playgroud)
从上面的代码我可以通过随机抽样数据得到1000 betas0&1.而且我想做1000次以获得不同的测试版.除了replicate()之外我该怎么做呢?
我想有一个很好的关于我从lm()模型得到的残差的情节.目前我使用plot(model$residuals),但我希望有更好的东西.如果我尝试使用ggplot绘制它,我会收到错误消息:
ggplot2不知道如何处理类numeric的数据
lm在lapply使用weights参数调用时,我遇到了一种奇怪的行为.
我的代码包含一个公式列表,我在其中运行一个我调用的线性模型lapply.到目前为止,它正在运作:
dd <- data.frame(y = rnorm(100),
x1 = rnorm(100),
x2 = rnorm(100),
x3 = rnorm(100),
x4 = rnorm(100),
wg = runif(100,1,100))
ls.form <- list(
formula(y~x1+x2),
formula(y~x3+x4),
formula(y~x1|x2|x3),
formula(y~x1+x2+x3+x4)
)
res.no.wg <- lapply(ls.form, lm, data = dd)
Run Code Online (Sandbox Code Playgroud)
但是,当我添加weights参数时,我得到一个奇怪的错误:
res.with.wg <- lapply(ls.form, lm, data = dd, weights = dd[,"wg"])
Error in eval(extras, data, env) :
..2 used in an incorrect context, no ... to look in
Run Code Online (Sandbox Code Playgroud)
这就像如果...从lapply与被发生冲突... …
假设我们想做一个简单的“收入描述模型”。假设我们有三个组,北部、中部和南部(想想美国地区)。\n比较其他相似的组,假设北部的平均收入为 130,中部为 80,南部为 60。假设组规模相等,则平均值为90.
\n在(线性回归)模型中,应该有一种方法将系数报告为与总体平均值的差异(在多变量上下文中,\xe2\x80\x98所有其他都等于\xe2\x80\x99)并为每个系数获取一个:
\n$\\beta_{北} = 40$
\n$\\beta_{中心} = -10$
\n$\\beta_{南} = -30$
\n显然,要跳过拦截。
\n这对我来说似乎是最直观的。但我可以\xe2\x80\x99t在我的一生中弄清楚如何使用R\xe2\x80\x99s\xe2\x80\x98对比编码\xe2\x80\x99来得到这个。(而且,这似乎弄乱了变量名称)。
\n为我的模拟/mwe 设置参数
\nm_inc <- 90\nb_n <- 40\nb_c <- -10\nb_s <- -30\n\nsd_prop <- 0.5 #sd as share of mean\npop_per <- 1000 \nRun Code Online (Sandbox Code Playgroud)\n模拟数据
\n\nset.seed(100)\n\nn_income <- rnorm(pop_per, m_inc + b_n, (m_inc + b_n)*sd_prop)\nc_income <- rnorm(pop_per, m_inc + b_c, (m_inc + b_s)*sd_prop)\ns_income <- rnorm(pop_per, m_inc + b_s, (m_inc + b_s)*sd_prop)\n\nnoise_var <- rnorm(pop_per*3, 0, (m_inc + b_s)*sd_prop)\n\ni_df <- …Run Code Online (Sandbox Code Playgroud) 假设我想使用lm和factor作为右侧变量运行回归.选择因子中哪个级别为基本类别(排除以避免多重共线性的级别)的最佳方法是什么.请注意,我对排除拦截不感兴趣,因为我有很多因素.
我还想要一个基于公式的解决方案,而不是直接作用于data.frame的解决方案,尽管如果你认为你有一个非常好的解决方案,请发布它.
我的解决方案是:
base_cat <- function(x) c(x,1:(x-1),(x+1):100)
a_reg <- lm(y ~ x1 + x2 + factor(x3, levels=base_cat(30)) #suppose that x3 has draws from the integers 1 to 100.
Run Code Online (Sandbox Code Playgroud)
左边的类别lm是因子中的第一个级别,因此这只是重新排序级别,以便指定的级别是第一个级别base_cat(),然后将其余级别放在后面.
还有其他想法吗?
我是R的初学者.这是一个非常简单的代码,我试图保存剩余项:
# Create variables for child's EA:
dat$cldeacdi <- rowMeans(dat[,c('cdcresp', 'cdcinv')],na.rm=T)
dat$cldeacu <- rowMeans(dat[,c('cucresp', 'cucinv')],na.rm=T)
# Create a residual score for child EA:
dat$cldearesid <- resid(lm(cldeacu ~ cldeacdi, data = dat))
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
Error in `$<-.data.frame`(`*tmp*`, cldearesid, value = c(-0.18608488908881, :
replacement has 366 rows, data has 367
Run Code Online (Sandbox Code Playgroud)
我搜索了这个错误,但找不到任何可以解决这个问题的东西.另外,我为妈妈的EA创建了完全相同的代码,它保存了残差,没有错误.如果有人能帮我解决这个问题,我将不胜感激.