【问题标题】:How do I run a same code over in R for logit?如何在 R 中为 logit 运行相同的代码?
【发布时间】:2020-10-03 14:39:56
【问题描述】:

我试图让 R 运行相同的函数/代码,但用于数据集。我设置了 50 个问题,是(1)/否(0)答案以及 50 个问题中每个问题的大约 500 个不同的回答。 500 个响应被标识为男性 (1) 或女性 (0)。每个人的最后是他们的“分数”,他们有多少是(1)答案。我之前在 R 上运行过一个绘图,但我想为所有 50 个问题运行这个绘图,而不必每次都更改代码,并且运行代码 50 次。我正在使用的代码如下。数据集是我用性别、Q001-Q052 分和得分作为列然后向下 500 行以及他们的回答和性别制作的 excel 文件。

>LRmod01<-glm(dataset$'Q001points'~dataset$Score+dataset$Gender,data=dataset,family=binomial(link="logit")

>summary(LRmod01)

>LRodds01<-cbind("Odds-Ratio"=exp(LRmod01$coefficients),exp(confint(LRmod01)))

>View(LRodds01)

>LR.pred.probs01<-predict(LRmod01,type="response")

>View(LR.pred.probs01)

>scatter.smooth(dataset$Score,logit(LR.pred.probs01))

>scatter.smooth(dataset$Score,(LR.pred.probs01),main="Logistic Regression for Question 001", xlab="Number of Questions Yes on Exam", ylab="Log Odds for Question 001",ylim=range(0,1,na.rm=TRUE)

我想在上面进行此编码,但要针对所有 50 个问题。现在它只适用于 Q01,我知道它只是因为编码“dataset$'Q001points'”部分。我应该为此使用循环吗?如果可以,如何使用?

【问题讨论】:

    标签: r loops plot scatter mlogit


    【解决方案1】:

    假设我们正在使用数据集mtcars

    > head(mtcars)
                       mpg cyl disp  hp drat    wt  qsec vs am gear carb
    Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
    Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
    Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
    Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
    Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
    Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
    

    现在我们想做几个线性模型,比如

    lm(mtg ~ cyl + disp, data=mtcars)
    

    mtg 应替换为所有其他列。

    lst_model <- lapply(colnames(mtcars)[-3:-1], 
                        function(x) lm(get(x) ~ cyl + disp, data=mtcars))
    lst_model <- setNames(lst_model, colnames(mtcars)[-3:-1])
    

    给出模型列表

    $hp
    
    Call:
    lm(formula = get(x) ~ cyl + disp, data = mtcars)
    
    Coefficients:
    (Intercept)          cyl         disp  
       -32.4317      24.5145       0.1189  
    
    
    $drat
    
    Call:
    lm(formula = get(x) ~ cyl + disp, data = mtcars)
    
    Coefficients:
    (Intercept)          cyl         disp  
       4.607278    -0.095280    -0.001825  
    
    [...]
    

    列表lst_model 的每个元素都以左侧变量命名,即您可以通过lst_model[["hp"]] 获得hp ~ cyl + disp 的模型。

    > lst_model[["hp"]]
    
    Call:
    lm(formula = get(x) ~ cyl + disp, data = mtcars)
    
    Coefficients:
    (Intercept)          cyl         disp  
       -32.4317      24.5145       0.1189  
    

    相同
    > lm(hp ~ cyl + disp, data=mtcars)
    
    Call:
    lm(formula = hp ~ cyl + disp, data = mtcars)
    
    Coefficients:
    (Intercept)          cyl         disp  
       -32.4317      24.5145       0.1189  
    

    例如,如果您想获得模型的拟合值

    model <-  lm(hp ~ cyl + disp, data=mtcars)
    

    你输入model$fitted.values

    lst_model 的情况下,您使用lst_model[["hp"]][["fitted.values"]] 来获得相同的结果。由于[[ 在某种程度上是递归的,您可以使用lst_model[[c("hp", "fitted.values")]],这也是一样的。

    【讨论】:

    • [-3:-1] 在“ lst_model
    • 这只是删除前三列的一种奇特方式。 ;-) 我不想使用 mpgcyldisp 作为 ` ~ cyl + disp, so I removed them using [-3:-1]` 的左侧。
    • 所以如果我想使用所有的列,我可以取出 "[-3:-1]" 吗?
    • 抱歉刚刚测试过,是的,它给了我所有的列。你能帮我理解它给我的不同数据吗?比如什么是系数、残差、效果、拟合值……等等?
    • 查看我的新答案。
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2013-03-17
    • 2023-02-15
    • 2020-07-14
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多