我需要在一个相对较大的数据框架上运行逻辑回归,其中包含480个条目和3个固定效果变量.固定效应var A有3233级,var B有2326级,var C有811级.总而言之,我有6370个固定效果.数据是横截面的.如果我不能使用正常glm
函数运行此回归,因为回归矩阵对于我的记忆来说似乎太大了(我得到消息" Error: cannot allocate vector of size 22.9 Gb
").我正在寻找在我的Macbook Air(OS X 10.9.5 8GB RAM)上运行此回归的替代方法.我也可以访问具有16GB RAM的服务器.
我试过用几种不同的方法解决这个问题,但到目前为止还没有取得令人满意的结果:
LFE/felm:使用的felm回归函数lfe
包减去运行回归之前固定的效果.这完美地工作,并允许我在几分钟内将上述回归作为正常线性模型运行.但是,lfe
不支持逻辑回归和glms.所以felm非常适合了解不同模型的模型拟合,但不适用于最终的逻辑回归模型.
biglm/bigglm:我想过bigglm
用来将我的功能分解成更易于管理的块.然而,若干来源(例如link1,link2,link3)提到为了使其起作用,因子级别需要在块之间保持一致,即每个块必须包含每个因子变量的每个因子中的至少一个.因子A和B包含仅出现一次的级别,因此我无法将这些集合拆分为具有一致级别的不同块.如果我删除固定效应A的10个因子和B的8个因子(微小的变化),我将只剩下4个级别的因子,并且将我的数据分成4个块将使其更易于管理.然而,我仍然需要弄清楚如何对我的df进行排序,以确保我的480.000条目被分类为4个块,其中3个因子中的每个因子的每个因子级别出现至少一次.
GlmmGS/glmgs:glmmgs
具有相同名称的包中的函数执行固定效果减法,如lfe
使用"Gauss-Seidel"算法的逻辑回归包.不幸的是,该包已不再开发.对R来说比较新,没有深入的统计经验,我无法理解输出,也不知道如何以一种能给我正常"效果大小","模型拟合","模型拟合"的方式对其进行转换.显着性区间"glm回归摘要提供的指标.
我给包的作者发了一条消息.他们回应如下:
该包不提供与glm对象相同格式的输出.但是,在给定当前输出的情况下,您可以轻松计算大部分拟合统计量(估计的标准误差,拟合度)(在CRAN版本中,我相信当前输出是系数估计的向量,以及相关的向量标准误差;协方差分量相同,但如果你没有随机效应拟合模型,你不必担心它们).只要注意用于计算标准误差的协方差矩阵是与Gauss-Seidel算法相关的精度矩阵的对角线块的倒数,因此它们倾向于低估联合似然的标准误差.我不再维护包裹,我没有时间详细说明; 包装背后的开创性理论可以在手册中引用的论文中找到 ,其他一切都需要用笔和纸来制定:).
如果任何人都可以解释如何"轻松计算大部分拟合统计数据",使得没有任何统计学教育的人能够理解它(可能是不可能的)或者提供R代码,以示例如何实现这一点,我将是非常感谢!
Revolution Analytics:我在一台模拟Mac上的Windows 7的虚拟机上安装了革命分析企业.该程序具有一个被调用的函数RxLogit
,该函数针对大型逻辑回归进行了优化.使用RxLogit
我得到的功能the error (Failed to allocate 326554568 bytes. Error in rxCall("RxLogit", params) : bad allocation)
,所以该功能似乎也遇到了内存问题.但是,该软件使我能够在分布式计算集群上运行回归.所以我可以通过在具有大量内存的集群上购买计算时间来"解决问题".但是,我想知道革命分析程序是否提供了我不知道的任何公式或方法,这将允许我做某种类似的lfe
固定效果减法操作或类似的bigglm …
我目前正在计算glm
大型数据集的模型.两者glm
甚至speedglm
需要数天来计算.
我目前有大约3M观测值和总共400个变量,其中只有一些用于回归.在我的回归我使用4个整数独立变量(iv1
,iv2
,iv3
,iv4
),1个二进制独立变量作为因子(iv5
),相互作用项(x * y
其中x
是整数并且y
是一个二进制伪变量作为因子).最后,我有多年的固定效应ff1
和公司ID ff2
.我有15年和3000个公司.我通过添加它们作为因素来介绍固定效果.我观察到,尤其是3000公司固定效应使计算速度很慢stats
glm
,也speedglm
.
因此,我决定尝试使用Microsoft R rxGlm
(RevoScaleR),因为它可以解决更多线程和处理器内核问题.实际上,分析的速度要快得多.此外,我将子样本的结果与标准样本进行了比较,glm
并将它们匹配.
我使用了以下功能:
mod1 <- rxGlm(formula = dv ~
iv1 + iv2 + iv3+
iv4 + iv5 +
x * y +
ff1 + ff2,
family = binomial(link = "probit"), data = dat,
dropFirst = TRUE, dropMain = FALSE, covCoef = …
Run Code Online (Sandbox Code Playgroud) 最近我在MacBook Pro(El Capitan 10.11.6)上安装了Microsoft R Open 3.3.1.当我打开RStudio或使用R控制台时,我收到以下警告消息:
Warning message:
In doTryCatch(return(expr), name, parentenv, handler) :
unable to load shared object '/Library/Frameworks/R.framework/Resources/modules//R_X11.so':
dlopen(/Library/Frameworks/R.framework/Resources/modules//R_X11.so, 6): Symbol not found: _CGBitmapContextCreate
Referenced from: /Library/Frameworks/R.framework/Resources/modules//R_X11.so
Expected in: flat namespace
in /Library/Frameworks/R.framework/Resources/modules//R_X11.so
Run Code Online (Sandbox Code Playgroud)
您知道一种阻止打印消息(或解决问题)的方法吗?
谢谢!
setwd("/mnt/mountpoint/abc/")
sqlServerConnString <- "SERVER=server;DATABASE=sqldwdb;UID=xyz;PWD=abc;"
sqlServerDataDS <- RxSqlServerData(sqlQuery = "SELECT * FROM xyz",
connectionString = sqlServerConnString)
sqlServerDataDF <- rxImport(sqlServerDataDS)
Run Code Online (Sandbox Code Playgroud)
这是我的代码.我在R中得到了跟随错误
[unixODBC] [驱动程序管理器]无法打开lib'SQL Server':找不到文件
[unixODBC] [驱动程序管理器]连接不存在SQLDisconnect中的ODBC错误无法打开doTryCatch中的数据源.错误(return(expr),name,parentenv,handler):无法打开数据源.
我在我的linux机器上安装了MSSQL和unixODBC驱动程序,它也在/etc/odbc.ini文件中被重新选中
有人可以帮我吗?
更新(2014年8月):我从来没有深究这一点,也从未得到过有关Revolution论坛的任何反馈.然而,这个问题似乎已在Revolution R 7.2中得到修复(使用R 3.0.3,再次是学术版).我运行lme()测试几百次,所有产生的结果都是预期的.[ 更新结束 ]
我刚刚在一台新PC上安装了Revolution R 7.0(R 3.0.2)的学术版本,并且下面的代码得到了奇怪的结果.每次运行代码时,它都会产生不同的结果.在CRAN-R下,结果总是一样的(我认为应该是这样).代码片段来自test.data.table()
版本1.8.10的测试527 ,它指出了错误.
library(nlme)
all.equal(lme(distance ~ age, data=Orthodont), lme(distance ~ age, data=Orthodont))
Run Code Online (Sandbox Code Playgroud)
我得到类似下面的东西,但每次都不一样.
> all.equal(lme(distance ~ age, data=Orthodont), lme(distance ~ age, data=Orthodont))
[1] "Component 4: Component 2: Component 1: Mean relative difference: 1.774149e-08"
[2] "Component 7: Mean relative difference: 0.0003335902"
Run Code Online (Sandbox Code Playgroud)
'有趣'的事情是nlme
包(其中lme()
一部分)本身是相同的,我卸载并重新安装以确保(包的nlme_3.1-113.zip文件是逐位相同的).
我还不知道还有什么可以深入人心的.任何指针或想法将不胜感激.我也在Revolutions的论坛上发帖,但它似乎比这里少得多......
这是64位Windows 8.1,64位R,如果重要的话,Intel i7-4770 CPU.当前版本的Revolution R(R 3.0.2)和之前的版本(2.15.3)都会产生意想不到的(对我而言)行为.CRAN-R 3.0.1和3.0.2产生相同的结果.
Revolution R的sessionInfo()输出:
> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252
[2] …
Run Code Online (Sandbox Code Playgroud) 在我的 RHEL 服务器上,我没有管理员权限,但我可以创建 Conda 环境。我想使用英特尔 MKL(英特尔® 数学核心函数库)创建一个运行 R 的 Conda 环境。
我使用R_defaults.yml创建环境,运行$> conda env create --file R_defaults.yml:
name: R_defaults
channels:
- defaults
- conda-forge
dependencies:
- pkgs/r::r-essentials=3.6.0=r36_0
Run Code Online (Sandbox Code Playgroud)
激活环境,启动 R 和 sessionInfo() 我发现没有使用 MKL:
R version 3.6.1 (2019-07-05)
Platform: x86_64-conda_cos6-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux Server 7.7 (Maipo)
Matrix products: default
BLAS/LAPACK: /home/geiringe/miniconda3/envs/R_r/lib/R/lib/libRblas.so
Run Code Online (Sandbox Code Playgroud)
Microsoft R Open ( https://mran.microsoft.com/download ) 可以与 MKL 一起安装。
Anaconda 似乎改变了对 Microsoft R Open 的看法。2018 年 6 月,据说它成为 Anaconda 发行版的默认 R(https://www.anaconda.com/introducing-microsoft-r-open-as-default-r-for-anaconda-distribution/ …
我发现了我认为MicrosoftR处理来自SPSS的.sav文件的元数据的方式中的错误.
以下是变量视图的摘要:
ColumnA: 1 - Yes, 2 - No
ColumnB: 0.33 - Yes, 0.5 - Maybe, 0.66 - No, 0.99 - Why not, 1.00 - Yes, for sure.
ColumnC: A - Yes, B - No
Run Code Online (Sandbox Code Playgroud)
我的代码:
library(RevoScaleR)
df <- RxSpssData(
"RoundingTest.sav",
stringsAsFactors = FALSE,
labelsAsInfo = TRUE,
labelsAsLevels = TRUE,
mapMissingCodes = "none"
)
test = rxImport(df)
Run Code Online (Sandbox Code Playgroud)
数据读得很好:
ColumnA ColumnB ColumnC Var0001
1 Yes 0.33 Yes NA
2 No 0.50 Yes NA
3 Yes 0.66 No NA
Run Code Online (Sandbox Code Playgroud)
但是,valueInfoCodes不会:
attr(test$ColumnA, ".rxValueInfoCodes") …
Run Code Online (Sandbox Code Playgroud) 使用从命令行Rscript
调用时,我间歇性地收到以下错误mclapply
:
Error in sendMaster(try(lapply(X = S, FUN = FUN, ...), silent = TRUE)) :
write error, closing pipe to the master
Run Code Online (Sandbox Code Playgroud)
如果我在 R Studio 或交互式 R 会话中运行完全相同的代码,则不会出现错误。这个错误会在非常大的作业的各种上下文中弹出,每个工作人员必须将非常大的对象返回给小作业。我也试过关闭prescheduling
,但它仍然抛出错误。有时,如果我减少mc.cores
参数中的线程数,它就会消失。我在 Ubuntu 18.04.1 上使用 Microsoft R Open。它也出现在 Ubuntu 16.04 上。我没有尝试过的一件事是在标准 R 而不是 MRO 中运行代码。
这是我的Rscript -e 'sessionInfo()'
:
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.1 LTS
Matrix products: default
BLAS: /opt/microsoft/ropen/3.5.1/lib64/R/lib/libRblas.so
LAPACK: /opt/microsoft/ropen/3.5.1/lib64/R/lib/libRlapack.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] …
Run Code Online (Sandbox Code Playgroud) 我正在使用RStudio 1.0.136与Microsoft R Open 3.3.2当我执行文件 - >新文件 - > R Markdown ...它说
rmarkdown 1.2是必需的,但1.1可用
和
检查getOption("repos")是否指向包含所需软件包版本的CRAN存储库
和
getOption("repos")
给我这个:
CRAN
"https://mran.revolutionanalytics.com/snapshot/2016-11-01"
CRANextra
"http://www.stats.ox.ac.uk/pub/RWin"
Run Code Online (Sandbox Code Playgroud)
我从哪里开始?
我安装了新的"Microsoft R Open 3.4.0"但我看不到Microsoft R Package,例如RevoScaleR.在这里您可以看到以下错误消息.你可以看到sessionInfo,结果是在线加载了Base-R软件包.
R version 3.4.0 (2017-04-21) -- "You Stupid Darkness"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for …
Run Code Online (Sandbox Code Playgroud) microsoft-r ×10
r ×10
conda ×1
cran ×1
glm ×1
intel-mkl ×1
large-data ×1
mclapply ×1
mixed-models ×1
nlme ×1
r-markdown ×1
revolution-r ×1
rscript ×1
rstudio ×1
sql-server ×1