小编Stu*_*olf的帖子

添加置信区间以从 R 中的模拟数据绘制

我创建了一个基于似然函数和模拟的概率模拟,所有这些都可以用下面的代码复制。

这是似然函数:

probit.ll <- function(par,ytilde,x) {
   a <- par[1] 
   b <- par[2]
 return(  -sum( pnorm(ytilde*(a + b*x),log=TRUE) ))
}
Run Code Online (Sandbox Code Playgroud)

这是进行估计的函数:

my.probit <- function(y,x) {
# use OLS to get start values
par <- lm(y~x)$coefficients
ytilde <- 2*y-1
# Run optim 
res <- optim(par,probit.ll,hessian=TRUE,ytilde=ytilde,x=x)
# Return point estimates and SE based on the inverse of Hessian
names(res$par) <- c('a','b')
se=sqrt(diag(solve(res$hessian)))
names(se) <- c('a','b')
return(list(par=res$par,se=se,cov=solve(res$hessian)))
}
Run Code Online (Sandbox Code Playgroud)

这是生成模拟模型的函数:

probit.data <- function(N=100,a=1,b=1) {
x <- rnorm(N)
y.star <- a + b*x + rnorm(N)
y …
Run Code Online (Sandbox Code Playgroud)

r confidence-interval statistics-bootstrap

5
推荐指数
1
解决办法
3173
查看次数

statsmodels.api 返回 MissingDataError:尝试拟合多元回归时 exog 包含 inf 或 nans

我正在尝试将多元线性回归模型与statsmodels.api. 我收到一个错误MissingDataError: exog contains inf or nans。我检查了 nan 和 inf,但没有找到。这怎么可能?为什么我会收到此错误?

代码

import statsmodels.api as sm
from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np

df = pd.read_csv('clean_df.csv')
x_multi = df.drop('price', axis=1) #feature variables.
x_multi_cons = sm.add_constant(x_multi) #add row of constants.
Run Code Online (Sandbox Code Playgroud)

我检查了所有 exog 变量的 na 值,但没有发现任何值。

x_multi_cons.isna().sum()

const                       0
crime_rate                  0
resid_area                  0
air_qual                    0
room_num                    0
age                         0
teachers                    0
poor_prop                   0
n_hos_beds                  8
n_hot_rooms                 0
rainfall                    0
parks                       0
avg_dist                    0
airport_YES …
Run Code Online (Sandbox Code Playgroud)

python linear-regression statsmodels

5
推荐指数
1
解决办法
4万
查看次数

从 glmnet 获取变量选择顺序

我一直在使用 glmnet R 包为一个目标变量 Y(数字)和 762 个协变量构建 LASSO 回归模型。我使用 glmnet() 函数,然后coef(fit, s = 0.056360)获取该特定 lambda 值的系数值。

我现在需要的是变量选择顺序,即首先选择选定的协变量中的哪一个(首先进入模型),第二个,第三个等等。

使用时,plot(fit, label = TRUE)理论上我可以通过绘制的路径看到顺序,但是,协变量太多,标签难以辨认。

从图像中可以看到,第一个协变量是 267(绿色路径),然后是 12,但其余的难以辨认。

协变量路径

r glmnet variable-selection

5
推荐指数
1
解决办法
950
查看次数

GBM 模型生成 NA 结果

我正在尝试运行一个简单的 GBM 分类模型来对随机森林和 SVM 的性能进行基准测试,但是我无法让模型正确评分。它没有抛出错误,但预测都是 NaN。我正在使用来自mlbench. 这是代码:

library(gbm)
library(mlbench)
library(caret)
library(plyr)
library(ada)
library(randomForest)

data(BreastCancer)
bc <- BreastCancer
rm(BreastCancer)

bc$Id <- NULL
bc$Class <- as.factor(mapvalues(bc$Class, c("benign", "malignant"), c("0","1")))

index <- createDataPartition(bc$Class, p = 0.7, list = FALSE)
bc.train <- bc[index, ]
bc.test <- bc[-index, ]

model.gbm <- gbm(Class ~ ., data = bc.train, n.trees = 500)

pred.gbm <- predict(model.gbm, bc.test.ind, n.trees = 500, type = "response")
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助解决我做错了什么吗?另外,我是否必须转换预测函数的输出?我读过这似乎是 GBM 预测的一个问题。谢谢。

r gbm

4
推荐指数
1
解决办法
5742
查看次数

在 R 中绘制 cv.glmnet

使用 R,我尝试修改使用 cv.glmnet 执行岭回归得到的标准图。

我执行岭回归

lam = 10 ^ seq (-2,3, length =100)    
cvfit = cv.glmnet(xTrain, yTrain, alpha = 0, lambda = lam)
Run Code Online (Sandbox Code Playgroud)

我可以通过执行以下操作来绘制系数与 log lambda 的关系

plot(cvfit $glmnet.fit, "lambda")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何根据实际 lambda 值(不是 log lambda)绘制系数并在图上标记每个预测变量?

regression r glmnet

4
推荐指数
1
解决办法
3583
查看次数

使用交互项引导 lmer

lme4我正在R 中使用混合模型:

full_mod3=lmer(logcptplus1 ~ logdepth*logcobb + (1|fyear) + (1 |flocation),
data=cpt, REML=TRUE)
Run Code Online (Sandbox Code Playgroud)

概括:

Formula: logcptplus1 ~ logdepth * logcobb + (1 | fyear) + (1 | flocation)
   Data: cpt

REML criterion at convergence: 577.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.7797 -0.5431  0.0248  0.6562  2.1733 

 Random effects:
 Groups    Name        Variance Std.Dev.
 fyear     (Intercept) 0.2254   0.4748  
 flocation (Intercept) 0.1557   0.3946  
 Residual              0.9663   0.9830  
Number of obs: 193, groups:  fyear, 16; flocation, 16

Fixed effects:
                  Estimate Std. Error t value …
Run Code Online (Sandbox Code Playgroud)

r lme4 statistics-bootstrap

4
推荐指数
1
解决办法
1875
查看次数

删除或隐藏数据点的标签

我有下面的数据框:

Val1<-c(0.5,0.7,0.8,0.9)
Val2<-c(0.5,0.7,0.8,0.9)
Val3<-c(0.5,0.7,0.8,0.9)
Val4<-c(0.5,0.7,0.8,0.9)
vales<-data.frame(Val1,Val2,Val3,Val4)
row.names(vales)<-c("asd","dasd","dfsdf","fdff")
Run Code Online (Sandbox Code Playgroud)

我对其进行了正确处理,以便使用以下命令创建聚类散点图:

library(tidyverse)  # data manipulation
library(cluster)    # clustering algorithms
library(factoextra) # clustering algorithms & visualization
library(plotly)

cl<-scale(vales)
dist <- get_dist(cl)
k2 <- kmeans(cl, centers = 2, nstart = 25)

cl %>%
  as_tibble() %>%
  mutate(cluster = k2$cluster,
         state = row.names(vales))

p2<-fviz_cluster(k2, data = cl)
p2+geom_text(aes(label=""))

#or
ggplotly(p2+geom_text(aes(label="")))
Run Code Online (Sandbox Code Playgroud)

我想删除点的标签,但我不明白为什么它们出现,而在下面的情况下却没有出现。

df <- USArrests
df <- na.omit(df)

df <- scale(df)
distance <- get_dist(df)

k2 <- kmeans(df, centers = 2, nstart = 25)
df %>%
  as_tibble() %>%
  mutate(cluster …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 ggplotly factoextra

4
推荐指数
1
解决办法
4331
查看次数

如何将混淆矩阵中以指数形式显示的值修复为正态形式

在处理我的项目时,我从测试数据中获得了一个混淆矩阵,如下所示:

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
cm
Run Code Online (Sandbox Code Playgroud)

输出为:

array([[1102,   88],
   [  85,  725]], dtype=int64)
Run Code Online (Sandbox Code Playgroud)

使用seaborn和matplotlib,我使用代码将其可视化:

import seaborn as sns
import matplotlib.pyplot as plt     

ax= plt.subplot();
sns.heatmap(cm, annot=True,cmap='Blues',ax=ax);
# labels, title and ticks
ax.set_xlabel('Predicted labels');ax.set_ylabel('True labels'); 
ax.set_ylim(2.0, 0)
ax.set_title('Confusion Matrix');
ax.xaxis.set_ticklabels(['Fake','Real']); 
ax.yaxis.set_ticklabels(['Fake','Real']);
Run Code Online (Sandbox Code Playgroud)

得到的输出是:

混淆矩阵

问题是 3 位数字(此处 1102 显示为 11e+03)或以上的值以指数形式显示。

有没有办法以正常形式显示它?

python matplotlib seaborn

4
推荐指数
1
解决办法
5533
查看次数

OneHot 编码蛋白质序列

我有一个下面列出的序列的原始数据帧,我尝试使用 one-hot 编码,然后将它们存储在一个新的数据帧中,我尝试使用以下代码执行此操作,但无法存储,因为我之后得到以下输出:

代码:

onehot_encoder = OneHotEncoder()
sequence = np.array(list(x_train['sequence'])).reshape(-1, 1)
encoded_sequence = onehot_encoder.fit_transform(sequence).toarray()
encoded_sequence
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但出现错误

ValueError: Wrong number of items passed 12755, placement implies 1
Run Code Online (Sandbox Code Playgroud)

python bioinformatics scikit-learn one-hot-encoding

4
推荐指数
1
解决办法
3655
查看次数

如何从多元回归模型中提取置信区间?

我正在提取两个不同组的回归结果,如下面的示例所示。在tempdata.frame 中,我得到估计值、std.error、统计量和 p 值。但是,我没有得到置信区间。有没有一种简单的方法来提取它们?

 df <- tibble(
  a = rnorm(1000),
  b = rnorm(1000),
  c = rnorm(1000),
  d = rnorm(1000),
  group = rbinom(n=1000, size=1, prob=0.5)
)

df$group = as.factor(df$group)

temp <- df %>%
  group_by(group) %>%
  do(model1 = tidy(lm(a ~ b + c + d, data = .))) %>%   
  gather(model_name, model, -group) %>%                        
  unnest() 
Run Code Online (Sandbox Code Playgroud)

regression r confidence-interval broom

4
推荐指数
1
解决办法
134
查看次数