r - 可变长度不同帮助,lm回归和权重,变量具有相同的行数
问题描述
我正在尝试运行加权平方回归,在创建权重并尝试将其添加到回归函数后,我收到以下错误:
model.frame.default 中的错误(公式 = CO2_pc_cmice1 ~ GDP_pc_cmice1_C +:
可变长度不同(为“(权重)”找到)
该lm
模型有 31 行,我创建的权重也是 31,我检查了其中是否有NA
s 而没有。有一些负数,但如果这是问题,我会感到惊讶。我已经使用两者运行na.action = na.omit
公式na.action = na.exclude
我也在以 99 的样本进行回归运行,我遇到了同样的问题。
我的回归是
LinearCO2_lowerF <- (lm(CO2_pc_cmice1 ~ PolCiv_incPressFreedom_C + CorpInf_cmice1_C +
Gov_cmicepos1_C + LitGini_umice_C +
GDP_pc_cmice1_C + PopDensity_cmice1_C +
TradeOpen_cmice1_C + Urban_cmice1_C +
poly(Oil_coal_umice_C,2),
data = mydata_completemice2,
subset = IncomeL == "L"))
创建的权重
wtsco2low <- 1/fitted( lm(abs(residuals(LinearCO2_lowerF))~fitted(LinearCO2_lowerF)) )^2
以及权重回归
LinearCO2_lowerFw <- lm(CO2_pc_cmice1 ~ GDP_pc_cmice1_C + PolCiv_incPressFreedom_C +
CorpInf_cmice1_C + Gov_cmicepos1_C +
LitGini_umice_C + PopDensity_cmice1_C +
TradeOpen_cmice1_C + Urban_cmice1_C +
poly(Oil_coal_umice_C,2),
data = mydata_completemice2,
subset = IncomeL == "L",
weights = wtsco2low,
na.action = na.omit)
(也尝试过na.exlude
)
有人能帮忙吗?
解决方案
subset=
R 建模函数的参数适用于所有参数。因此,看起来您的权重向量正在被子集化。由于它已经是正确的长度,因此您会收到错误消息。
考虑这个例子:数据框有 30 行,但要分析的子集中只有 20 行,而我只有 20 个权重。如果我使用该subset=
参数,则权重会被子集化,并且会出现错误。
相反,您可以subset()
在将数据传递给之前使用它lm()
,这样就可以了。
> d<-data.frame(y=rnorm(30),x=1:30)
> w<-rep(2,20)
>
> lm(y~x,data=d, subset=x>10)
Call:
lm(formula = y ~ x, data = d, subset = x > 10)
Coefficients:
(Intercept) x
-0.3161 0.0189
> lm(y~x,data=d, subset=x>10, weights=w)
Error in model.frame.default(formula = y ~ x, data = d, subset = x > 10, :
variable lengths differ (found for '(weights)')
> lm(y~x,data=subset(d, x>10), weights=w)
Call:
lm(formula = y ~ x, data = subset(d, x > 10), weights = w)
Coefficients:
(Intercept) x
-0.3161 0.0189
```
推荐阅读
- string - PYQT5 无法将文件夹/文件目录的字符串连接在一起
- javascript - 如何获取 Javascript 中的所有标头?
- python - 自定义 csv writerow 以填充空值
- java - 在控制台上输入用户密码期间,显示星号(*)符号而不是纯文本
- javascript - 使用 CSS 切换导航栏而不是使用 JavaScript/jQuery
- python - 从不同的推文 URL 中查找 ID
- oracle - 当我在报告有一段时间没有运行后运行 ORACLE 12c 报告时,报告会等待 6 分钟,然后才决定执行任何操作
- ipython - 从协程内的 pudb 启动 IPython 交互式 shell 失败
- python - python 到 c++ 与 pybind
- r - R错误:不允许多参数返回,但没有多参数