r - R中lm的数据集大小限制
问题描述
我一直在努力解决 lm 在 R 中的一个问题,并认为我会分享我的发现并询问人们对此的看法。
我在一些数据上拟合了一个线性模型,这些数据清楚地表明了非常强的线性关系。然而,我很惊讶得到糟糕的结果(r2 ~ 0.46)。我的数据刚刚超过 6000 行。然后我运行相同的代码,但在数据样本上运行,我得到了我期望的结果(r2 ~ 0.99)。所以我想,好吧,可能有一个奇怪的地方把一切都搞砸了(尽管当我运行经典的数据质量检查时没有什么明显的)。我努力寻找那一点无济于事。但后来我意识到:这不是由于给定的点,而是由于数据集的大小。
就我而言(我正在使用 Azure 计算实例,16G RAM),限制为 n=4096。
我在下面创建了一段测试代码,它揭示了问题(再次:在我的机器上)。是的,这是一个非常愚蠢的例子,但这不是问题;)
# set some coefficient values
some.noise <- 100
coef_ <- 3.8
interc_ <- -1.2
# set sample size (no. of rows)
n.sample <- 4096
# very basic linear relation with some noise
feature <- runif(n = n.sample, min = 0, max = 200)
outcome <- (coef_*feature + interc_) + runif(n=n.sample, max=some.noise)
df_ <- tibble(feat = feature, tar = outcome)
ggplot(df_) + geom_point(aes(x=feat, y=tar))
lm_ <- lm(tar ~ feat, data=df_)
summary(lm_)
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 23.662659 1.429095 16.56 <2e-16 ***
# feat 4.167374 0.006125 680.44 <2e-16 ***
# ---
#
# Multiple R-squared: 0.966, Adjusted R-squared: 0.966
# now the same as above, with just one more row
n.sample <- 4097
feature <- runif(n = n.sample, min = 0, max = 200)
outcome <- (coef_*feature + interc_) + runif(n=n.sample, max=some.noise)
df_ <- tibble(feat = feature, tar = outcome)
ggplot(df_) + geom_point(aes(x=feat, y=tar))
lm_ <- lm(tar ~ feat, data=df_)
summary(lm_)
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) -825.0953 42.1167 -19.59 <2e-16 ***
# feat 8.3911 0.1822 46.05 <2e-16 ***
#
# Multiple R-squared: 0.467, Adjusted R-squared: 0.4669
所以这是我的问题:
- 有谁知道发生了什么?这与lm从QR切换到LU分解的问题有关吗?如果是这样,我觉得奇怪的是结果如此不同
- 更重要的是,有没有办法知道?我的意思是,如果不是这样一个明显的案例(潜在的线性关系),我永远不会发现。现在我想知道过去有多少次我得出结论说合身真的很差,而实际上这是一个数字问题......
我很想听听专家对此的看法。
提前致谢!
解决方案
推荐阅读
- bash - 在jq中的单引号上拆分字符串
- javascript - Unsplash API 触发下载
- domain-driven-design - 是否允许在构造时修改值对象的值
- .net-core - 具有管理员权限的 .net 核心应用程序看不到 USB 闪存驱动器
- office-js - 删除事件处理程序excel javascript api
- swift - 使用 Swift 为核心图像过滤器添加价值
- c# - 如何使用属性网格编辑winform UserControl的复杂属性
- c++ - 未声明的标识符 - C++
- python - 无法在 Python 中使用 Selenium 访问弹出式登录表单
- android - 如果用户的密码直接在 Azure B2C 中更改,如何在我的 xamarin.forms 应用程序中知道。我正在使用 MSAL